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_ci
16fb726d48Sopenharmony_ciimport { TraficEnum } from './utils/QueryEnum';
17fb726d48Sopenharmony_ciimport { energyList } from './utils/AllMemoryCache';
18fb726d48Sopenharmony_ciimport { Args } from './CommonArgs';
19fb726d48Sopenharmony_ci
20fb726d48Sopenharmony_ciexport const systemDataSql = (args: Args): string => {
21fb726d48Sopenharmony_ci  return `SELECT S.id,
22fb726d48Sopenharmony_ci                 S.ts - ${args.recordStartNS
23fb726d48Sopenharmony_ci    }                                                                   AS startNs,
24fb726d48Sopenharmony_ci                 D.data                                                                                         AS eventName,
25fb726d48Sopenharmony_ci                 (case when D.data = 'POWER_RUNNINGLOCK' then 1 when D.data = 'GNSS_STATE' then 2 else 0 end) AS appKey,
26fb726d48Sopenharmony_ci                 contents                                                                                       AS eventValue,
27fb726d48Sopenharmony_ci                 ((S.ts - ${args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)}))   as px
28fb726d48Sopenharmony_ci          FROM hisys_all_event AS S
29fb726d48Sopenharmony_ci                   LEFT JOIN data_dict AS D ON S.event_name_id = D.id
30fb726d48Sopenharmony_ci                   LEFT JOIN data_dict AS D2 ON S.domain_id = D2.id
31fb726d48Sopenharmony_ci          WHERE eventName IN ('POWER_RUNNINGLOCK', 'GNSS_STATE', 'WORK_START', 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD')
32fb726d48Sopenharmony_ci            and startNs >= ${Math.floor(args.startNS)}
33fb726d48Sopenharmony_ci            and startNs <= ${Math.floor(args.endNS)}
34fb726d48Sopenharmony_ci          group by px;`;
35fb726d48Sopenharmony_ci};
36fb726d48Sopenharmony_ci
37fb726d48Sopenharmony_ciexport const systemDataMemSql = (args: Args): string => {
38fb726d48Sopenharmony_ci  return `SELECT S.id,
39fb726d48Sopenharmony_ci                 S.ts - ${args.recordStartNS}                                                                         AS startNs,
40fb726d48Sopenharmony_ci                 D.data                                                                                               AS eventName,
41fb726d48Sopenharmony_ci                 (case when D.data = 'POWER_RUNNINGLOCK' then '1' when D.data = 'GNSS_STATE' then '2' else '0' end) AS appKey,
42fb726d48Sopenharmony_ci                 contents                                                                                             AS eventValue
43fb726d48Sopenharmony_ci          FROM hisys_all_event AS S
44fb726d48Sopenharmony_ci                   LEFT JOIN data_dict AS D ON S.event_name_id = D.id
45fb726d48Sopenharmony_ci                   LEFT JOIN data_dict AS D2 ON S.domain_id = D2.id
46fb726d48Sopenharmony_ci          WHERE eventName IN
47fb726d48Sopenharmony_ci                ('POWER_RUNNINGLOCK', 'GNSS_STATE', 'WORK_START', 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD');`;
48fb726d48Sopenharmony_ci};
49fb726d48Sopenharmony_ci
50fb726d48Sopenharmony_ciexport const chartEnergyAnomalyDataSql = (args: Args): string => {
51fb726d48Sopenharmony_ci  return `
52fb726d48Sopenharmony_ci      select S.id,
53fb726d48Sopenharmony_ci             S.ts - ${args.recordStartNS}                  as startNs,
54fb726d48Sopenharmony_ci             D.data                                        as eventName,
55fb726d48Sopenharmony_ci             D2.data                                       as appKey,
56fb726d48Sopenharmony_ci             (case
57fb726d48Sopenharmony_ci                  when S.type==1 then group_concat(S.string_value, ',')
58fb726d48Sopenharmony_ci                  else group_concat(S.int_value, ',') end) as eventValue
59fb726d48Sopenharmony_ci      from hisys_event_measure as S
60fb726d48Sopenharmony_ci               left join data_dict as D
61fb726d48Sopenharmony_ci                         on D.id = S.name_id
62fb726d48Sopenharmony_ci               left join app_name as APP on APP.id = S.key_id
63fb726d48Sopenharmony_ci               left join data_dict as D2 on D2.id = APP.app_key
64fb726d48Sopenharmony_ci      where D.data in
65fb726d48Sopenharmony_ci            ('ANOMALY_SCREEN_OFF_ENERGY', 'ANOMALY_KERNEL_WAKELOCK', 'ANOMALY_CPU_HIGH_FREQUENCY', 'ANOMALY_WAKEUP')
66fb726d48Sopenharmony_ci         or (D.data in ('ANOMALY_RUNNINGLOCK', 'ANORMALY_APP_ENERGY', 'ANOMALY_GNSS_ENERGY', 'ANOMALY_CPU_ENERGY',
67fb726d48Sopenharmony_ci                        'ANOMALY_ALARM_WAKEUP')
68fb726d48Sopenharmony_ci          and D2.data in ('APPNAME'))
69fb726d48Sopenharmony_ci      group by S.serial, D.data`;
70fb726d48Sopenharmony_ci};
71fb726d48Sopenharmony_ciexport const queryPowerValueSql = (args: Args): string => {
72fb726d48Sopenharmony_ci  return `
73fb726d48Sopenharmony_ci      SELECT S.id,
74fb726d48Sopenharmony_ci             S.ts - ${args.recordStartNS}                                                        as startNs,
75fb726d48Sopenharmony_ci             D.data                                                                              AS eventName,
76fb726d48Sopenharmony_ci             D2.data                                                                             AS appKey,
77fb726d48Sopenharmony_ci             group_concat((CASE WHEN S.type = 1 THEN S.string_value ELSE S.int_value END), ',') AS eventValue
78fb726d48Sopenharmony_ci      FROM hisys_event_measure AS S
79fb726d48Sopenharmony_ci               LEFT JOIN data_dict AS D
80fb726d48Sopenharmony_ci                         ON D.id = S.name_id
81fb726d48Sopenharmony_ci               LEFT JOIN app_name AS APP
82fb726d48Sopenharmony_ci                         ON APP.id = S.key_id
83fb726d48Sopenharmony_ci               LEFT JOIN data_dict AS D2
84fb726d48Sopenharmony_ci                         ON D2.id = APP.app_key
85fb726d48Sopenharmony_ci      where D.data in ('POWER_IDE_CPU', 'POWER_IDE_LOCATION', 'POWER_IDE_GPU', 'POWER_IDE_DISPLAY', 'POWER_IDE_CAMERA',
86fb726d48Sopenharmony_ci                       'POWER_IDE_BLUETOOTH', 'POWER_IDE_FLASHLIGHT', 'POWER_IDE_AUDIO', 'POWER_IDE_WIFISCAN')
87fb726d48Sopenharmony_ci        and D2.data in
88fb726d48Sopenharmony_ci            ('BACKGROUND_ENERGY', 'FOREGROUND_ENERGY', 'SCREEN_ON_ENERGY', 'SCREEN_OFF_ENERGY', 'ENERGY', 'APPNAME')
89fb726d48Sopenharmony_ci      GROUP BY S.serial,
90fb726d48Sopenharmony_ci               APP.app_key,
91fb726d48Sopenharmony_ci               D.data,
92fb726d48Sopenharmony_ci               D2.data
93fb726d48Sopenharmony_ci      ORDER BY eventName;`;
94fb726d48Sopenharmony_ci};
95fb726d48Sopenharmony_ci
96fb726d48Sopenharmony_ciexport const queryStateDataSql = (args: Args): string => {
97fb726d48Sopenharmony_ci  return `
98fb726d48Sopenharmony_ci      select S.id,
99fb726d48Sopenharmony_ci             S.ts - ${args.recordStartNS} as startNs,
100fb726d48Sopenharmony_ci             D.data                       as eventName,
101fb726d48Sopenharmony_ci             D2.data                      as appKey,
102fb726d48Sopenharmony_ci             S.int_value                  as eventValue
103fb726d48Sopenharmony_ci      from hisys_event_measure as S
104fb726d48Sopenharmony_ci               left join data_dict as D on D.id = S.name_id
105fb726d48Sopenharmony_ci               left join app_name as APP on APP.id = S.key_id
106fb726d48Sopenharmony_ci               left join data_dict as D2 on D2.id = APP.app_key
107fb726d48Sopenharmony_ci      where (case when 'SENSOR_STATE'== '${args.eventName}' then D.data like '%SENSOR%' else D.data = '${args.eventName}' end)
108fb726d48Sopenharmony_ci        and D2.data in ('BRIGHTNESS', 'STATE', 'VALUE', 'LEVEL', 'VOLUME', 'OPER_TYPE', 'VOLUME')
109fb726d48Sopenharmony_ci      group by S.serial, APP.app_key, D.data, D2.data;`;
110fb726d48Sopenharmony_ci};
111fb726d48Sopenharmony_ci
112fb726d48Sopenharmony_ciexport const queryStateProtoDataSql = (args: Args): string => {
113fb726d48Sopenharmony_ci  return `
114fb726d48Sopenharmony_ci      SELECT S.id,
115fb726d48Sopenharmony_ci             S.ts - ${args.recordStartNS} AS startNs,
116fb726d48Sopenharmony_ci             D.data                       AS eventName,
117fb726d48Sopenharmony_ci             ''                           AS appKey,
118fb726d48Sopenharmony_ci             contents                     AS eventValue
119fb726d48Sopenharmony_ci      FROM hisys_all_event AS S
120fb726d48Sopenharmony_ci               LEFT JOIN data_dict AS D ON S.event_name_id = D.id
121fb726d48Sopenharmony_ci               LEFT JOIN data_dict AS D2 ON S.domain_id = D2.id
122fb726d48Sopenharmony_ci      WHERE eventName = ${args.eventName}`;
123fb726d48Sopenharmony_ci};
124fb726d48Sopenharmony_cilet systemList: Array<unknown> = [];
125fb726d48Sopenharmony_cilet anomalyList: Array<unknown> = [];
126fb726d48Sopenharmony_cilet powerList: Array<unknown> = [];
127fb726d48Sopenharmony_ci
128fb726d48Sopenharmony_ciexport function resetEnergyEvent(): void {
129fb726d48Sopenharmony_ci  systemList = [];
130fb726d48Sopenharmony_ci  anomalyList = [];
131fb726d48Sopenharmony_ci  powerList = [];
132fb726d48Sopenharmony_ci}
133fb726d48Sopenharmony_ci
134fb726d48Sopenharmony_ciexport function energySysEventReceiver(data: unknown, proc: Function): void {
135fb726d48Sopenharmony_ci  // @ts-ignore
136fb726d48Sopenharmony_ci  if (data.params.trafic === TraficEnum.Memory) {
137fb726d48Sopenharmony_ci    if (systemList.length === 0) {
138fb726d48Sopenharmony_ci      // @ts-ignore
139fb726d48Sopenharmony_ci      systemList = proc(systemDataMemSql(data.params));
140fb726d48Sopenharmony_ci    }
141fb726d48Sopenharmony_ci    // @ts-ignore
142fb726d48Sopenharmony_ci    systemBufferHandler(data, systemList, data.params.trafic !== TraficEnum.SharedArrayBuffer);
143fb726d48Sopenharmony_ci    // @ts-ignore
144fb726d48Sopenharmony_ci  } else if (data.params.trafic === TraficEnum.ProtoBuffer) {
145fb726d48Sopenharmony_ci    // @ts-ignore
146fb726d48Sopenharmony_ci    let sql = systemDataSql(data.params);
147fb726d48Sopenharmony_ci    let res = proc(sql);
148fb726d48Sopenharmony_ci    // @ts-ignore
149fb726d48Sopenharmony_ci    systemBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
150fb726d48Sopenharmony_ci  }
151fb726d48Sopenharmony_ci}
152fb726d48Sopenharmony_ci
153fb726d48Sopenharmony_ciexport function hiSysEnergyAnomalyDataReceiver(data: unknown, proc: Function): void {
154fb726d48Sopenharmony_ci  // @ts-ignore
155fb726d48Sopenharmony_ci  if (data.params.trafic === TraficEnum.Memory) {
156fb726d48Sopenharmony_ci    if (anomalyList.length === 0) {
157fb726d48Sopenharmony_ci      // @ts-ignore
158fb726d48Sopenharmony_ci      anomalyList = proc(chartEnergyAnomalyDataSql(data.params));
159fb726d48Sopenharmony_ci    }
160fb726d48Sopenharmony_ci    // @ts-ignore
161fb726d48Sopenharmony_ci    anomalyBufferHandler(data, anomalyList, data.params.trafic !== TraficEnum.SharedArrayBuffer);
162fb726d48Sopenharmony_ci    // @ts-ignore
163fb726d48Sopenharmony_ci  } else if (data.params.trafic === TraficEnum.ProtoBuffer) {
164fb726d48Sopenharmony_ci    // @ts-ignore
165fb726d48Sopenharmony_ci    let sql = chartEnergyAnomalyDataSql(data.params);
166fb726d48Sopenharmony_ci    let res = proc(sql);
167fb726d48Sopenharmony_ci    // @ts-ignore
168fb726d48Sopenharmony_ci    anomalyBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
169fb726d48Sopenharmony_ci  }
170fb726d48Sopenharmony_ci}
171fb726d48Sopenharmony_ci
172fb726d48Sopenharmony_ciexport function hiSysEnergyPowerReceiver(data: unknown, proc: Function): void {
173fb726d48Sopenharmony_ci  // @ts-ignore
174fb726d48Sopenharmony_ci  if (data.params.trafic === TraficEnum.Memory) {
175fb726d48Sopenharmony_ci    if (powerList.length === 0) {
176fb726d48Sopenharmony_ci      // @ts-ignore
177fb726d48Sopenharmony_ci      powerList = proc(queryPowerValueSql(data.params));
178fb726d48Sopenharmony_ci    }
179fb726d48Sopenharmony_ci    // @ts-ignore
180fb726d48Sopenharmony_ci    powerBufferHandler(data, powerList, data.params.trafic !== TraficEnum.SharedArrayBuffer);
181fb726d48Sopenharmony_ci    // @ts-ignore
182fb726d48Sopenharmony_ci  } else if (data.params.trafic === TraficEnum.ProtoBuffer) {
183fb726d48Sopenharmony_ci    // @ts-ignore
184fb726d48Sopenharmony_ci    let sql = queryPowerValueSql(data.params);
185fb726d48Sopenharmony_ci    let res = proc(sql);
186fb726d48Sopenharmony_ci    // @ts-ignore
187fb726d48Sopenharmony_ci    powerBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
188fb726d48Sopenharmony_ci  }
189fb726d48Sopenharmony_ci}
190fb726d48Sopenharmony_ci
191fb726d48Sopenharmony_ciexport function hiSysEnergyStateReceiver(data: unknown, proc: Function): void {
192fb726d48Sopenharmony_ci  // @ts-ignore
193fb726d48Sopenharmony_ci  if (data.params.trafic === TraficEnum.Memory) {
194fb726d48Sopenharmony_ci    let res: unknown[];
195fb726d48Sopenharmony_ci    let list: unknown[];
196fb726d48Sopenharmony_ci    // @ts-ignore
197fb726d48Sopenharmony_ci    if (!energyList.has(data.params.eventName)) {
198fb726d48Sopenharmony_ci      // @ts-ignore
199fb726d48Sopenharmony_ci      list = proc(queryStateDataSql(data.params));
200fb726d48Sopenharmony_ci      // @ts-ignore
201fb726d48Sopenharmony_ci      energyList.set(data.params.eventName, list);
202fb726d48Sopenharmony_ci    } else {
203fb726d48Sopenharmony_ci      // @ts-ignore
204fb726d48Sopenharmony_ci      list = energyList.get(data.params.eventName) || [];
205fb726d48Sopenharmony_ci    }
206fb726d48Sopenharmony_ci    res = list;
207fb726d48Sopenharmony_ci    // @ts-ignore
208fb726d48Sopenharmony_ci    stateBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
209fb726d48Sopenharmony_ci    // @ts-ignore
210fb726d48Sopenharmony_ci  } else if (data.params.trafic === TraficEnum.ProtoBuffer) {
211fb726d48Sopenharmony_ci    // @ts-ignore
212fb726d48Sopenharmony_ci    let stateDataSql = queryStateDataSql(data.params);
213fb726d48Sopenharmony_ci    let stateDataRes = proc(stateDataSql);
214fb726d48Sopenharmony_ci    // @ts-ignore
215fb726d48Sopenharmony_ci    stateBufferHandler(data, stateDataRes, data.params.trafic !== TraficEnum.SharedArrayBuffer);
216fb726d48Sopenharmony_ci  }
217fb726d48Sopenharmony_ci}
218fb726d48Sopenharmony_ci
219fb726d48Sopenharmony_cifunction systemBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
220fb726d48Sopenharmony_ci  let hiSysEnergy = new HiSysEnergy(data, res, transfer);
221fb726d48Sopenharmony_ci  let systemDataList: unknown = [];
222fb726d48Sopenharmony_ci  let workCountMap: Map<string, number> = new Map<string, number>();
223fb726d48Sopenharmony_ci  let nameIdMap: Map<string, Array<unknown>> = new Map<string, []>();
224fb726d48Sopenharmony_ci  res.forEach((it, index) => {
225fb726d48Sopenharmony_ci    // @ts-ignore
226fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.energyData);
227fb726d48Sopenharmony_ci    // @ts-ignore
228fb726d48Sopenharmony_ci    let parsedData = it.eventValue;
229fb726d48Sopenharmony_ci    // @ts-ignore
230fb726d48Sopenharmony_ci    if (typeof it.eventValue === 'string') {
231fb726d48Sopenharmony_ci      try {
232fb726d48Sopenharmony_ci        // @ts-ignore
233fb726d48Sopenharmony_ci        parsedData = JSON.parse(it.eventValue);
234fb726d48Sopenharmony_ci      } catch (error) { }
235fb726d48Sopenharmony_ci    }
236fb726d48Sopenharmony_ci    // @ts-ignore
237fb726d48Sopenharmony_ci    it.eventValue = parsedData;
238fb726d48Sopenharmony_ci    let beanData: unknown = {};
239fb726d48Sopenharmony_ci    // @ts-ignore
240fb726d48Sopenharmony_ci    if (it.appKey === '1') {
241fb726d48Sopenharmony_ci      // @ts-ignore
242fb726d48Sopenharmony_ci      eventNameWithPowerRunninglock(beanData, it, systemDataList);
243fb726d48Sopenharmony_ci      // @ts-ignore
244fb726d48Sopenharmony_ci    } else if (it.appKey === '2') {
245fb726d48Sopenharmony_ci      // @ts-ignore
246fb726d48Sopenharmony_ci      eventNameWithGnssState(beanData, it, systemDataList);
247fb726d48Sopenharmony_ci    } else {
248fb726d48Sopenharmony_ci      // @ts-ignore
249fb726d48Sopenharmony_ci      beanData.dataType = 3;
250fb726d48Sopenharmony_ci      // @ts-ignore
251fb726d48Sopenharmony_ci      if (it.eventValue.NAME) {
252fb726d48Sopenharmony_ci        // @ts-ignore
253fb726d48Sopenharmony_ci        beanData.appName = it.NAME;
254fb726d48Sopenharmony_ci      }
255fb726d48Sopenharmony_ci      // @ts-ignore
256fb726d48Sopenharmony_ci      if (it.eventValue.WORKID) {
257fb726d48Sopenharmony_ci        // @ts-ignore
258fb726d48Sopenharmony_ci        beanData.workId = it.WORKID;
259fb726d48Sopenharmony_ci      }
260fb726d48Sopenharmony_ci      // @ts-ignore
261fb726d48Sopenharmony_ci      if (it.eventName === 'WORK_START') {
262fb726d48Sopenharmony_ci        // @ts-ignore
263fb726d48Sopenharmony_ci        eventNameWithWorkStart(nameIdMap, beanData, workCountMap, it, systemDataList);
264fb726d48Sopenharmony_ci        // @ts-ignore
265fb726d48Sopenharmony_ci      } else if (it.eventName === 'WORK_STOP') {
266fb726d48Sopenharmony_ci        // @ts-ignore
267fb726d48Sopenharmony_ci        eventNameWithWorkStop(nameIdMap, beanData, workCountMap, it, systemDataList);
268fb726d48Sopenharmony_ci      }
269fb726d48Sopenharmony_ci    }
270fb726d48Sopenharmony_ci    // @ts-ignore
271fb726d48Sopenharmony_ci    hiSysEnergy.id[index] = beanData.id;
272fb726d48Sopenharmony_ci    // @ts-ignore
273fb726d48Sopenharmony_ci    hiSysEnergy.startNs[index] = beanData.startNs;
274fb726d48Sopenharmony_ci    // @ts-ignore
275fb726d48Sopenharmony_ci    hiSysEnergy.count[index] = beanData.count;
276fb726d48Sopenharmony_ci    // @ts-ignore
277fb726d48Sopenharmony_ci    hiSysEnergy.type[index] = beanData.dataType;
278fb726d48Sopenharmony_ci    // @ts-ignore
279fb726d48Sopenharmony_ci    hiSysEnergy.token[index] = beanData.token;
280fb726d48Sopenharmony_ci    // @ts-ignore
281fb726d48Sopenharmony_ci    hiSysEnergy.dataType[index] = beanData.dataType;
282fb726d48Sopenharmony_ci  });
283fb726d48Sopenharmony_ci  postMessage(data, transfer, hiSysEnergy, res.length);
284fb726d48Sopenharmony_ci}
285fb726d48Sopenharmony_ci
286fb726d48Sopenharmony_cifunction eventNameWithPowerRunninglock(beanData: unknown, it: unknown, systemDataList: Array<unknown>): void {
287fb726d48Sopenharmony_ci  let lockCount = 0;
288fb726d48Sopenharmony_ci  let tokedIds: Array<string> = [];
289fb726d48Sopenharmony_ci  // @ts-ignore
290fb726d48Sopenharmony_ci  beanData.dataType = 1;
291fb726d48Sopenharmony_ci  // @ts-ignore
292fb726d48Sopenharmony_ci  if (it.eventValue.TAG.endsWith('_ADD')) {
293fb726d48Sopenharmony_ci    // @ts-ignore
294fb726d48Sopenharmony_ci    beanData.startNs = it.startNs;
295fb726d48Sopenharmony_ci    lockCount++;
296fb726d48Sopenharmony_ci    // @ts-ignore
297fb726d48Sopenharmony_ci    beanData.id = it.id;
298fb726d48Sopenharmony_ci    // @ts-ignore
299fb726d48Sopenharmony_ci    beanData.count = lockCount;
300fb726d48Sopenharmony_ci    // @ts-ignore
301fb726d48Sopenharmony_ci    beanData.token = it.eventValue.MESSAGE.split('=')[1];
302fb726d48Sopenharmony_ci    // @ts-ignore
303fb726d48Sopenharmony_ci    beanData.type = 1;
304fb726d48Sopenharmony_ci    // @ts-ignore
305fb726d48Sopenharmony_ci    tokedIds.push(beanData.token);
306fb726d48Sopenharmony_ci    systemDataList.push(beanData);
307fb726d48Sopenharmony_ci  } else {
308fb726d48Sopenharmony_ci    // @ts-ignore
309fb726d48Sopenharmony_ci    beanData.id = it.id;
310fb726d48Sopenharmony_ci    // @ts-ignore
311fb726d48Sopenharmony_ci    beanData.startNs = it.startNs;
312fb726d48Sopenharmony_ci    // @ts-ignore
313fb726d48Sopenharmony_ci    let toked = it.eventValue.MESSAGE.split('=')[1];
314fb726d48Sopenharmony_ci    let number = tokedIds.indexOf(toked);
315fb726d48Sopenharmony_ci    if (number > -1) {
316fb726d48Sopenharmony_ci      lockCount--;
317fb726d48Sopenharmony_ci      // @ts-ignore
318fb726d48Sopenharmony_ci      beanData.count = lockCount;
319fb726d48Sopenharmony_ci      // @ts-ignore
320fb726d48Sopenharmony_ci      beanData.token = it.eventValue.MESSAGE.split('=')[1];
321fb726d48Sopenharmony_ci      // @ts-ignore
322fb726d48Sopenharmony_ci      beanData.type = 1;
323fb726d48Sopenharmony_ci      systemDataList.push(beanData);
324fb726d48Sopenharmony_ci      Reflect.deleteProperty(tokedIds, 'number');
325fb726d48Sopenharmony_ci    }
326fb726d48Sopenharmony_ci  }
327fb726d48Sopenharmony_ci}
328fb726d48Sopenharmony_ci
329fb726d48Sopenharmony_cifunction eventNameWithGnssState(beanData: unknown, it: unknown, systemDataList: Array<unknown>): void {
330fb726d48Sopenharmony_ci  let locationIndex = -1;
331fb726d48Sopenharmony_ci  let locationCount = 0;
332fb726d48Sopenharmony_ci  // @ts-ignore
333fb726d48Sopenharmony_ci  beanData.dataType = 2;
334fb726d48Sopenharmony_ci  // @ts-ignore
335fb726d48Sopenharmony_ci  if (it.eventValue.STATE === 'stop') {
336fb726d48Sopenharmony_ci    if (locationIndex === -1) {
337fb726d48Sopenharmony_ci      // @ts-ignore
338fb726d48Sopenharmony_ci      beanData.startNs = 0;
339fb726d48Sopenharmony_ci      // @ts-ignore
340fb726d48Sopenharmony_ci      beanData.count = 1;
341fb726d48Sopenharmony_ci    } else {
342fb726d48Sopenharmony_ci      // @ts-ignore
343fb726d48Sopenharmony_ci      beanData.startNs = it.startNs;
344fb726d48Sopenharmony_ci      locationCount--;
345fb726d48Sopenharmony_ci      // @ts-ignore
346fb726d48Sopenharmony_ci      beanData.count = locationCount;
347fb726d48Sopenharmony_ci    }
348fb726d48Sopenharmony_ci    // @ts-ignore
349fb726d48Sopenharmony_ci    beanData.state = 'stop';
350fb726d48Sopenharmony_ci  } else {
351fb726d48Sopenharmony_ci    // @ts-ignore
352fb726d48Sopenharmony_ci    beanData.startNs = it.startNs;
353fb726d48Sopenharmony_ci    locationCount++;
354fb726d48Sopenharmony_ci    // @ts-ignore
355fb726d48Sopenharmony_ci    beanData.count = locationCount;
356fb726d48Sopenharmony_ci    // @ts-ignore
357fb726d48Sopenharmony_ci    beanData.state = 'start';
358fb726d48Sopenharmony_ci  }
359fb726d48Sopenharmony_ci  locationIndex = 0;
360fb726d48Sopenharmony_ci  // @ts-ignore
361fb726d48Sopenharmony_ci  beanData.type = 2;
362fb726d48Sopenharmony_ci  systemDataList.push(beanData);
363fb726d48Sopenharmony_ci}
364fb726d48Sopenharmony_ci
365fb726d48Sopenharmony_cifunction eventNameWithWorkStart(
366fb726d48Sopenharmony_ci  nameIdMap: Map<string, Array<unknown>>,
367fb726d48Sopenharmony_ci  beanData: unknown,
368fb726d48Sopenharmony_ci  workCountMap: Map<string, number>,
369fb726d48Sopenharmony_ci  it: unknown,
370fb726d48Sopenharmony_ci  systemDataList: Array<unknown>
371fb726d48Sopenharmony_ci): void {
372fb726d48Sopenharmony_ci  // @ts-ignore
373fb726d48Sopenharmony_ci  let nameIdList = nameIdMap.get(beanData.appName);
374fb726d48Sopenharmony_ci  let workCount = 0;
375fb726d48Sopenharmony_ci  if (nameIdList === undefined) {
376fb726d48Sopenharmony_ci    workCount = 1;
377fb726d48Sopenharmony_ci    // @ts-ignore
378fb726d48Sopenharmony_ci    nameIdMap.set(beanData.appName, [beanData.workId]);
379fb726d48Sopenharmony_ci  } else {
380fb726d48Sopenharmony_ci    // @ts-ignore
381fb726d48Sopenharmony_ci    nameIdList.push(beanData.workId);
382fb726d48Sopenharmony_ci    workCount = nameIdList.length;
383fb726d48Sopenharmony_ci  }
384fb726d48Sopenharmony_ci  // @ts-ignore
385fb726d48Sopenharmony_ci  let count = workCountMap.get(beanData.appName);
386fb726d48Sopenharmony_ci  if (count === undefined) {
387fb726d48Sopenharmony_ci    // @ts-ignore
388fb726d48Sopenharmony_ci    workCountMap.set(beanData.appName, 1);
389fb726d48Sopenharmony_ci  } else {
390fb726d48Sopenharmony_ci    // @ts-ignore
391fb726d48Sopenharmony_ci    workCountMap.set(beanData.appName, count + 1);
392fb726d48Sopenharmony_ci  }
393fb726d48Sopenharmony_ci  // @ts-ignore
394fb726d48Sopenharmony_ci  beanData.startNs = it.startNs;
395fb726d48Sopenharmony_ci  // @ts-ignore
396fb726d48Sopenharmony_ci  beanData.count = workCount;
397fb726d48Sopenharmony_ci  // @ts-ignore
398fb726d48Sopenharmony_ci  beanData.type = 0;
399fb726d48Sopenharmony_ci  systemDataList.push(beanData);
400fb726d48Sopenharmony_ci}
401fb726d48Sopenharmony_ci
402fb726d48Sopenharmony_cifunction eventNameWithWorkStop(
403fb726d48Sopenharmony_ci  nameIdMap: Map<string, Array<unknown>>,
404fb726d48Sopenharmony_ci  beanData: unknown,
405fb726d48Sopenharmony_ci  workCountMap: Map<string, number>,
406fb726d48Sopenharmony_ci  it: unknown,
407fb726d48Sopenharmony_ci  systemDataList: Array<unknown>
408fb726d48Sopenharmony_ci): void {
409fb726d48Sopenharmony_ci  // @ts-ignore
410fb726d48Sopenharmony_ci  let nameIdList: unknown = nameIdMap.get(beanData.appName);
411fb726d48Sopenharmony_ci  // @ts-ignore
412fb726d48Sopenharmony_ci  let index = nameIdList.indexOf(beanData.workId);
413fb726d48Sopenharmony_ci  if (nameIdList !== undefined && index > -1) {
414fb726d48Sopenharmony_ci    // @ts-ignore
415fb726d48Sopenharmony_ci    nameIdList.remove(index);
416fb726d48Sopenharmony_ci    // @ts-ignore
417fb726d48Sopenharmony_ci    let workCount = workCountMap.get(beanData.appName);
418fb726d48Sopenharmony_ci    if (workCount !== undefined) {
419fb726d48Sopenharmony_ci      workCount = workCount - 1;
420fb726d48Sopenharmony_ci      // @ts-ignore
421fb726d48Sopenharmony_ci      workCountMap.set(beanData.appName, workCount);
422fb726d48Sopenharmony_ci      // @ts-ignore
423fb726d48Sopenharmony_ci      beanData.startNs = it.startNs;
424fb726d48Sopenharmony_ci      // @ts-ignore
425fb726d48Sopenharmony_ci      beanData.count = workCount;
426fb726d48Sopenharmony_ci      // @ts-ignore
427fb726d48Sopenharmony_ci      beanData.type = 0;
428fb726d48Sopenharmony_ci      systemDataList.push(beanData);
429fb726d48Sopenharmony_ci    }
430fb726d48Sopenharmony_ci  }
431fb726d48Sopenharmony_ci}
432fb726d48Sopenharmony_ci
433fb726d48Sopenharmony_cifunction postMessage(data: unknown, transfer: boolean, hiSysEnergy: HiSysEnergy, len: number): void {
434fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
435fb726d48Sopenharmony_ci    {
436fb726d48Sopenharmony_ci      // @ts-ignore
437fb726d48Sopenharmony_ci      id: data.id,
438fb726d48Sopenharmony_ci      // @ts-ignore
439fb726d48Sopenharmony_ci      action: data.action,
440fb726d48Sopenharmony_ci      results: transfer
441fb726d48Sopenharmony_ci        ? {
442fb726d48Sopenharmony_ci          id: hiSysEnergy.id.buffer,
443fb726d48Sopenharmony_ci          startNs: hiSysEnergy.startNs.buffer,
444fb726d48Sopenharmony_ci          count: hiSysEnergy.count.buffer,
445fb726d48Sopenharmony_ci          type: hiSysEnergy.type.buffer,
446fb726d48Sopenharmony_ci          token: hiSysEnergy.token.buffer,
447fb726d48Sopenharmony_ci          dataType: hiSysEnergy.dataType.buffer,
448fb726d48Sopenharmony_ci        }
449fb726d48Sopenharmony_ci        : {},
450fb726d48Sopenharmony_ci      len: len,
451fb726d48Sopenharmony_ci      transfer: transfer,
452fb726d48Sopenharmony_ci    },
453fb726d48Sopenharmony_ci    transfer
454fb726d48Sopenharmony_ci      ? [
455fb726d48Sopenharmony_ci        hiSysEnergy.id.buffer,
456fb726d48Sopenharmony_ci        hiSysEnergy.startNs.buffer,
457fb726d48Sopenharmony_ci        hiSysEnergy.count.buffer,
458fb726d48Sopenharmony_ci        hiSysEnergy.type.buffer,
459fb726d48Sopenharmony_ci        hiSysEnergy.token.buffer,
460fb726d48Sopenharmony_ci        hiSysEnergy.dataType.buffer,
461fb726d48Sopenharmony_ci      ]
462fb726d48Sopenharmony_ci      : []
463fb726d48Sopenharmony_ci  );
464fb726d48Sopenharmony_ci}
465fb726d48Sopenharmony_ci
466fb726d48Sopenharmony_ciclass HiSysEnergy {
467fb726d48Sopenharmony_ci  id: Uint16Array;
468fb726d48Sopenharmony_ci  startNs: Float64Array;
469fb726d48Sopenharmony_ci  count: Uint32Array;
470fb726d48Sopenharmony_ci  type: Uint32Array;
471fb726d48Sopenharmony_ci  token: Float64Array;
472fb726d48Sopenharmony_ci  dataType: Uint16Array;
473fb726d48Sopenharmony_ci
474fb726d48Sopenharmony_ci  constructor(data: unknown, res: unknown[], transfer: boolean) {
475fb726d48Sopenharmony_ci    // @ts-ignore
476fb726d48Sopenharmony_ci    this.id = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.id);
477fb726d48Sopenharmony_ci    // @ts-ignore
478fb726d48Sopenharmony_ci    this.startNs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNs);
479fb726d48Sopenharmony_ci    // @ts-ignore
480fb726d48Sopenharmony_ci    this.count = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.count);
481fb726d48Sopenharmony_ci    // @ts-ignore
482fb726d48Sopenharmony_ci    this.type = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.type);
483fb726d48Sopenharmony_ci    // @ts-ignore
484fb726d48Sopenharmony_ci    this.token = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.token);
485fb726d48Sopenharmony_ci    // @ts-ignore
486fb726d48Sopenharmony_ci    this.dataType = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.dataType);
487fb726d48Sopenharmony_ci  }
488fb726d48Sopenharmony_ci}
489fb726d48Sopenharmony_ci
490fb726d48Sopenharmony_cifunction anomalyBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
491fb726d48Sopenharmony_ci  // @ts-ignore
492fb726d48Sopenharmony_ci  let id = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.id);
493fb726d48Sopenharmony_ci  // @ts-ignore
494fb726d48Sopenharmony_ci  let startNs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNs);
495fb726d48Sopenharmony_ci  res.forEach((it, index) => {
496fb726d48Sopenharmony_ci    // @ts-ignore
497fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.energyData);
498fb726d48Sopenharmony_ci    // @ts-ignore
499fb726d48Sopenharmony_ci    id[index] = it.id;
500fb726d48Sopenharmony_ci    // @ts-ignore
501fb726d48Sopenharmony_ci    startNs[index] = it.startNs;
502fb726d48Sopenharmony_ci  });
503fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
504fb726d48Sopenharmony_ci    {
505fb726d48Sopenharmony_ci      // @ts-ignore
506fb726d48Sopenharmony_ci      id: data.id,
507fb726d48Sopenharmony_ci      // @ts-ignore
508fb726d48Sopenharmony_ci      action: data.action,
509fb726d48Sopenharmony_ci      results: transfer
510fb726d48Sopenharmony_ci        ? {
511fb726d48Sopenharmony_ci          id: id.buffer,
512fb726d48Sopenharmony_ci          startNs: startNs.buffer,
513fb726d48Sopenharmony_ci        }
514fb726d48Sopenharmony_ci        : {},
515fb726d48Sopenharmony_ci      len: res.length,
516fb726d48Sopenharmony_ci      transfer: transfer,
517fb726d48Sopenharmony_ci    },
518fb726d48Sopenharmony_ci    transfer ? [startNs.buffer, id.buffer] : []
519fb726d48Sopenharmony_ci  );
520fb726d48Sopenharmony_ci}
521fb726d48Sopenharmony_ci
522fb726d48Sopenharmony_cifunction powerBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
523fb726d48Sopenharmony_ci  // @ts-ignore
524fb726d48Sopenharmony_ci  let id = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.id);
525fb726d48Sopenharmony_ci  // @ts-ignore
526fb726d48Sopenharmony_ci  let startNs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNs);
527fb726d48Sopenharmony_ci  res.forEach((it, index) => {
528fb726d48Sopenharmony_ci    // @ts-ignore
529fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.energyData);
530fb726d48Sopenharmony_ci    // @ts-ignore
531fb726d48Sopenharmony_ci    id[index] = it.id;
532fb726d48Sopenharmony_ci    // @ts-ignore
533fb726d48Sopenharmony_ci    startNs[index] = it.startNs;
534fb726d48Sopenharmony_ci  });
535fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
536fb726d48Sopenharmony_ci    {
537fb726d48Sopenharmony_ci      // @ts-ignore
538fb726d48Sopenharmony_ci      id: data.id,
539fb726d48Sopenharmony_ci      // @ts-ignore
540fb726d48Sopenharmony_ci      action: data.action,
541fb726d48Sopenharmony_ci      results: transfer
542fb726d48Sopenharmony_ci        ? {
543fb726d48Sopenharmony_ci          id: id.buffer,
544fb726d48Sopenharmony_ci          startNs: startNs.buffer,
545fb726d48Sopenharmony_ci        }
546fb726d48Sopenharmony_ci        : {},
547fb726d48Sopenharmony_ci      len: res.length,
548fb726d48Sopenharmony_ci      transfer: transfer,
549fb726d48Sopenharmony_ci    },
550fb726d48Sopenharmony_ci    transfer ? [id.buffer, startNs.buffer] : []
551fb726d48Sopenharmony_ci  );
552fb726d48Sopenharmony_ci}
553fb726d48Sopenharmony_ci
554fb726d48Sopenharmony_cifunction stateBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
555fb726d48Sopenharmony_ci  // @ts-ignore
556fb726d48Sopenharmony_ci  let startNs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNs);
557fb726d48Sopenharmony_ci  // @ts-ignore
558fb726d48Sopenharmony_ci  let eventValue = new Float32Array(transfer ? res.length : data.params.sharedArrayBuffers.eventValue);
559fb726d48Sopenharmony_ci  // @ts-ignore
560fb726d48Sopenharmony_ci  let id = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.id);
561fb726d48Sopenharmony_ci  res.forEach((it, index) => {
562fb726d48Sopenharmony_ci    // @ts-ignore
563fb726d48Sopenharmony_ci    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.energyData);
564fb726d48Sopenharmony_ci    // @ts-ignore
565fb726d48Sopenharmony_ci    id[index] = it.id;
566fb726d48Sopenharmony_ci    // @ts-ignore
567fb726d48Sopenharmony_ci    startNs[index] = it.startNs;
568fb726d48Sopenharmony_ci    // @ts-ignore
569fb726d48Sopenharmony_ci    let eventName = it.eventName.toLocaleLowerCase();
570fb726d48Sopenharmony_ci    if (eventName.includes('sensor')) {
571fb726d48Sopenharmony_ci      if (eventName.includes('enable')) {
572fb726d48Sopenharmony_ci        eventValue[index] = 0;
573fb726d48Sopenharmony_ci      } else {
574fb726d48Sopenharmony_ci        eventValue[index] = 1;
575fb726d48Sopenharmony_ci      }
576fb726d48Sopenharmony_ci    } else {
577fb726d48Sopenharmony_ci      // @ts-ignore
578fb726d48Sopenharmony_ci      eventValue[index] = it.eventValue;
579fb726d48Sopenharmony_ci    }
580fb726d48Sopenharmony_ci  });
581fb726d48Sopenharmony_ci  (self as unknown as Worker).postMessage(
582fb726d48Sopenharmony_ci    {
583fb726d48Sopenharmony_ci      // @ts-ignore
584fb726d48Sopenharmony_ci      id: data.id,
585fb726d48Sopenharmony_ci      // @ts-ignore
586fb726d48Sopenharmony_ci      action: data.action,
587fb726d48Sopenharmony_ci      results: transfer
588fb726d48Sopenharmony_ci        ? {
589fb726d48Sopenharmony_ci          id: id.buffer,
590fb726d48Sopenharmony_ci          startNs: startNs.buffer,
591fb726d48Sopenharmony_ci          eventValue: eventValue.buffer,
592fb726d48Sopenharmony_ci        }
593fb726d48Sopenharmony_ci        : {},
594fb726d48Sopenharmony_ci      len: res.length,
595fb726d48Sopenharmony_ci      transfer: transfer,
596fb726d48Sopenharmony_ci    },
597fb726d48Sopenharmony_ci    transfer ? [id.buffer, startNs.buffer, eventValue.buffer] : []
598fb726d48Sopenharmony_ci  );
599fb726d48Sopenharmony_ci}
600