1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ciimport { TraficEnum } from './utils/QueryEnum'; 16fb726d48Sopenharmony_ciimport { hiLogList } from './utils/AllMemoryCache'; 17fb726d48Sopenharmony_ciimport { filterDataByGroupLayer } from './utils/DataFilter'; 18fb726d48Sopenharmony_ciimport { Args } from './CommonArgs'; 19fb726d48Sopenharmony_ci 20fb726d48Sopenharmony_ciexport const chartLogDataSql = (args: Args): string => { 21fb726d48Sopenharmony_ci return `SELECT l.seq AS id, 22fb726d48Sopenharmony_ci l.pid, 23fb726d48Sopenharmony_ci l.tid, 24fb726d48Sopenharmony_ci CASE 25fb726d48Sopenharmony_ci WHEN l.ts < ${args.oneDayTime} THEN 0 26fb726d48Sopenharmony_ci ELSE (l.ts - ${args.recordStartNS}) 27fb726d48Sopenharmony_ci END AS startTs, 28fb726d48Sopenharmony_ci CASE 29fb726d48Sopenharmony_ci WHEN l.level = 'D' THEN 0 30fb726d48Sopenharmony_ci WHEN l.level = 'I' THEN 1 31fb726d48Sopenharmony_ci WHEN l.level = 'W' THEN 2 32fb726d48Sopenharmony_ci WHEN l.level = 'E' THEN 3 33fb726d48Sopenharmony_ci WHEN l.level = 'F' THEN 4 34fb726d48Sopenharmony_ci END AS depth, 35fb726d48Sopenharmony_ci 1 AS dur, 36fb726d48Sopenharmony_ci ((l.ts - ${args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)})) + 37fb726d48Sopenharmony_ci CASE 38fb726d48Sopenharmony_ci WHEN l.level = 'D' THEN 0 39fb726d48Sopenharmony_ci WHEN l.level = 'I' THEN 1 40fb726d48Sopenharmony_ci WHEN l.level = 'W' THEN 2 41fb726d48Sopenharmony_ci WHEN l.level = 'E' THEN 3 42fb726d48Sopenharmony_ci WHEN l.level = 'F' THEN 4 43fb726d48Sopenharmony_ci END * ${args.width} AS px 44fb726d48Sopenharmony_ci FROM (SELECT DISTINCT seq FROM log) AS inner_log 45fb726d48Sopenharmony_ci JOIN log AS l ON l.seq = inner_log.seq 46fb726d48Sopenharmony_ci WHERE (CASE 47fb726d48Sopenharmony_ci WHEN l.ts < ${args.oneDayTime} THEN 0 48fb726d48Sopenharmony_ci ELSE (l.ts - ${args.recordStartNS}) 49fb726d48Sopenharmony_ci END) + 1 >= ${Math.floor(args.startNS)} 50fb726d48Sopenharmony_ci AND (CASE 51fb726d48Sopenharmony_ci WHEN l.ts < ${args.oneDayTime} THEN 0 52fb726d48Sopenharmony_ci ELSE (l.ts - ${args.recordStartNS}) 53fb726d48Sopenharmony_ci END) <= ${Math.floor(args.endNS)} 54fb726d48Sopenharmony_ci GROUP BY px`; 55fb726d48Sopenharmony_ci}; 56fb726d48Sopenharmony_ci 57fb726d48Sopenharmony_ciexport const chartLogDataMemorySql = (args: Args): string => { 58fb726d48Sopenharmony_ci return `SELECT l.seq AS id, 59fb726d48Sopenharmony_ci l.pid, 60fb726d48Sopenharmony_ci l.tid, 61fb726d48Sopenharmony_ci CASE 62fb726d48Sopenharmony_ci WHEN l.ts < ${args.oneDayTime} THEN 0 63fb726d48Sopenharmony_ci ELSE (l.ts - ${args.recordStartNS}) 64fb726d48Sopenharmony_ci END AS startTs, 65fb726d48Sopenharmony_ci CASE 66fb726d48Sopenharmony_ci WHEN l.level = 'D' THEN 0 67fb726d48Sopenharmony_ci WHEN l.level = 'I' THEN 1 68fb726d48Sopenharmony_ci WHEN l.level = 'W' THEN 2 69fb726d48Sopenharmony_ci WHEN l.level = 'E' THEN 3 70fb726d48Sopenharmony_ci WHEN l.level = 'F' THEN 4 71fb726d48Sopenharmony_ci END AS depth, 72fb726d48Sopenharmony_ci 1 AS dur 73fb726d48Sopenharmony_ci FROM (SELECT DISTINCT seq FROM log) AS inner_log 74fb726d48Sopenharmony_ci JOIN log AS l ON l.seq = inner_log.seq 75fb726d48Sopenharmony_ci ORDER BY l.seq`; 76fb726d48Sopenharmony_ci}; 77fb726d48Sopenharmony_ci 78fb726d48Sopenharmony_ciexport function logDataReceiver(data: unknown, proc: Function): void { 79fb726d48Sopenharmony_ci // @ts-ignore 80fb726d48Sopenharmony_ci if (data.params.trafic === TraficEnum.Memory) { 81fb726d48Sopenharmony_ci // @ts-ignore 82fb726d48Sopenharmony_ci if (!hiLogList.has(data.params.id)) { 83fb726d48Sopenharmony_ci // @ts-ignore 84fb726d48Sopenharmony_ci let sql = chartLogDataMemorySql(data.params); 85fb726d48Sopenharmony_ci // @ts-ignore 86fb726d48Sopenharmony_ci hiLogList.set(data.params.id, proc(sql)); 87fb726d48Sopenharmony_ci } 88fb726d48Sopenharmony_ci // @ts-ignore 89fb726d48Sopenharmony_ci let list = hiLogList.get(data.params.id) || []; 90fb726d48Sopenharmony_ci let res = filterDataByGroupLayer( 91fb726d48Sopenharmony_ci list || [], 92fb726d48Sopenharmony_ci 'depth', 93fb726d48Sopenharmony_ci 'startTs', 94fb726d48Sopenharmony_ci 'dur', 95fb726d48Sopenharmony_ci // @ts-ignore 96fb726d48Sopenharmony_ci data.params.startNS, 97fb726d48Sopenharmony_ci // @ts-ignore 98fb726d48Sopenharmony_ci data.params.endNS, 99fb726d48Sopenharmony_ci // @ts-ignore 100fb726d48Sopenharmony_ci data.params.width 101fb726d48Sopenharmony_ci ); 102fb726d48Sopenharmony_ci // @ts-ignore 103fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 104fb726d48Sopenharmony_ci } else { 105fb726d48Sopenharmony_ci // @ts-ignore 106fb726d48Sopenharmony_ci let sql = chartLogDataSql(data.params); 107fb726d48Sopenharmony_ci let res = proc(sql); 108fb726d48Sopenharmony_ci // @ts-ignore 109fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 110fb726d48Sopenharmony_ci } 111fb726d48Sopenharmony_ci} 112fb726d48Sopenharmony_ci 113fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void { 114fb726d48Sopenharmony_ci // @ts-ignore 115fb726d48Sopenharmony_ci let id = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.id); 116fb726d48Sopenharmony_ci // @ts-ignore 117fb726d48Sopenharmony_ci let startTs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startTs); 118fb726d48Sopenharmony_ci // @ts-ignore 119fb726d48Sopenharmony_ci let pid = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.pid); 120fb726d48Sopenharmony_ci // @ts-ignore 121fb726d48Sopenharmony_ci let tid = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.tid); 122fb726d48Sopenharmony_ci // @ts-ignore 123fb726d48Sopenharmony_ci let dur = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 124fb726d48Sopenharmony_ci // @ts-ignore 125fb726d48Sopenharmony_ci let depth = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.depth); 126fb726d48Sopenharmony_ci res.forEach((it, index) => { 127fb726d48Sopenharmony_ci // @ts-ignore 128fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (it = it.logData); 129fb726d48Sopenharmony_ci // @ts-ignore 130fb726d48Sopenharmony_ci id[index] = it.id; 131fb726d48Sopenharmony_ci // @ts-ignore 132fb726d48Sopenharmony_ci startTs[index] = it.startTs; 133fb726d48Sopenharmony_ci // @ts-ignore 134fb726d48Sopenharmony_ci pid[index] = it.pid; 135fb726d48Sopenharmony_ci // @ts-ignore 136fb726d48Sopenharmony_ci tid[index] = it.tid; 137fb726d48Sopenharmony_ci // @ts-ignore 138fb726d48Sopenharmony_ci dur[index] = it.dur; 139fb726d48Sopenharmony_ci // @ts-ignore 140fb726d48Sopenharmony_ci depth[index] = it.depth; 141fb726d48Sopenharmony_ci }); 142fb726d48Sopenharmony_ci 143fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 144fb726d48Sopenharmony_ci { 145fb726d48Sopenharmony_ci // @ts-ignore 146fb726d48Sopenharmony_ci id: data.id, 147fb726d48Sopenharmony_ci // @ts-ignore 148fb726d48Sopenharmony_ci action: data.action, 149fb726d48Sopenharmony_ci results: transfer 150fb726d48Sopenharmony_ci ? { 151fb726d48Sopenharmony_ci id: id.buffer, 152fb726d48Sopenharmony_ci startTs: startTs.buffer, 153fb726d48Sopenharmony_ci pid: pid.buffer, 154fb726d48Sopenharmony_ci tid: tid.buffer, 155fb726d48Sopenharmony_ci dur: dur.buffer, 156fb726d48Sopenharmony_ci depth: depth.buffer, 157fb726d48Sopenharmony_ci } 158fb726d48Sopenharmony_ci : {}, 159fb726d48Sopenharmony_ci len: res.length, 160fb726d48Sopenharmony_ci transfer: transfer, 161fb726d48Sopenharmony_ci }, 162fb726d48Sopenharmony_ci transfer ? [id.buffer, startTs.buffer, pid.buffer, tid.buffer, dur.buffer, depth.buffer] : [] 163fb726d48Sopenharmony_ci ); 164fb726d48Sopenharmony_ci} 165