1// Copyright (c) 2021 Huawei Device Co., Ltd. 2// Licensed under the Apache License, Version 2.0 (the "License"); 3// you may not use this file except in compliance with the License. 4// You may obtain a copy of the License at 5// 6// http://www.apache.org/licenses/LICENSE-2.0 7// 8// Unless required by applicable law or agreed to in writing, software 9// distributed under the License is distributed on an "AS IS" BASIS, 10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11// See the License for the specific language governing permissions and 12// limitations under the License. 13import { TraficEnum } from './utils/QueryEnum'; 14export const cpuAbilityMonitorDataSql = (args: any): string => { 15 return `select 16 (t.total_load) as value, 17 (t.ts - ${args.recordStartNS} ) as startNs 18 from cpu_usage t`; 19}; 20export const cpuAbilityUserDataSql = (args: any): string => { 21 return `select 22 t.user_load as value, 23 (t.ts - ${args.recordStartNS} ) as startNs 24 from cpu_usage t`; 25}; 26export const cpuAbilitySystemDataSql = (args: any): string => { 27 return `select 28 t.system_load as value, 29 (t.ts - ${args.recordStartNS} ) as startNs 30 from cpu_usage t`; 31}; 32export const abilityMemoryDataSql = (args: any): string => { 33 return `select 34 t.value as value, 35 (t.ts - ${args.recordStartNS} ) as startNs 36 from sys_mem_measure t 37 where t.filter_id = ${args.id}`; 38}; 39export const abilityBytesReadDataSql = (args: any): string => { 40 return `select 41 t.rd_speed as value, 42 (t.ts - ${args.recordStartNS} ) as startNs 43 from diskio t`; 44}; 45export const abilityBytesWrittenDataSql = (args: any): string => { 46 return `select 47 t.wr_speed as value, 48 (t.ts - ${args.recordStartNS} ) as startNs 49 from diskio t`; 50}; 51export const abilityReadOpsDataSql = (args: any): string => { 52 return `select 53 t.rd_count_speed as value, 54 (t.ts - ${args.recordStartNS} ) as startNs 55 from diskio t`; 56}; 57export const abilityWrittenOpsDataSql = (args: any): string => { 58 return `select 59 t.wr_count_speed as value, 60 (t.ts - ${args.recordStartNS} ) as startNs 61 from diskio t`; 62}; 63export const abilityBytesInTraceDataSql = (args: any): string => { 64 return `select 65 t.tx_speed as value, 66 (t.ts - ${args.recordStartNS} ) as startNs 67 from network t`; 68}; 69export const abilityBytesOutTraceDataSql = (args: any): string => { 70 return `select 71 t.rx_speed as value, 72 (t.ts - ${args.recordStartNS} ) as startNs 73 from network t`; 74}; 75export const abilityPacketInDataSql = (args: any): string => { 76 return `select 77 t.packet_in_sec as value, 78 (t.ts - ${args.recordStartNS} ) as startNs 79 from network t`; 80}; 81export const abilityPacketsOutDataSql = (args: any): string => { 82 return `select 83 t.packet_out_sec as value, 84 (t.ts - ${args.recordStartNS} ) as startNs 85 from network t`; 86}; 87export const cpuAbilityMonitorDataProtoSql = (args: any): string => { 88 return `select 89 (t.total_load) as value, 90 (t.ts - ${args.recordStartNS} ) as startNs 91 from cpu_usage t`; 92}; 93export const cpuAbilityUserDataProtoSql = (args: any): string => { 94 return `select 95 t.user_load as value, 96 (t.ts - ${args.recordStartNS} ) as startNs 97 from cpu_usage t`; 98}; 99export const cpuAbilitySystemDataProtoSql = (args: any): string => { 100 return `select 101 t.system_load as value, 102 (t.ts - ${args.recordStartNS} ) as startNs 103 from cpu_usage t`; 104}; 105export const abilityMemoryDataProtoSql = (args: any): string => { 106 return `select 107 t.value as value, 108 (t.ts - ${args.recordStartNS} ) as startNs 109 from sys_mem_measure t 110 where t.filter_id = ${args.id}`; 111}; 112export const abilityBytesReadDataProtoSql = (args: any): string => { 113 return `select 114 t.rd_speed as value, 115 (t.ts - ${args.recordStartNS} ) as startNs 116 from diskio t`; 117}; 118export const abilityBytesWrittenDataProtoSql = (args: any): string => { 119 return `select 120 t.wr_speed as value, 121 (t.ts - ${args.recordStartNS} ) as startNs 122 from diskio t`; 123}; 124export const abilityReadOpsDataProtoSql = (args: any): string => { 125 return `select 126 t.rd_count_speed as value, 127 (t.ts - ${args.recordStartNS} ) as startNs 128 from diskio t`; 129}; 130export const abilityWrittenOpsDataProtoSql = (args: any): string => { 131 return `select 132 t.wr_count_speed as value, 133 (t.ts - ${args.recordStartNS} ) as startNs 134 from diskio t`; 135}; 136export const abilityBytesInTraceDataProtoSql = (args: any): string => { 137 return `select 138 t.tx_speed as value, 139 (t.ts - ${args.recordStartNS} ) as startNs 140 from network t`; 141}; 142export const abilityBytesOutTraceDataProtoSql = (args: any): string => { 143 return `select 144 t.rx_speed as value, 145 (t.ts - ${args.recordStartNS} ) as startNs 146 from network t`; 147}; 148export const abilityPacketInDataProtoSql = (args: any): string => { 149 return `select 150 t.packet_in_sec as value, 151 (t.ts - ${args.recordStartNS} ) as startNs 152 from network t`; 153}; 154export const abilityPacketsOutDataProtoSql = (args: any): string => { 155 return `select 156 t.packet_out_sec as value, 157 (t.ts - ${args.recordStartNS} ) as startNs 158 from network t`; 159}; 160 161let totalList: Array<any> = []; 162let userList: Array<any> = []; 163let systemList: Array<any> = []; 164let memoryList: Array<any> = []; 165let memoryListMap = new Map<string, Array<any>>(); 166let bytesReadList: Array<any> = []; 167let bytesWriteList: Array<any> = []; 168let readOpsList: Array<any> = []; 169let writeOpsList: Array<any> = []; 170let bytesInList: Array<any> = []; 171let bytesOutList: Array<any> = []; 172let packetInList: Array<any> = []; 173let packetOutList: Array<any> = []; 174 175export function resetAbilityMonitor(): void { 176 totalList = []; 177 userList = []; 178 systemList = []; 179 memoryList = []; 180 memoryListMap.clear(); 181 bytesReadList = []; 182 bytesWriteList = []; 183 readOpsList = []; 184 writeOpsList = []; 185 bytesInList = []; 186 bytesOutList = []; 187 packetInList = []; 188 packetOutList = []; 189} 190/** 191 * @param data 192 * @param proc 193 */ 194 195export function cpuAbilityMonitorDataReceiver(data: any, proc: Function): void { 196 if (data.params.trafic === TraficEnum.Memory) { 197 if (totalList.length === 0) { 198 totalList = proc(cpuAbilityMonitorDataSql(data.params)); 199 } 200 cpuArrayBufferHandler(data, totalList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 201 } else { 202 let sql = cpuAbilityMonitorDataProtoSql(data.params); 203 let res = proc(sql); 204 cpuArrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 205 } 206} 207export function cpuAbilityUserDataReceiver(data: any, proc: Function): void { 208 if (data.params.trafic === TraficEnum.Memory) { 209 if (userList.length === 0) { 210 userList = proc(cpuAbilityUserDataSql(data.params)); 211 } 212 cpuArrayBufferHandler(data, userList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 213 } else { 214 let sql = cpuAbilityUserDataProtoSql(data.params); 215 let res = proc(sql); 216 cpuArrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 217 } 218} 219export function cpuAbilitySystemDataReceiver(data: any, proc: Function): void { 220 if (data.params.trafic === TraficEnum.Memory) { 221 if (systemList.length === 0) { 222 systemList = proc(cpuAbilitySystemDataSql(data.params)); 223 } 224 cpuArrayBufferHandler(data, systemList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 225 } else { 226 let sql = cpuAbilitySystemDataProtoSql(data.params); 227 let res = proc(sql); 228 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 229 } 230} 231export function abilityMemoryUsedDataReceiver(data: any, proc: Function): void { 232 if (data.params.trafic === TraficEnum.Memory) { 233 if (!memoryListMap.has(data.params.id)) { 234 memoryList = proc(abilityMemoryDataSql(data.params)); 235 memoryListMap.set(data.params.id, memoryList); 236 } 237 let list = memoryListMap.get(data.params.id) || []; 238 arrayBufferHandler(data, list, data.params.trafic !== TraficEnum.SharedArrayBuffer); 239 } else { 240 let sql = abilityMemoryDataProtoSql(data.params); 241 let res = proc(sql); 242 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 243 } 244} 245export function abilityBytesReadDataReceiver(data: any, proc: Function): void { 246 if (data.params.trafic === TraficEnum.Memory) { 247 if (bytesReadList.length === 0) { 248 bytesReadList = proc(abilityBytesReadDataSql(data.params)); 249 } 250 arrayBufferHandler(data, bytesReadList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 251 } else { 252 let sql = abilityBytesReadDataProtoSql(data.params); 253 let res = proc(sql); 254 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 255 } 256} 257export function abilityBytesWrittenDataReceiver(data: any, proc: Function): void { 258 if (data.params.trafic === TraficEnum.Memory) { 259 if (bytesWriteList.length === 0) { 260 bytesWriteList = proc(abilityBytesWrittenDataSql(data.params)); 261 } 262 arrayBufferHandler(data, bytesWriteList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 263 } else { 264 let sql = abilityBytesWrittenDataProtoSql(data.params); 265 let res = proc(sql); 266 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 267 } 268} 269export function abilityReadOpsDataReceiver(data: any, proc: Function): void { 270 if (data.params.trafic === TraficEnum.Memory) { 271 if (readOpsList.length === 0) { 272 readOpsList = proc(abilityReadOpsDataSql(data.params)); 273 } 274 arrayBufferHandler(data, readOpsList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 275 } else { 276 let sql = abilityReadOpsDataProtoSql(data.params); 277 let res = proc(sql); 278 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 279 } 280} 281export function abilityWrittenOpsDataReceiver(data: any, proc: Function): void { 282 if (data.params.trafic === TraficEnum.Memory) { 283 if (writeOpsList.length === 0) { 284 writeOpsList = proc(abilityWrittenOpsDataSql(data.params)); 285 } 286 arrayBufferHandler(data, writeOpsList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 287 } else { 288 let sql = abilityWrittenOpsDataProtoSql(data.params); 289 let res = proc(sql); 290 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 291 } 292} 293export function abilityBytesInTraceDataReceiver(data: any, proc: Function): void { 294 if (data.params.trafic === TraficEnum.Memory) { 295 if (bytesInList.length === 0) { 296 bytesInList = proc(abilityBytesInTraceDataSql(data.params)); 297 } 298 arrayBufferHandler(data, bytesInList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 299 } else { 300 let sql = abilityBytesInTraceDataProtoSql(data.params); 301 let res = proc(sql); 302 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 303 } 304} 305export function abilityBytesOutTraceDataReceiver(data: any, proc: Function): void { 306 if (data.params.trafic === TraficEnum.Memory) { 307 if (bytesOutList.length === 0) { 308 bytesOutList = proc(abilityBytesOutTraceDataSql(data.params)); 309 } 310 arrayBufferHandler(data, bytesOutList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 311 } else { 312 let sql = abilityBytesOutTraceDataProtoSql(data.params); 313 let res = proc(sql); 314 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 315 } 316} 317export function abilityPacketInTraceDataReceiver(data: any, proc: Function): void { 318 if (data.params.trafic === TraficEnum.Memory) { 319 if (packetInList.length === 0) { 320 packetInList = proc(abilityPacketInDataSql(data.params)); 321 } 322 arrayBufferHandler(data, packetInList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 323 } else { 324 let sql = abilityPacketInDataProtoSql(data.params); 325 let res = proc(sql); 326 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 327 } 328} 329export function abilityPacketsOutTraceDataReceiver(data: any, proc: Function): void { 330 if (data.params.trafic === TraficEnum.Memory) { 331 if (packetOutList.length === 0) { 332 packetOutList = proc(abilityPacketsOutDataSql(data.params)); 333 } 334 arrayBufferHandler(data, packetOutList, data.params.trafic !== TraficEnum.SharedArrayBuffer); 335 } else { 336 let sql = abilityPacketsOutDataProtoSql(data.params); 337 let res = proc(sql); 338 arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 339 } 340} 341 342function arrayBufferHandler(data: any, res: any[], transfer: boolean): void { 343 let startNS = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNS); 344 let value = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.value); 345 let dur = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 346 res.forEach((it, i) => { 347 data.params.trafic === TraficEnum.ProtoBuffer && (it = it.abilityData); 348 startNS[i] = it.startNs; 349 value[i] = it.value; 350 dur[i] = it.dur; 351 }); 352 (self as unknown as Worker).postMessage( 353 { 354 id: data.id, 355 action: data.action, 356 results: transfer 357 ? { 358 startNS: startNS.buffer, 359 value: value.buffer, 360 dur: dur.buffer, 361 } 362 : {}, 363 len: res.length, 364 transfer: transfer, 365 }, 366 transfer ? [startNS.buffer, value.buffer, dur.buffer] : [] 367 ); 368} 369 370function cpuArrayBufferHandler(data: any, res: any[], transfer: boolean): void { 371 let startNS = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNS); 372 let value = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.value); 373 let dur = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 374 res.forEach((it, i) => { 375 data.params.trafic === TraficEnum.ProtoBuffer && (it = it.cpuAbilityData); 376 startNS[i] = it.startNs; 377 value[i] = it.value; 378 dur[i] = it.dur; 379 }); 380 (self as unknown as Worker).postMessage( 381 { 382 id: data.id, 383 action: data.action, 384 results: transfer 385 ? { 386 startNS: startNS.buffer, 387 value: value.buffer, 388 dur: dur.buffer, 389 } 390 : {}, 391 len: res.length, 392 transfer: transfer, 393 }, 394 transfer ? [startNS.buffer, value.buffer, dur.buffer] : [] 395 ); 396} 397