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