• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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