• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import relationalStore from '@ohos.data.relationalStore';
17import {
18  GPData,
19  TIndexInfo,
20  TGeneralInfo,
21  TPowerSensorInfo,
22  TPowerAppInfo,
23} from '../entity/DatabaseEntity';
24import {
25  sql_t_index_info,
26  dbVersion,
27  dbName,
28  task_powersensor_info,
29  task_powerapp_info,
30} from '../constant/ConstantSQL';
31import SPLogger from '../utils/SPLogger';
32
33const TAG = 'DatabaseUtils';
34
35export default {
36  //创建表(T_INDEX_INFO T_GENERAL_INFO)
37  async createTable(pathSuffix: number): Promise<void> {
38    try {
39      const STORE_CONFIG: relationalStore.StoreConfig = {
40        name: pathSuffix + '.db',
41        securityLevel: relationalStore.SecurityLevel.S1,
42      };
43      relationalStore
44        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
45        .then((rdbStore) => {
46          return rdbStore;
47        });
48    } catch (err) {
49      SPLogger.ERROR(TAG, 'createTable ERR:' + err);
50    }
51  },
52
53  //插入表( T_GENERAL_INFO)
54  insertGeneraData(tableName: string, tGeneralInfo: TGeneralInfo): void {
55    let strMap = new Map();
56    for (let k of Object.keys(tGeneralInfo)) {
57      strMap.set(k, tGeneralInfo[k]);
58    }
59    const valueInsert = {
60      sessionId: strMap.get('sessionId'),
61      taskId: strMap.get('taskId'),
62      appName: strMap.get('appName'),
63      appVersion: strMap.get('appVersion'),
64      packageName: strMap.get('packageName'),
65      startTime: strMap.get('startTime'),
66      endTime: strMap.get('endTime'),
67      testDuration: strMap.get('testDuration'),
68      taskName: strMap.get('taskName'),
69    };
70    try {
71      const STORE_CONFIG: relationalStore.StoreConfig = {
72        name: dbName,
73        securityLevel: relationalStore.SecurityLevel.S1,
74      };
75      relationalStore.getRdbStore(
76        globalThis.abilityContext,
77        STORE_CONFIG,
78        (err, rdbStore) => {
79          SPLogger.DEBUG(
80            TAG,
81            '--> insert into  insertGeneraData :tableName:' +
82              tableName +
83              '| valueInsert:' +
84            JSON.stringify(valueInsert)
85          );
86          rdbStore.insert(tableName, valueInsert);
87        }
88      );
89    } catch (err) {
90      SPLogger.ERROR(TAG, 'insertGeneraData ERR:' + err);
91    }
92  },
93
94  //插入表(T_INDEX_INFO)
95  insertData(tableName: string, pathSuffix: number, tIndexInfo: TIndexInfo): void {
96    let strMap = new Map();
97    for (let k of Object.keys(tIndexInfo)) {
98      strMap.set(k, tIndexInfo[k]);
99    }
100
101    const valueInsert = {
102      timestamp: strMap.get('timestamp'),
103      taskId: strMap.get('taskId'),
104      ddrFrequency: strMap.get('ddrFrequency'),
105      cpu0Frequency: strMap.get('cpu0Frequency'),
106      cpu1Frequency: strMap.get('cpu1Frequency'),
107      cpu2Frequency: strMap.get('cpu2Frequency'),
108      cpu3Frequency: strMap.get('cpu3Frequency'),
109      cpu4Frequency: strMap.get('cpu4Frequency'),
110      cpu5Frequency: strMap.get('cpu5Frequency'),
111      cpu6Frequency: strMap.get('cpu6Frequency'),
112      cpu7Frequency: strMap.get('cpu7Frequency'),
113      cpu0Load: strMap.get('cpu0Load'),
114      cpu1Load: strMap.get('cpu1Load'),
115      cpu2Load: strMap.get('cpu2Load'),
116      cpu3Load: strMap.get('cpu3Load'),
117      cpu4Load: strMap.get('cpu4Load'),
118      cpu5Load: strMap.get('cpu5Load'),
119      cpu6Load: strMap.get('cpu6Load'),
120      cpu7Load: strMap.get('cpu7Load'),
121      gpuFrequency: strMap.get('gpuFrequency'),
122      gpuLoad: strMap.get('gpuLoad'),
123      currentNow: strMap.get('currentNow'),
124      voltageNow: strMap.get('voltageNow'),
125      shellFrameTemp: strMap.get('shellFrameTemp'),
126      shellFrontTemp: strMap.get('shellFrontTemp'),
127      shellBackTemp: strMap.get('shellBackTemp'),
128      socThermalTemp: strMap.get('socThermalTemp'),
129      systemHTemp: strMap.get('systemHTemp'),
130      gpuTemp: strMap.get('gpuTemp'),
131      ambientTemp: strMap.get('ambientTemp'),
132      batteryTemp: strMap.get('batteryTemp'),
133      pss: strMap.get('pss'),
134      fps: strMap.get('fps'),
135      fpsJitters: strMap.get('fpsJitters'),
136      networkUpSpeed: strMap.get('networkUpSpeed'),
137      networkDownSpeed: strMap.get('networkDownSpeed'),
138    };
139    try {
140      const STORE_CONFIG: relationalStore.StoreConfig = {
141        name: pathSuffix + '.db',
142        securityLevel: relationalStore.SecurityLevel.S1,
143      };
144      relationalStore.getRdbStore(
145        globalThis.abilityContext,
146        STORE_CONFIG,
147        (err, rdbStore) => {
148          rdbStore.insert(tableName, valueInsert);
149        }
150      );
151    } catch (err) {
152      SPLogger.ERROR(TAG, 'insertGeneraData ERR:' + err);
153    }
154  },
155
156  //查询表( T_GENERAL_INFO)
157  async queryGeneralData(): Promise<Array<TGeneralInfo>> {
158    const STORE_CONFIG: relationalStore.StoreConfig = {
159      name: dbName,
160      securityLevel: relationalStore.SecurityLevel.S1,
161    };
162    let results = Array<TGeneralInfo>();
163    try {
164      return await relationalStore
165        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
166        .then((rdbStore) => {
167          let predicates = new relationalStore.RdbPredicates('t_general_info');
168          predicates.orderByDesc('startTime');
169          return rdbStore.query(predicates, [
170            'sessionId',
171            'startTime',
172            'appName',
173            'appVersion',
174            'packageName',
175            'endTime',
176            'testDuration',
177            'taskName',
178            'board',
179            'deviceTypeName',
180            'brand',
181            'version',
182            'sn',
183            'taskId',
184          ]);
185        })
186        .then((resultSet) => {
187          while (resultSet.goToNextRow()) {
188            let sessionId = resultSet.getString(
189              resultSet.getColumnIndex('sessionId')
190            );
191            let taskId = resultSet.getString(
192              resultSet.getColumnIndex('taskId')
193            );
194            let appName = resultSet.getString(
195              resultSet.getColumnIndex('appName')
196            );
197            let appVersion = resultSet.getString(
198              resultSet.getColumnIndex('appVersion')
199            );
200            let packageName = resultSet.getString(
201              resultSet.getColumnIndex('packageName')
202            );
203            let startTime = resultSet.getString(
204              resultSet.getColumnIndex('startTime')
205            );
206            let endTime = resultSet.getString(
207              resultSet.getColumnIndex('endTime')
208            );
209            let testDuration = resultSet.getLong(
210              resultSet.getColumnIndex('testDuration')
211            );
212            let taskName = resultSet.getString(
213              resultSet.getColumnIndex('taskName')
214            );
215            let board = resultSet.getString(resultSet.getColumnIndex('board'));
216            let deviceTypeName = resultSet.getString(
217              resultSet.getColumnIndex('deviceTypeName')
218            );
219            let brand = resultSet.getString(resultSet.getColumnIndex('brand'));
220            let version = resultSet.getString(
221              resultSet.getColumnIndex('version')
222            );
223            let sn = resultSet.getString(resultSet.getColumnIndex('sn'));
224
225            let tGeneralInfo = new TGeneralInfo(
226              sessionId,
227              taskId,
228              appName,
229              appVersion,
230              packageName,
231              Number(startTime).valueOf(),
232              Number(endTime).valueOf(),
233              testDuration,
234              taskName
235            );
236            tGeneralInfo.board = board;
237            tGeneralInfo.deviceTypeName = deviceTypeName;
238            tGeneralInfo.brand = brand;
239            tGeneralInfo.version = version;
240            tGeneralInfo.sn = sn;
241            results.push(tGeneralInfo);
242          }
243          return results;
244        });
245    } catch (err) {
246      SPLogger.ERROR(TAG, 'resultSet queryGeneralData:err' + err);
247      return results;
248    }
249  },
250  //查询表( T_INDEX_INFO) 2022-02-23 改为传时间戳
251  async queryData(dbPath: string): Promise<Array<TIndexInfo>> {
252    const STORE_CONFIG: relationalStore.StoreConfig = {
253      name: dbPath,
254      securityLevel: relationalStore.SecurityLevel.S1,
255    };
256    let results: TIndexInfo[] = [];
257    try {
258      return await relationalStore
259        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
260        .then((rdbStore) => {
261          let predicates = new relationalStore.RdbPredicates('t_index_info');
262          predicates.orderByDesc('timestamp');
263          return rdbStore.query(predicates, [
264            'timestamp',
265            'taskId',
266            'shellBackTemp',
267            'shellFrameTemp',
268            'shellFrontTemp',
269            'socThermalTemp',
270            'systemHTemp',
271            'gpuTemp',
272            'ambientTemp',
273            'batteryTemp',
274            'ddrFrequency',
275            'cpu0Frequency',
276            'cpu1Frequency',
277            'cpu2Frequency',
278            'cpu3Frequency',
279            'cpu4Frequency',
280            'cpu5Frequency',
281            'cpu6Frequency',
282            'cpu7Frequency',
283            'cpu0Load',
284            'cpu1Load',
285            'cpu2Load',
286            'cpu3Load',
287            'cpu4Load',
288            'cpu5Load',
289            'cpu6Load',
290            'cpu7Load',
291            'gpuLoad',
292            'gpuFrequency',
293            'currentNow',
294            'voltageNow',
295            'pss',
296            'fps',
297            'fpsJitters',
298            'networkUpSpeed',
299            'networkDownSpeed',
300          ]);
301        })
302        .then((resultSet) => {
303          while (resultSet.goToNextRow()) {
304            let timestamp = resultSet.getString(
305              resultSet.getColumnIndex('timestamp')
306            );
307            let shellBackTemp = resultSet.getString(
308              resultSet.getColumnIndex('shellBackTemp')
309            );
310            let shellFrameTemp = resultSet.getString(
311              resultSet.getColumnIndex('shellFrameTemp')
312            );
313            let shellFrontTemp = resultSet.getString(
314              resultSet.getColumnIndex('shellFrontTemp')
315            );
316            let socThermalTemp = resultSet.getString(
317              resultSet.getColumnIndex('socThermalTemp')
318            );
319            let systemHTemp = resultSet.getString(
320              resultSet.getColumnIndex('systemHTemp')
321            );
322            let gpuTemp = resultSet.getString(
323              resultSet.getColumnIndex('gpuTemp')
324            );
325            let ambientTemp = resultSet.getString(
326              resultSet.getColumnIndex('ambientTemp')
327            );
328            let batteryTemp = resultSet.getString(
329              resultSet.getColumnIndex('batteryTemp')
330            );
331            let ddrFrequency = resultSet.getString(
332              resultSet.getColumnIndex('ddrFrequency')
333            );
334            let cpu0Frequency = resultSet.getString(
335              resultSet.getColumnIndex('cpu0Frequency')
336            );
337            let cpu1Frequency = resultSet.getString(
338              resultSet.getColumnIndex('cpu1Frequency')
339            );
340            let cpu2Frequency = resultSet.getString(
341              resultSet.getColumnIndex('cpu2Frequency')
342            );
343            let cpu3Frequency = resultSet.getString(
344              resultSet.getColumnIndex('cpu3Frequency')
345            );
346            let cpu4Frequency = resultSet.getString(
347              resultSet.getColumnIndex('cpu4Frequency')
348            );
349            let cpu5Frequency = resultSet.getString(
350              resultSet.getColumnIndex('cpu5Frequency')
351            );
352            let cpu6Frequency = resultSet.getString(
353              resultSet.getColumnIndex('cpu6Frequency')
354            );
355            let cpu7Frequency = resultSet.getString(
356              resultSet.getColumnIndex('cpu7Frequency')
357            );
358
359            let cpu0Load = resultSet.getString(
360              resultSet.getColumnIndex('cpu0Load')
361            );
362            let cpu1Load = resultSet.getString(
363              resultSet.getColumnIndex('cpu1Load')
364            );
365            let cpu2Load = resultSet.getString(
366              resultSet.getColumnIndex('cpu2Load')
367            );
368            let cpu3Load = resultSet.getString(
369              resultSet.getColumnIndex('cpu3Load')
370            );
371            let cpu4Load = resultSet.getString(
372              resultSet.getColumnIndex('cpu4Load')
373            );
374            let cpu5Load = resultSet.getString(
375              resultSet.getColumnIndex('cpu5Load')
376            );
377            let cpu6Load = resultSet.getString(
378              resultSet.getColumnIndex('cpu6Load')
379            );
380            let cpu7Load = resultSet.getString(
381              resultSet.getColumnIndex('cpu7Load')
382            );
383
384            let gpuLoad = resultSet.getString(
385              resultSet.getColumnIndex('gpuLoad')
386            );
387            let gpuFrequency = resultSet.getString(
388              resultSet.getColumnIndex('gpuFrequency')
389            );
390            let currentNow = resultSet.getString(
391              resultSet.getColumnIndex('currentNow')
392            );
393            let voltageNow = resultSet.getString(
394              resultSet.getColumnIndex('voltageNow')
395            );
396
397            let pss = resultSet.getString(resultSet.getColumnIndex('pss'));
398            let fps = resultSet.getString(resultSet.getColumnIndex('fps'));
399            let fpsJitters = resultSet.getString(
400              resultSet.getColumnIndex('fpsJitters')
401            );
402
403            let networkUpSpeed = resultSet.getString(
404              resultSet.getColumnIndex('networkUpSpeed')
405            );
406            let networkDownSpeed = resultSet.getString(
407              resultSet.getColumnIndex('networkDownSpeed')
408            );
409
410            results.push(
411              new TIndexInfo(
412                timestamp,
413                '18',
414                cpu0Frequency,
415                cpu1Frequency,
416                cpu2Frequency,
417                cpu3Frequency,
418                cpu4Frequency,
419                cpu5Frequency,
420                cpu6Frequency,
421                cpu7Frequency,
422                cpu0Load,
423                cpu1Load,
424                cpu2Load,
425                cpu3Load,
426                cpu4Load,
427                cpu5Load,
428                cpu6Load,
429                cpu7Load,
430                gpuFrequency,
431                gpuLoad,
432                ddrFrequency,
433                shellFrameTemp,
434                shellFrontTemp,
435                shellBackTemp,
436                socThermalTemp,
437                systemHTemp,
438                gpuTemp,
439                ambientTemp,
440                batteryTemp,
441                currentNow,
442                voltageNow,
443                pss,
444                fps,
445                fpsJitters,
446                networkUpSpeed,
447                networkDownSpeed
448              )
449            );
450            console.log(
451              'resultSet column names:results:index:' + resultSet.rowIndex
452            );
453          }
454          console.log(
455            'resultSet column names:results length:' + results.length
456          );
457          console.log(
458            'resultSet column names:results:' + JSON.stringify(results)
459          );
460          return results;
461        });
462    } catch (err) {
463      SPLogger.ERROR(TAG, 'resultSet queryIndexInfo Data:err' + err);
464      return results;
465    }
466  },
467  /**
468   * Array<GPData> 封装为TIndexInfo
469   * @param gpDatas
470   */
471  gpArray2Index(gpDatas: Array<GPData>): TIndexInfo {
472    let tIndexInfo: TIndexInfo = new TIndexInfo();
473    tIndexInfo.setTaskId('18');
474    tIndexInfo.setTimeStamp(new Date().getTime().toString());
475    if (gpDatas != null) {
476      for (let index = 0; index < gpDatas.length; index++) {
477        let curGPData: GPData = gpDatas[index];
478        let map = curGPData.values;
479
480        switch (curGPData.moduleType) {
481          case 'CPU':
482            tIndexInfo.setCPUData(
483              map.get('cpu0Freq'),
484              map.get('cpu1Freq'),
485              map.get('cpu2Freq'),
486              map.get('cpu3Freq'),
487              map.get('cpu4Freq'),
488              map.get('cpu5Freq'),
489              map.get('cpu6Freq'),
490              map.get('cpu7Freq')
491            );
492            break;
493          case 'CPULoad':
494            tIndexInfo.setCPULoadData(
495              map.get('cpu0Load'),
496              map.get('cpu1Load'),
497              map.get('cpu2Load'),
498              map.get('cpu3Load'),
499              map.get('cpu4Load'),
500              map.get('cpu5Load'),
501              map.get('cpu6Load'),
502              map.get('cpu7Load')
503            );
504            break;
505          case 'GPU':
506            tIndexInfo.setGPUData(map.get('gpuFreq'), map.get('gpuLoad'));
507            break;
508          case 'DDR':
509            tIndexInfo.setDDRData(map.get('ddrFreq'));
510            break;
511          case 'Temp':
512            tIndexInfo.setTempData(
513              map.get('shell_frame'),
514              map.get('shell_front'),
515              map.get('shell_back'),
516              map.get('soc-thermal'),
517              map.get('system_h'),
518              map.get('gpu-thermal'),
519              map.get('ambient')
520            );
521            break;
522          case 'Power':
523            tIndexInfo.setPowerData(
524              map.get('current_now'),
525              map.get('voltage_now'),
526              map.get('temp')
527            );
528            break;
529          case 'RAM':
530            tIndexInfo.setRamData(map.get('pss'));
531            break;
532          case 'FPS':
533            tIndexInfo.setFpsData(map.get('fps'), map.get('fpsJitters'));
534            break;
535          case 'NetWork':
536            tIndexInfo.setNetWorkData(
537              map.get('netSpeedUp'),
538              map.get('netSpeedDown')
539            );
540            break;
541        }
542      }
543    }
544
545    return tIndexInfo;
546  },
547
548  //插入表(task_powersensor_info)
549  insertPowerSensor(
550    tableName: string,
551    pathSuffix: number,
552    tPowerSenspor: TPowerSensorInfo
553  ): void {
554    SPLogger.INFO(
555      'TAG',
556      'resultSet query_applications_display-----tPowerSenspor' +
557      JSON.stringify(tPowerSenspor)
558    );
559    let strMap = new Map();
560    for (let k of Object.keys(tPowerSenspor)) {
561      strMap.set(k, tPowerSenspor[k]);
562    }
563    const valueInsert = {
564      timestamp: strMap.get('timestamp'),
565      taskId: strMap.get('taskId'),
566      sensor: strMap.get('sensor'),
567      power: strMap.get('power'),
568      current: strMap.get('current'),
569      percent: strMap.get('percent'),
570    };
571    try {
572      const STORE_CONFIG: relationalStore.StoreConfig = {
573        name: pathSuffix + '.db',
574        securityLevel: relationalStore.SecurityLevel.S1,
575      };
576      relationalStore.getRdbStore(
577        globalThis.abilityContext,
578        STORE_CONFIG,
579        (err, rdbStore) => {
580          SPLogger.INFO(
581            'TAG',
582            'resultSet query_applications_display-----tPowerSenspor' +
583            JSON.stringify(pathSuffix)
584          );
585          rdbStore.insert(tableName, valueInsert);
586        }
587      );
588    } catch (err) {
589      SPLogger.ERROR(TAG, 'resultSet insertPowerSensor Data:err' + err);
590    }
591  },
592
593  //插入表(task_powerapp_info)
594  insertPowerAppInfo(
595    tableName: string,
596    pathSuffix: number,
597    tPowerApp: TPowerAppInfo
598  ): void {
599    SPLogger.INFO(
600      'TAG',
601      'resultSet query_applications_display-----tPowerApp' +
602      JSON.stringify(tPowerApp)
603    );
604    let strMap = new Map();
605    for (let k of Object.keys(tPowerApp)) {
606      strMap.set(k, tPowerApp[k]);
607    }
608    const valueInsert = {
609      taskId: '',
610      process: strMap.get('application'),
611      energy: strMap.get('power'),
612      percent: strMap.get('percent'),
613    };
614    try {
615      const STORE_CONFIG: relationalStore.StoreConfig = {
616        name: pathSuffix + '.db',
617        securityLevel: relationalStore.SecurityLevel.S1,
618      };
619      relationalStore.getRdbStore(
620        globalThis.abilityContext,
621        STORE_CONFIG,
622        (err, rdbStore) => {
623          SPLogger.INFO(
624            'TAG',
625            'resultSet query_applications_display-----tPowerApp' +
626            JSON.stringify(pathSuffix)
627          );
628          rdbStore.insert(tableName, valueInsert);
629        }
630      );
631    } catch (err) {
632      SPLogger.ERROR(TAG, 'resultSet insertPowerAppInfo Data:err' + err);
633    }
634  },
635
636  //查询表(detailed_applications_display)
637  async query_applications_display(
638    start_time: String,
639    end_time: String,
640    pkg_name: String
641  ): Promise<Array<TPowerSensorInfo>> {
642    const STORE_CONFIG: relationalStore.StoreConfig = {
643      name: 'dubai.db',
644      securityLevel: relationalStore.SecurityLevel.S1,
645    };
646    let results: TPowerSensorInfo[] = [];
647    try {
648      return await relationalStore
649        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
650        .then(async (rdbStore) => {
651          let strSQL: string =
652            'select sum(energy)/3600.0 power,sum(energy)/((max(end_time)-min(start_time))/1000.0) current ' +
653              'from detailed_applications_display ' +
654              'where formatted_start_time >= ' +
655            JSON.stringify(start_time) +
656              ' and formatted_end_time <= ' +
657            JSON.stringify(end_time) +
658              ' and name = ' +
659            JSON.stringify(pkg_name);
660          SPLogger.INFO(
661            'TAG',
662            'resultSet query_applications_display-----display' +
663            JSON.stringify(strSQL)
664          );
665          return rdbStore.querySql(strSQL);
666        })
667        .then((resultSet) => {
668          while (resultSet.goToNextRow()) {
669            let sensor = 'display';
670            let power = resultSet.getString(resultSet.getColumnIndex('power'));
671            let current = resultSet.getString(
672              resultSet.getColumnIndex('current')
673            );
674            let tPowerSensorInfo = new TPowerSensorInfo(
675              '',
676              sensor,
677              power,
678              current,
679              ''
680            );
681            results.push(tPowerSensorInfo);
682          }
683          SPLogger.INFO(
684            'TAG',
685            'resultSet query_applications_display-----display' +
686            JSON.stringify(results)
687          );
688          return results;
689        });
690    } catch (err) {
691      SPLogger.ERROR(
692        TAG,
693        'resultSet query_applications_display err22222:' + err
694      );
695      return results;
696    }
697  },
698  //查询表(task_powersensor_info)
699  async query_powersensor_info(
700    pathSuffix: number
701  ): Promise<Array<TPowerSensorInfo>> {
702    const STORE_CONFIG: relationalStore.StoreConfig = {
703      name: pathSuffix + '.db',
704      securityLevel: relationalStore.SecurityLevel.S1,
705    };
706    let results: TPowerSensorInfo[] = [];
707    try {
708      return await relationalStore
709        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
710        .then(async (rdbStore) => {
711          let strSQL: string =
712            'select * ' + 'from task_powersensor_info order by power desc  ';
713
714          return rdbStore.querySql(strSQL);
715        })
716        .then((resultSet) => {
717          while (resultSet.goToNextRow()) {
718            let sensor = resultSet.getString(
719              resultSet.getColumnIndex('sensor')
720            );
721            let power = resultSet.getString(resultSet.getColumnIndex('power'));
722            let current = resultSet.getString(
723              resultSet.getColumnIndex('current')
724            );
725            let tPowerSensorInfo = new TPowerSensorInfo(
726              '',
727              sensor,
728              power,
729              current,
730              ''
731            );
732            results.push(tPowerSensorInfo);
733          }
734          return results;
735        });
736    } catch (err) {
737      SPLogger.ERROR(
738        TAG,
739        'resultSet query_applications_display err22222:' + err
740      );
741      return results;
742    }
743  },
744  //查询表(detailed_applications_cpu)
745  async query_applications_cpu(
746    start_time: String,
747    end_time: String,
748    pkg_name: String
749  ): Promise<Array<TPowerSensorInfo>> {
750    const STORE_CONFIG: relationalStore.StoreConfig = {
751      name: 'dubai.db',
752      securityLevel: relationalStore.SecurityLevel.S1,
753    };
754    let results: TPowerSensorInfo[] = [];
755    try {
756      return await relationalStore
757        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
758        .then(async (rdbStore) => {
759          let strSQL: string =
760            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
761              'from detailed_applications_cpu ' +
762              'where formatted_start_time >= ' +
763            JSON.stringify(start_time) +
764              ' and formatted_end_time <= ' +
765            JSON.stringify(end_time) +
766              ' and name = ' +
767            JSON.stringify(pkg_name);
768
769          return rdbStore.querySql(strSQL);
770        })
771        .then((resultSet) => {
772          while (resultSet.goToNextRow()) {
773            let sensor = 'cpu';
774            let power = resultSet.getString(resultSet.getColumnIndex('power'));
775            let current = resultSet.getString(
776              resultSet.getColumnIndex('current')
777            );
778            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
779            results.push(tPowerSensorInfo);
780          }
781          return results;
782        });
783    } catch (err) {
784      return results;
785    }
786  },
787  //查询表(detailed_applications_gpu)
788  async query_applications_gpu(
789    start_time: String,
790    end_time: String,
791    pkg_name: String
792  ): Promise<Array<TPowerSensorInfo>> {
793    const STORE_CONFIG: relationalStore.StoreConfig = {
794      name: 'dubai.db',
795      securityLevel: relationalStore.SecurityLevel.S1,
796    };
797    let results: TPowerSensorInfo[] = [];
798    try {
799      return await relationalStore
800        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
801        .then(async (rdbStore) => {
802          let strSQL: string =
803            'select sum(energy)/3600.0 power,sum(energy)/((max(end_time)-min(start_time))/1000.0) current ' +
804              'from detailed_applications_gpu ' +
805              'where formatted_start_time >= ' +
806            JSON.stringify(start_time) +
807              ' and formatted_end_time <= ' +
808            JSON.stringify(end_time) +
809              ' and name = ' +
810            JSON.stringify(pkg_name);
811
812          return rdbStore.querySql(strSQL);
813        })
814        .then((resultSet) => {
815          while (resultSet.goToNextRow()) {
816            let sensor = 'gpu';
817            let power = resultSet.getString(resultSet.getColumnIndex('power'));
818            let current = resultSet.getString(
819              resultSet.getColumnIndex('current')
820            );
821            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
822            results.push(tPowerSensorInfo);
823          }
824          return results;
825        });
826    } catch (err) {
827      return results;
828    }
829  },
830  //查询表(detailed_applications_wifi_data)
831  async query_applications_wifi_data(
832    start_time: String,
833    end_time: String,
834    pkg_name: String
835  ): Promise<Array<TPowerSensorInfo>> {
836    const STORE_CONFIG: relationalStore.StoreConfig = {
837      name: 'dubai.db',
838      securityLevel: relationalStore.SecurityLevel.S1,
839    };
840    let results: TPowerSensorInfo[] = [];
841    try {
842      return await relationalStore
843        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
844        .then(async (rdbStore) => {
845          let strSQL: string =
846            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
847              'from detailed_applications_wifi_data ' +
848              'where formatted_start_time >= ' +
849            JSON.stringify(start_time) +
850              ' and formatted_end_time <= ' +
851            JSON.stringify(end_time) +
852              ' and name = ' +
853            JSON.stringify(pkg_name);
854          return rdbStore.querySql(strSQL);
855        })
856        .then((resultSet) => {
857          while (resultSet.goToNextRow()) {
858            let sensor = 'wifi_data';
859            let power = resultSet.getString(resultSet.getColumnIndex('power'));
860            let current = resultSet.getString(
861              resultSet.getColumnIndex('current')
862            );
863            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, ''
864            );
865            results.push(tPowerSensorInfo);
866          }
867          return results;
868        });
869    } catch (err) {
870      return results;
871    }
872  },
873  //查询表(detailed_applications_system_idle)
874  async query_applications_system_idle(
875    start_time: String,
876    end_time: String,
877    pkg_name: String
878  ): Promise<Array<TPowerSensorInfo>> {
879    const STORE_CONFIG: relationalStore.StoreConfig = {
880      name: 'dubai.db',
881      securityLevel: relationalStore.SecurityLevel.S1,
882    };
883    let results: TPowerSensorInfo[] = [];
884    try {
885      return await relationalStore
886        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
887        .then(async (rdbStore) => {
888          let strSQL: string =
889            'select sum(energy)/3600.0 power,sum(energy)/((max(end_time)-min(start_time))/1000.0) current ' +
890              'from detailed_applications_system_idle ' +
891              'where formatted_start_time >= ' +
892            JSON.stringify(start_time) +
893              ' and formatted_end_time <= ' +
894            JSON.stringify(end_time) +
895              ' and name = ' +
896            JSON.stringify(pkg_name);
897          return rdbStore.querySql(strSQL);
898        })
899        .then((resultSet) => {
900          while (resultSet.goToNextRow()) {
901            let sensor = 'system_idle';
902            let power = resultSet.getString(resultSet.getColumnIndex('power'));
903            let current = resultSet.getString(
904              resultSet.getColumnIndex('current')
905            );
906            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
907            results.push(tPowerSensorInfo);
908          }
909          return results;
910        });
911    } catch (err) {
912      return results;
913    }
914  },
915  //查询表(detailed_applications_audio)
916  async query_applications_audio(
917    start_time: String,
918    end_time: String,
919    pkg_name: String
920  ): Promise<Array<TPowerSensorInfo>> {
921    const STORE_CONFIG: relationalStore.StoreConfig = {
922      name: 'dubai.db',
923      securityLevel: relationalStore.SecurityLevel.S1,
924    };
925    let results: TPowerSensorInfo[] = [];
926    try {
927      return await relationalStore
928        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
929        .then(async (rdbStore) => {
930          let strSQL: string =
931            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
932              'from detailed_applications_audio ' +
933              'where formatted_start_time >= ' +
934            JSON.stringify(start_time) +
935              ' and formatted_end_time <= ' +
936            JSON.stringify(end_time) +
937              ' and name = ' +
938            JSON.stringify(pkg_name);
939          return rdbStore.querySql(strSQL);
940        })
941        .then((resultSet) => {
942          while (resultSet.goToNextRow()) {
943            let sensor = 'audio';
944            let power = resultSet.getString(resultSet.getColumnIndex('power'));
945            let current = resultSet.getString(
946              resultSet.getColumnIndex('current')
947            );
948            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
949            results.push(tPowerSensorInfo);
950          }
951          return results;
952        });
953    } catch (err) {
954      return results;
955    }
956  },
957  //查询表(detailed_applications_dss)
958  async query_applications_dss(
959    start_time: String,
960    end_time: String,
961    pkg_name: String
962  ): Promise<Array<TPowerSensorInfo>> {
963    const STORE_CONFIG: relationalStore.StoreConfig = {
964      name: 'dubai.db',
965      securityLevel: relationalStore.SecurityLevel.S1,
966    };
967    let results: TPowerSensorInfo[] = [];
968    try {
969      return await relationalStore
970        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
971        .then(async (rdbStore) => {
972          let strSQL: string =
973            'select sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
974              'from detailed_applications_dss ' +
975              'where formatted_start_time >= ' +
976            JSON.stringify(start_time) +
977              ' and formatted_end_time <= ' +
978            JSON.stringify(end_time) +
979              ' and name = ' +
980            JSON.stringify(pkg_name);
981          return rdbStore.querySql(strSQL);
982        })
983        .then((resultSet) => {
984          while (resultSet.goToNextRow()) {
985            let sensor = 'dss';
986            let power = resultSet.getString(resultSet.getColumnIndex('power'));
987            let current = resultSet.getString(
988              resultSet.getColumnIndex('current')
989            );
990            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
991            results.push(tPowerSensorInfo);
992          }
993          return results;
994        });
995    } catch (err) {
996      return results;
997    }
998  },
999  //查询表(detailed_applications_ddr)
1000  async query_applications_ddr(
1001    start_time: String,
1002    end_time: String,
1003    pkg_name: String
1004  ): Promise<Array<TPowerSensorInfo>> {
1005    const STORE_CONFIG: relationalStore.StoreConfig = {
1006      name: 'dubai.db',
1007      securityLevel: relationalStore.SecurityLevel.S1,
1008    };
1009    let results: TPowerSensorInfo[] = [];
1010    try {
1011      return await relationalStore
1012        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
1013        .then(async (rdbStore) => {
1014          let strSQL: string =
1015            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
1016              'from detailed_applications_ddr ' +
1017              'where formatted_start_time >= ' +
1018            JSON.stringify(start_time) +
1019              ' and formatted_end_time <= ' +
1020            JSON.stringify(end_time) +
1021              ' and name = ' +
1022            JSON.stringify(pkg_name);
1023          return rdbStore.querySql(strSQL);
1024        })
1025        .then((resultSet) => {
1026          while (resultSet.goToNextRow()) {
1027            let sensor = 'ddr';
1028            let power = resultSet.getString(resultSet.getColumnIndex('power'));
1029            let current = resultSet.getString(
1030              resultSet.getColumnIndex('current')
1031            );
1032            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
1033            results.push(tPowerSensorInfo);
1034          }
1035          return results;
1036        });
1037    } catch (err) {
1038      return results;
1039    }
1040  }, //查询表(detailed_applications_sensor)
1041  async query_applications_sensor(
1042    start_time: String,
1043    end_time: String,
1044    pkg_name: String
1045  ): Promise<Array<TPowerSensorInfo>> {
1046    const STORE_CONFIG: relationalStore.StoreConfig = {
1047      name: 'dubai.db',
1048      securityLevel: relationalStore.SecurityLevel.S1,
1049    };
1050    let results: TPowerSensorInfo[] = [];
1051    try {
1052      return await relationalStore
1053        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
1054        .then(async (rdbStore) => {
1055          let strSQL: string =
1056            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
1057              'from detailed_applications_sensor ' +
1058              'where formatted_start_time >= ' +
1059            JSON.stringify(start_time) +
1060              ' and formatted_end_time <= ' +
1061            JSON.stringify(end_time) +
1062              ' and name = ' +
1063            JSON.stringify(pkg_name);
1064          return rdbStore.querySql(strSQL);
1065        })
1066        .then((resultSet) => {
1067          while (resultSet.goToNextRow()) {
1068            let sensor = 'sensor';
1069            let power = resultSet.getString(resultSet.getColumnIndex('power'));
1070            let current = resultSet.getString(
1071              resultSet.getColumnIndex('current')
1072            );
1073            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, ''
1074            );
1075            results.push(tPowerSensorInfo);
1076          }
1077          return results;
1078        });
1079    } catch (err) {
1080      return results;
1081    }
1082  },
1083  //查询表(detailed_applications_rom)
1084  async query_applications_rom(
1085    start_time: String,
1086    end_time: String,
1087    pkg_name: String
1088  ): Promise<Array<TPowerSensorInfo>> {
1089    const STORE_CONFIG: relationalStore.StoreConfig = {
1090      name: 'dubai.db',
1091      securityLevel: relationalStore.SecurityLevel.S1,
1092    };
1093    let results: TPowerSensorInfo[] = [];
1094    try {
1095      return await relationalStore
1096        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
1097        .then(async (rdbStore) => {
1098          let strSQL: string =
1099            'select (sum(foreground_energy)+sum(background_energy))/3600.0 power, (sum(foreground_energy)+sum(background_energy))/((max(end_time)-min(start_time))/1000.0) current ' +
1100              'from detailed_applications_rom ' +
1101              'where formatted_start_time >= ' +
1102            JSON.stringify(start_time) +
1103              ' and formatted_end_time <= ' +
1104            JSON.stringify(end_time) +
1105              ' and name = ' +
1106            JSON.stringify(pkg_name);
1107          return rdbStore.querySql(strSQL);
1108        })
1109        .then((resultSet) => {
1110          while (resultSet.goToNextRow()) {
1111            let sensor = 'rom';
1112            let power = resultSet.getString(resultSet.getColumnIndex('power'));
1113            let current = resultSet.getString(
1114              resultSet.getColumnIndex('current')
1115            );
1116            let tPowerSensorInfo = new TPowerSensorInfo('', sensor, power, current, '');
1117            results.push(tPowerSensorInfo);
1118          }
1119          return results;
1120        });
1121    } catch (err) {
1122      return results;
1123    }
1124  },
1125  //查询dubai 所有进程功耗 并插入表 t_power_appinfo
1126  async query_applications_power_info(
1127    start_time: string,
1128    end_time: string
1129  ): Promise<Array<TPowerAppInfo>> {
1130    const STORE_CONFIG: relationalStore.StoreConfig = {
1131      name: 'dubai.db',
1132      securityLevel: relationalStore.SecurityLevel.S1,
1133    };
1134    let results: TPowerAppInfo[] = [];
1135    let strSQL: String = '';
1136    try {
1137      return await relationalStore
1138        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
1139        .then(async (rdbStore) => {
1140          let sqlWhere =
1141            " where formatted_start_time >= '{startTime}'  and formatted_end_time <= '{endTime}' ";
1142          let sqlWhereReplace = sqlWhere
1143            .replace('{startTime}', start_time)
1144            .replace('{endTime}', end_time);
1145          SPLogger.ERROR(
1146            'TAG',
1147            'resultSet query_applications_display-----sqlWhereReplace:' +
1148              sqlWhereReplace
1149          );
1150          strSQL =
1151            'select formatted_start_time, formatted_end_time, name, round((foreground_energy+background_energy)/3600.0,5) as energy ' +
1152              'from detailed_applications_cpu ' +
1153              sqlWhereReplace +
1154              'union all ' +
1155              'select formatted_start_time, formatted_end_time, name,round(energy/3600.0,5) as energy ' +
1156              'from detailed_applications_display ' +
1157              sqlWhereReplace +
1158              'union all ' +
1159              'select formatted_start_time, formatted_end_time, name,round(energy/3600.0,5) as energy ' +
1160              'from detailed_applications_gpu ' +
1161              sqlWhereReplace +
1162              'union all ' +
1163              'select formatted_start_time, formatted_end_time, name,round(energy/3600.0,5) as energy ' +
1164              'from detailed_applications_system_idle ' +
1165              sqlWhereReplace +
1166              'union all ' +
1167              'select formatted_start_time, formatted_end_time, name, round((foreground_energy+background_energy)/3600.0,5) as energy ' +
1168              'from detailed_applications_wifi_data ' +
1169              sqlWhereReplace +
1170              'union all ' +
1171              'select formatted_start_time, formatted_end_time, name, round((foreground_energy+background_energy)/3600.0,5) as energy ' +
1172              'from detailed_applications_sensor ' +
1173              sqlWhereReplace +
1174              'union all ' +
1175              'select formatted_start_time, formatted_end_time, name, round((foreground_energy+background_energy)/3600.0,5) as energy ' +
1176              'from detailed_applications_audio ' +
1177              sqlWhereReplace;
1178
1179          return rdbStore.querySql(strSQL.toString());
1180        })
1181        .then((resultSet) => {
1182          SPLogger.ERROR(
1183            'TAG',
1184            'resultSet query_applications_display-----result L:' +
1185            resultSet.rowCount
1186          );
1187          let tMap: Map<String, String> = new Map();
1188          let totalSumEnergy: number = 0.0;
1189
1190          while (resultSet.goToNextRow()) {
1191            let sum_energy = resultSet.getString(
1192              resultSet.getColumnIndex('energy')
1193            );
1194            totalSumEnergy = totalSumEnergy + Number(sum_energy);
1195            let name = resultSet.getString(resultSet.getColumnIndex('name'));
1196            let existElement = tMap.get(name);
1197            if (existElement !== undefined) {
1198              //存在则修改
1199              let newP: Number = Number(existElement) + Number(sum_energy);
1200              tMap.set(name, newP.toString());
1201            } else {
1202              tMap.set(name, sum_energy);
1203            }
1204          }
1205          //遍历去重相加后的arr
1206          for (let [name, power] of tMap) {
1207            let percent = (Number(power) * 100) / totalSumEnergy;
1208            let tPowerAppInfo = new TPowerAppInfo(
1209              '',
1210              '',
1211              name,
1212              power,
1213              '0',
1214              percent.toFixed(5)
1215            );
1216            SPLogger.ERROR(
1217              'TAG',
1218              'resultSet query_applications_display-----result0:' +
1219              JSON.stringify(tPowerAppInfo)
1220            );
1221            results.push(tPowerAppInfo);
1222          }
1223          return results
1224            .sort(
1225              (a, b) =>
1226              parseFloat(b.power.toString()) - parseFloat(a.power.toString())
1227            )
1228            .slice(0, 20);
1229        })
1230        .then((results) => {
1231          SPLogger.ERROR(
1232            'TAG',
1233            'resultSet query_applications_display-----result after:' +
1234            results.length
1235          );
1236          return results;
1237        });
1238    } catch (err) {
1239      SPLogger.ERROR(
1240        TAG,
1241        'resultSet query_applications_display err22222:' + err
1242      );
1243      return results;
1244    }
1245  },
1246
1247  //查询 t_powerapp_info
1248  async query_powerapp_info(pathSuffix: number): Promise<Array<TPowerAppInfo>> {
1249    const STORE_CONFIG: relationalStore.StoreConfig = {
1250      name: pathSuffix + '.db',
1251      securityLevel: relationalStore.SecurityLevel.S1,
1252    };
1253    let results: TPowerAppInfo[] = [];
1254    try {
1255      return await relationalStore
1256        .getRdbStore(globalThis.abilityContext, STORE_CONFIG)
1257        .then(async (rdbStore) => {
1258          let strSQL: string =
1259            'select * ' + 'from task_powerapp_info order by energy desc  ';
1260
1261          return rdbStore.querySql(strSQL);
1262        })
1263        .then((resultSet) => {
1264          while (resultSet.goToNextRow()) {
1265            let process = resultSet.getString(
1266              resultSet.getColumnIndex('process')
1267            );
1268            let energy = resultSet.getString(
1269              resultSet.getColumnIndex('energy')
1270            );
1271            let percent = resultSet.getString(
1272              resultSet.getColumnIndex('percent')
1273            );
1274
1275            let tPowerAppInfo = new TPowerAppInfo(
1276              '',
1277              '',
1278              process,
1279              energy,
1280              '0',
1281              percent
1282            );
1283            results.push(tPowerAppInfo);
1284          }
1285          return results;
1286        });
1287    } catch (err) {
1288      SPLogger.ERROR(
1289        TAG,
1290        'resultSet query_applications_display query_powerapp_info:' + err
1291      );
1292      return results;
1293    }
1294  },
1295};
1296