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 './sql-wasm.js' 17import {CpuStruct} from "../bean/CpuStruct.js"; 18import {CpuFreqStruct} from "../bean/CpuFreqStruct.js"; 19import {ThreadStruct} from "../bean/ThreadStruct.js"; 20import {ProcessMemStruct} from "../bean/ProcessMemStruct.js"; 21import {Counter, Fps, SelectionData} from "../bean/BoxSelection.js"; 22import {FuncStruct} from "../bean/FuncStruct.js"; 23import {WakeUpTimeBean} from "../bean/WakeUpTimeBean.js"; 24import {WakeupBean} from "../bean/WakeupBean.js"; 25import {BinderArgBean} from "../bean/BinderArgBean.js"; 26import {FpsStruct} from "../bean/FpsStruct.js"; 27import {SPT, SPTChild} from "../bean/StateProcessThread.js"; 28import {CpuUsage, Freq} from "../bean/CpuUsage.js"; 29import {HeapTreeDataBean} from "../bean/HeapTreeDataBean.js"; 30import { 31 NativeEvent, 32 NativeEventHeap, 33 NativeHookMalloc, 34 NativeHookProcess, 35 NativeHookSampleQueryInfo, 36 NativeHookStatistics 37} from "../bean/NativeHook.js"; 38import { 39 LiveProcess, 40 ProcessHistory, 41 SystemCpuSummary, 42 SystemDiskIOSummary, 43 SystemNetworkSummary 44} from "../bean/AbilityMonitor.js"; 45import {NetworkAbilityMonitorStruct} from "../bean/NetworkAbilityMonitorStruct.js"; 46import {DiskAbilityMonitorStruct} from "../bean/DiskAbilityMonitorStruct.js"; 47import {MemoryAbilityMonitorStruct} from "../bean/MemoryAbilityMonitorStruct.js"; 48import {CpuAbilityMonitorStruct} from "../bean/CpuAbilityMonitorStruct.js"; 49import { 50 PerfCall, 51 PerfCallChain, 52 PerfCmdLine, 53 PerfFile, 54 PerfSample, 55 PerfStack, 56 PerfThread 57} from "../bean/PerfProfile.js"; 58import {SearchFuncBean} from "../bean/SearchFuncBean.js"; 59import {info} from "../../log/Log.js"; 60import {CounterStruct, SdkSliceStruct} from "../bean/SdkStruct.js"; 61import {CounterSummary, SdkSliceSummary} from "../bean/SdkSummary.js"; 62import { 63 EnergyAnomalyStruct, 64 EnergyPowerStruct, 65 EnergyStateStruct, 66 EnergySystemStruct, 67 PowerBatteryEnergy, 68 PowerDetailsEnergy, SystemDetailsEnergy 69} from "../bean/EnergyStruct.js"; 70import {Smaps} from "../bean/SmapsStruct.js"; 71import {CpuFreqRowLimit} from "../component/chart/SpFreqChart.js"; 72import {CpuFreqLimitsStruct} from "./ui-worker/ProcedureWorkerCpuFreqLimits.js"; 73 74class DbThread extends Worker { 75 busy: boolean = false; 76 isCancelled: boolean = false; 77 id: number = -1; 78 taskMap: any = {}; 79 cacheArray: Array<any> = []; 80 81 uuid(): string { 82 // @ts-ignore 83 return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11) 84 .replace(/[018]/g, (c: any) => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)); 85 } 86 87 queryFunc(name: string, sql: string, args: any, handler: Function, action: string | null) { 88 this.busy = true; 89 let id = this.uuid(); 90 this.taskMap[id] = handler 91 let msg = { 92 id: id, 93 name: name, 94 action: action || "exec", 95 sql: sql, 96 params: args, 97 } 98 this.postMessage(msg); 99 } 100 101 dbOpen = async (sdkWasmConfig?:string): Promise<{ status: boolean, msg: string, buffer: ArrayBuffer, sdkConfigMap: any}> => { 102 return new Promise<any>((resolve, reject) => { 103 let id = this.uuid(); 104 this.taskMap[id] = (res: any) => { 105 if (res.init) { 106 resolve({status: res.init, msg: res.msg, sdkConfigMap:res.configSqlMap, buffer: res.buffer}); 107 } else { 108 resolve({status: res.init, msg: res.msg}); 109 } 110 } 111 this.postMessage({ 112 id: id, 113 action: "open", 114 wasmConfig: sdkWasmConfig, 115 buffer: DbPool.sharedBuffer!, /*Optional. An ArrayBuffer representing an SQLite Database file*/ 116 }, [DbPool.sharedBuffer!]); 117 }) 118 } 119} 120 121export class DbPool { 122 static sharedBuffer: ArrayBuffer | null = null; 123 maxThreadNumber: number = 0; 124 works: Array<DbThread> = []; 125 progress: Function | undefined | null; 126 num = Math.floor(Math.random() * 10 + 1) + 20; 127 init = async (type: string, threadBuild: (() => DbThread) | undefined = undefined) => { // wasm | server | sqlite 128 await this.close(); 129 if (type === "wasm") { 130 this.maxThreadNumber = 1; 131 } else if (type === "server") { 132 this.maxThreadNumber = 1; 133 } else if (type === "sqlite") { 134 this.maxThreadNumber = 1; 135 } else if (type === "duck") { 136 this.maxThreadNumber = 1; 137 } 138 for (let i = 0; i < this.maxThreadNumber; i++) { 139 let thread: DbThread 140 if (threadBuild) { 141 thread = threadBuild() 142 } else { 143 if (type === "wasm") { 144 thread = new DbThread("trace/database/TraceWorker.js") 145 } else if (type === "server") { 146 thread = new DbThread("trace/database/SqlLiteWorker.js") 147 } else if (type === "sqlite") { 148 thread = new DbThread("trace/database/SqlLiteWorker.js") 149 } 150 } 151 thread!.onmessage = (event: MessageEvent) => { 152 thread.busy = false; 153 if (Reflect.has(thread.taskMap, event.data.id)) { 154 if (event.data.results) { 155 let fun = thread.taskMap[event.data.id]; 156 if (fun) { 157 fun(event.data.results); 158 } 159 Reflect.deleteProperty(thread.taskMap, event.data.id); 160 } else if (Reflect.has(event.data, 'ready')) { 161 this.progress!("database opened", this.num + event.data.index) 162 } else if (Reflect.has(event.data, 'init')) { 163 this.progress!("database ready", 40) 164 let fun = thread.taskMap[event.data.id]; 165 if (fun) { 166 fun(event.data) 167 } 168 Reflect.deleteProperty(thread.taskMap, event.data.id) 169 } else { 170 let fun = thread.taskMap[event.data.id]; 171 if (fun) { 172 fun([]) 173 } 174 Reflect.deleteProperty(thread.taskMap, event.data.id) 175 } 176 177 } 178 } 179 thread!.onmessageerror = e => { 180 } 181 thread!.onerror = e => { 182 } 183 thread!.id = i; 184 thread!.busy = false; 185 this.works?.push(thread!); 186 } 187 } 188 189 initServer = async (url: string, progress: Function) => { 190 this.progress = progress; 191 progress("database loaded", 15) 192 let buf = await fetch(url).then(res => res.arrayBuffer()); 193 DbPool.sharedBuffer = buf; 194 progress("open database", 20) 195 for (let i = 0; i < this.works.length; i++) { 196 let thread = this.works[i]; 197 let {status, msg} = await thread.dbOpen() 198 if (!status) { 199 return {status, msg} 200 } 201 } 202 return {status: true, msg: "ok"}; 203 } 204 initSqlite = async (buf: ArrayBuffer, sdkWasmConfig: string, progress: Function) => { 205 this.progress = progress; 206 progress("database loaded", 15) 207 DbPool.sharedBuffer = buf; 208 progress("parse database", 20) 209 let configMap; 210 for (let i = 0; i < this.works.length; i++) { 211 let thread = this.works[i]; 212 let {status, msg, buffer, sdkConfigMap} = await thread.dbOpen(sdkWasmConfig) 213 if (!status) { 214 return {status, msg} 215 } else { 216 configMap = sdkConfigMap; 217 DbPool.sharedBuffer = buffer; 218 } 219 } 220 return {status: true, msg: "ok", sdkConfigMap: configMap}; 221 } 222 223 close = async () => { 224 for (let i = 0; i < this.works.length; i++) { 225 let thread = this.works[i]; 226 thread.terminate(); 227 } 228 this.works.length = 0; 229 } 230 231 submit(name: string, sql: string, args: any, handler: Function, action: string | null) { 232 let noBusyThreads = this.works.filter(it => !it.busy); 233 let thread: DbThread 234 if (noBusyThreads.length > 0) { //取第一个空闲的线程进行任务 235 thread = noBusyThreads[0]; 236 thread.queryFunc(name, sql, args, handler, action) 237 } else { // 随机插入一个线程中 238 thread = this.works[Math.floor(Math.random() * this.works.length)] 239 thread.queryFunc(name, sql, args, handler, action) 240 } 241 } 242} 243 244export const threadPool = new DbPool() 245 246export function query<T extends any>(name: string, sql: string, args: any = null, action: string | null = null): Promise<Array<T>> { 247 return new Promise<Array<T>>((resolve, reject) => { 248 threadPool.submit(name, sql, args, (res: any) => { 249 resolve(res) 250 }, action); 251 }) 252} 253 254export const queryEventCountMap = ():Promise<Array<{ 255 eventName:string, 256 count:number 257}>> => query("queryEventCountMap",`select event_name as eventName,count from stat where stat_type = 'received';`); 258 259export const queryProcess = (): Promise<Array<{ 260 pid: number | null 261 processName: string | null 262}>> => 263 query("queryProcess", ` 264 SELECT 265 pid, processName 266 FROM 267 temp_query_process where pid != 0`) 268 269export const queryProcessByTable = (): Promise<Array<{ 270 pid: number | null 271 processName: string | null 272}>> => 273 query("queryProcessByTable", ` 274 SELECT 275 pid, name as processName 276 FROM 277 process where pid != 0`) 278 279export const queryProcessAsyncFunc = ():Promise<Array<any>> => query("queryProcessAsyncFunc",` 280select tid, 281 P.pid, 282 A.name as threadName, 283 is_main_thread, 284 c.callid as track_id, 285 c.ts-D.start_ts as startTs, 286 c.dur, 287 c.name as funName, 288 c.parent_id, 289 c.id, 290 c.cookie, 291 c.depth, 292 c.argsetid 293from thread A,trace_range D 294left join callstack C on A.id = C.callid 295left join process P on P.id = A.ipid 296where startTs not null and cookie not null ;`, {}) 297 298export const queryTotalTime = (): Promise<Array<{ total: number ,recordStartNS:number,recordEndNS:number}>> => 299 query("queryTotalTime", ` 300 select 301 start_ts as recordStartNS,end_ts as recordEndNS,end_ts-start_ts as total 302 from 303 trace_range;`) 304 305export const getAsyncEvents = (): Promise<Array<any>> => 306 query("getAsyncEvents", ` 307 select 308 *, 309 p.pid as pid, 310 c.ts - t.start_ts as "startTime" 311 from 312 callstack c,trace_range t 313 left join 314 process p 315 on 316 c.callid = p.id 317 where 318 cookie is not null;`) 319 320export const getCpuUtilizationRate = (startNS: number, endNS: number): Promise<Array<{ 321 cpu: number 322 ro: number 323 rate: number 324}>> => 325 query("getCpuUtilizationRate", ` 326 with cpu as ( 327 select 328 cpu, 329 ts, 330 dur, 331 (case when ro < 99 then ro else 99 end) as ro , 332 (case when ro < 99 then stime+ro*cell else stime + 99 * cell end) as st, 333 (case when ro < 99 then stime + (ro+1)*cell else etime end) as et 334 from ( 335 select 336 cpu, 337 ts, 338 A.dur, 339 ((ts+A.dur)-D.start_ts)/((D.end_ts-D.start_ts)/100) as ro, 340 D.start_ts as stime, 341 D.end_ts etime, 342 (D.end_ts-D.start_ts)/100 as cell 343 from 344 sched_slice A 345 left join 346 trace_range D 347 left join 348 thread B on A.itid = B.id 349 left join 350 process C on B.ipid = C.id 351 where 352 tid != 0 353 and (A.ts) 354 between D.start_ts and D.end_ts)) 355 select cpu,ro, 356 sum(case 357 when ts <= st and ts + dur <= et then (ts + dur - st) 358 when ts <= st and ts + dur > et then et-st 359 when ts > st and ts + dur <= et then dur 360 when ts > st and ts + dur > et then et - ts end)/cast(et-st as float) as rate 361 from cpu 362 group by cpu,ro;`, {}) 363 364export const getFps = () => 365 query<FpsStruct>("getFps", ` 366 select 367 distinct(ts-tb.start_ts) as startNS, fps 368 from 369 hidump c ,trace_range tb 370 where 371 startNS >= 0 372 --order by startNS; 373 `, {}) 374 375export const getFunDataByTid = (tid: number): Promise<Array<FuncStruct>> => 376 query("getFunDataByTid", ` 377 select 378 --tid, 379 --A.name as threadName, 380 c.ts-D.start_ts as startTs, 381 c.dur, 382 c.name as funName, 383 c.argsetid, 384 c.depth 385from thread A,trace_range D 386left join callstack C on A.id = C.callid 387where startTs not null and c.cookie is null and tid = $tid`, {$tid: tid}) 388 389export const getStatesProcessThreadDataByRange = (leftNs: number, rightNs: number): Promise<Array<SPT>> => 390 query<SPT>("getStatesProcessThreadDataByRange", ` 391 select 392 IP.name as process, 393 IP.pid as processId, 394 A.name as thread, 395 B.state as state, 396 A.tid as threadId, 397 B.dur, 398 (B.ts - TR.start_ts + B.dur) as end_ts, 399 (B.ts - TR.start_ts) as start_ts, 400 B.cpu 401 from 402 thread_state as B 403 left join thread as A on B.itid = A.id 404 left join process as IP on A.ipid = IP.id 405 left join trace_range as TR 406 where B.dur > 0 407 and IP.pid not null 408 and (B.ts - TR.start_ts) >= $leftNs 409 and (B.ts - TR.start_ts + B.dur) <= $rightNs 410`, {$leftNs:leftNs,$rightNs:rightNs}); 411 412export const getTabBoxChildData = (leftNs: number, rightNs: number, state: string | undefined, 413 processId: number | undefined, threadId: number | undefined): Promise<Array<SPTChild>> => 414 query<SPTChild>("getTabBoxChildData", ` 415 select 416 IP.name as process, 417 IP.pid as processId, 418 A.name as thread, 419 B.state as state, 420 A.tid as threadId, 421 B.dur as duration, 422 B.ts - TR.start_ts as startNs, 423 B.cpu, 424 C.priority 425 from 426 thread_state AS B 427 left join 428 thread as A 429 on 430 B.itid = A.id 431 left join 432 process AS IP 433 on 434 A.ipid = IP.id 435 left join 436 trace_range AS TR 437 left join 438 sched_slice as C 439 on 440 B.itid = C.itid 441 and 442 C.ts = B.ts 443 where 444 B.dur > 0 445 and 446 IP.pid not null 447 and 448 not ((B.ts - TR.start_ts + B.dur < $leftNS) or (B.ts - TR.start_ts > $rightNS)) 449 ${state != undefined && state != '' ? 'and B.state = $state' : ''} 450 ${processId != undefined && processId != -1 ? 'and IP.pid = $processID' : ''} 451 ${threadId != undefined && threadId != -1 ? 'and A.tid = $threadID' : ''} 452 `, {$leftNS: leftNs, $rightNS: rightNs, $state: state, $processID: processId, $threadID: threadId}) 453 454export const getTabCpuUsage = (cpus: Array<number>, leftNs: number, rightNs: number): Promise<Array<CpuUsage>> => 455 query<CpuUsage>("getTabCpuUsage", ` 456 select 457 cpu, 458 sum(case 459 when (A.ts - B.start_ts) < $leftNS 460 then (A.ts - B.start_ts + A.dur - $leftNS) 461 when (A.ts - B.start_ts) >= $leftNS 462 and (A.ts - B.start_ts + A.dur) <= $rightNS 463 then A.dur 464 when (A.ts - B.start_ts + A.dur) > $rightNS 465 then ($rightNS - (A.ts - B.start_ts)) end) / cast($rightNS - $leftNS as float) as usage 466 from 467 thread_state A, 468 trace_range B 469 where 470 (A.ts - B.start_ts) > 0 and A.dur > 0 471 and 472 cpu in (${cpus.join(",")}) 473 and 474 (A.ts - B.start_ts + A.dur) > $leftNS 475 and 476 (A.ts - B.start_ts) < $rightNS 477 group by 478 cpu`, {$leftNS: leftNs, $rightNS: rightNs}) 479 480export const getTabCpuFreq = (cpus: Array<number>, leftNs: number, rightNs: number): Promise<Array<Freq>> => 481 query<Freq>("getTabCpuFreq", ` 482 select 483 cpu, 484 value, 485 (ts - tb.start_ts) as startNs 486 from 487 measure c, 488 trace_range tb 489 inner join 490 cpu_measure_filter t 491 on 492 c.filter_id = t.id 493 where 494 (name = 'cpufreq' or name='cpu_frequency') 495 and 496 cpu in (${cpus.join(",")}) 497 and 498 startNs > 0 499 and 500 startNs < $rightNS 501 --order by startNs 502 `, {$leftNS: leftNs, $rightNS: rightNs}) 503 504export const getTabFps = (leftNs: number, rightNs: number): Promise<Array<Fps>> => 505 query<Fps>("getTabFps", ` 506 select 507 distinct(ts-tb.start_ts) as startNS, 508 fps 509 from 510 hidump c, 511 trace_range tb 512 where 513 startNS <= $rightNS 514 and 515 startNS >= 0 516 --order by startNS; 517 `, {$leftNS: leftNs, $rightNS: rightNs}) 518 519export const getTabCounters = (processFilterIds: Array<number>,virtualFilterIds:Array<number>, startTime: number) => 520 query<Counter>("getTabCounters", ` 521 select 522 t1.filter_id as trackId, 523 t2.name, 524 value, 525 t1.ts - t3.start_ts as startTime 526 from 527 process_measure t1 528 left join 529 process_measure_filter t2 530 on 531 t1.filter_id = t2.id 532 left join 533 trace_range t3 534 where 535 filter_id in (${processFilterIds.join(",")}) 536 and 537 startTime <= $startTime 538union 539 select 540 t1.filter_id as trackId, 541 t2.name, 542 value, 543 t1.ts - t3.start_ts as startTime 544 from 545 sys_mem_measure t1 546 left join 547 sys_event_filter t2 548 on 549 t1.filter_id = t2.id 550 left join 551 trace_range t3 552 where 553 filter_id in (${virtualFilterIds.join(",")}) 554 and 555 startTime <= $startTime 556 `, {$startTime: startTime}) 557 558export const getTabVirtualCounters = (virtualFilterIds:Array<number>, startTime: number) => 559 query<Counter>("getTabVirtualCounters", ` 560 select 561 t1.filter_id as trackId, 562 t2.name, 563 value, 564 t1.ts - t3.start_ts as startTime 565 from 566 sys_mem_measure t1 567 left join 568 sys_event_filter t2 569 on 570 t1.filter_id = t2.id 571 left join 572 trace_range t3 573 where 574 filter_id in (${virtualFilterIds.join(",")}) 575 and 576 startTime <= $startTime 577 `, {$startTime: startTime}) 578 579export const getTabCpuByProcess = (cpus: Array<number>, leftNS: number, rightNS: number) => 580 query<SelectionData>("getTabCpuByProcess", ` 581 select 582 IP.name as process, 583 IP.pid as pid, 584 sum(B.dur) as wallDuration, 585 avg(B.dur) as avgDuration, 586 count(A.tid) as occurrences 587 from 588 thread_state AS B 589 left join 590 thread as A 591 on 592 B.itid = A.id 593 left join 594 trace_range AS TR 595 left join 596 process AS IP 597 on 598 A.ipid = IP.id 599 where 600 B.cpu in (${cpus.join(",")}) 601 and 602 not ((B.ts - TR.start_ts + B.dur < $leftNS) or (B.ts - TR.start_ts > $rightNS )) 603 group by 604 IP.name, 605 IP.pid 606 order by 607 wallDuration desc;`, {$rightNS: rightNS, $leftNS: leftNS}) 608 609export const getTabCpuByThread = (cpus: Array<number>, leftNS: number, rightNS: number) => 610 query<SelectionData>("getTabCpuByThread", ` 611 select 612 IP.name as process, 613 IP.pid as pid, 614 A.name as thread, 615 A.tid as tid, 616 sum(B.dur) as wallDuration, 617 avg(B.dur) as avgDuration, 618 count(A.tid) as occurrences 619 from 620 thread_state AS B 621 left join 622 thread as A 623 on 624 B.itid = A.id 625 left join 626 trace_range AS TR 627 left join 628 process AS IP 629 on 630 A.ipid = IP.id 631 where 632 B.cpu in (${cpus.join(",")}) 633 and 634 not ((B.ts - TR.start_ts + B.dur < $leftNS) or (B.ts - TR.start_ts > $rightNS)) 635 group by 636 IP.name, 637 IP.pid, 638 A.name, 639 A.tid 640 order by 641 wallDuration desc;`, {$rightNS: rightNS, $leftNS: leftNS}) 642 643export const getTabSlices = (funTids: Array<number>, leftNS: number, rightNS: number): Promise<Array<any>> => 644 query<SelectionData>("getTabSlices", ` 645 select 646 c.name as name, 647 sum(c.dur) as wallDuration, 648 avg(c.dur) as avgDuration, 649 count(c.name) as occurrences 650 from 651 thread A, trace_range D 652 left join 653 callstack C 654 on 655 A.id = C.callid 656 where 657 C.ts not null 658 and 659 c.dur >= 0 660 and 661 A.tid in (${funTids.join(",")}) 662 and 663 c.name != 'binder transaction async' 664 and 665 c.name != 'binder async rcv' 666 and 667 c.cookie is null 668 and 669 not ((C.ts - D.start_ts + C.dur < $leftNS) or (C.ts - D.start_ts > $rightNS)) 670 group by 671 c.name 672 order by 673 wallDuration desc;`, {$leftNS: leftNS, $rightNS: rightNS}) 674 675export const getTabSlicesAsyncFunc = (asyncNames:Array<string>,asyncPid: Array<number>, leftNS: number, rightNS: number): Promise<Array<any>> => 676 query<SelectionData>("getTabSlicesAsyncFunc", ` 677 select 678 c.name as name, 679 sum(c.dur) as wallDuration, 680 avg(c.dur) as avgDuration, 681 count(c.name) as occurrences 682 from 683 thread A, trace_range D 684 left join 685 callstack C 686 on 687 A.id = C.callid 688 left join process P on P.id = A.ipid 689 where 690 C.ts not null 691 and 692 c.dur >= -1 693 and 694 c.cookie not null 695 and 696 P.pid in (${asyncPid.join(",")}) 697 and 698 c.name in (${asyncNames.map(it=>"'"+it+"'").join(",")}) 699 and 700 not ((C.ts - D.start_ts + C.dur < $leftNS) or (C.ts - D.start_ts > $rightNS)) 701 group by 702 c.name 703 order by 704 wallDuration desc;`, {$leftNS: leftNS, $rightNS: rightNS}) 705 706export const getTabThreadStates = (tIds: Array<number>, leftNS: number, rightNS: number): Promise<Array<any>> => 707 query<SelectionData>("getTabThreadStates", ` 708 select 709 IP.name as process, 710 IP.pid, 711 A.name as thread, 712 A.tid, 713 B.state, 714 sum(B.dur) as wallDuration, 715 avg(ifnull(B.dur,0)) as avgDuration, 716 count(A.tid) as occurrences 717 from 718 thread_state AS B 719 left join 720 thread as A 721 on 722 A.id = B.itid 723 left join 724 trace_range AS TR 725 left join 726 process AS IP 727 on 728 IP.id=A.ipid 729 where 730 A.tid in (${tIds.join(",")}) 731 and 732 not ((B.ts - TR.start_ts + ifnull(B.dur,0) < $leftNS) or (B.ts - TR.start_ts > $rightNS)) 733 group by 734 IP.name, IP.pid, A.name, A.tid, B.state 735 order by 736 wallDuration desc;`, {$leftNS: leftNS, $rightNS: rightNS}) 737 738export const queryBinderArgsByArgset = (argset: number): Promise<Array<BinderArgBean>> => 739 query("queryBinderArgsByArgset", ` 740 select 741 * 742 from 743 args_view 744 where 745 argset = $argset;`, {$argset: argset}) 746 747export const queryCpuData = (cpu: number, startNS: number, endNS: number): Promise<Array<CpuStruct>> => 748 query("queryCpuData", ` 749 SELECT 750 IP.name as processName, 751 IP.name processCmdLine, 752 IP.pid as processId, 753 B.cpu, 754 A.name, 755 C.id as schedId, 756 A.tid, 757 A.id, 758 A.type, 759 B.dur, 760 B.ts - TR.start_ts AS startTime, 761 C.priority, 762 C.end_state 763from thread_state AS B 764 left join thread as A on B.itid = A.id 765 left join sched_slice AS C on B.itid = C.itid and B.ts = C.ts 766 left join trace_range AS TR 767 left join process AS IP on A.ipid = IP.id 768where C.itid is not null 769 and 770 B.cpu = $cpu 771 and 772 startTime between $startNS and $endNS;`, { 773 $cpu: cpu, 774 $startNS: startNS, 775 $endNS: endNS 776 }) 777 778export const queryCpuFreq = (): Promise<Array<{ cpu: number,filterId:number }>> => 779 query("queryCpuFreq", ` 780 select 781 cpu,id as filterId 782 from 783 cpu_measure_filter 784 where 785 (name='cpufreq' or name='cpu_frequency') 786 order by cpu; 787 `) 788 789export const queryCpuFreqData = (cpu: number): Promise<Array<CpuFreqStruct>> => 790 query<CpuFreqStruct>("queryCpuFreqData", ` 791 select 792 cpu, 793 value, 794 ts-tb.start_ts as startNS 795 from 796 measure c, 797 trace_range tb 798 inner join 799 cpu_measure_filter t 800 on 801 c.filter_id = t.id 802 where 803 (name = 'cpufreq' or name='cpu_frequency') 804 and 805 cpu= $cpu 806 --order by ts; 807 `, {$cpu: cpu},); 808 809export const queryCpuMax = (): Promise<Array<any>> => 810 query("queryCpuMax", ` 811 select 812 cpu 813 from 814 sched_slice 815 order by 816 cpu 817 desc limit 1;`) 818 819export const queryCpuStateFilter = ():Promise<Array<any>> => 820 query("queryCpuStateFilter",`select cpu,id as filterId from cpu_measure_filter where name = 'cpu_idle' order by cpu;`,{}) 821 822export const queryCpuState = (cpuFilterId:number) :Promise<Array<any>> => 823 query('queryCpuState',` 824 select (A.ts - B.start_ts) as startTs, 825 value 826 from measure A,trace_range B 827 where filter_id = $filterId;`,{$filterId:cpuFilterId},"exec-buf") 828 829export const queryCpuMaxFreq = (): Promise<Array<any>> => 830 query("queryCpuMaxFreq", ` 831 select 832 max(value) as maxFreq 833 from 834 measure c 835 inner join 836 cpu_measure_filter t 837 on 838 c.filter_id = t.id 839 where 840 (name = 'cpufreq' or name='cpu_frequency');`) 841 842export const queryProcessData = (pid:number,startNS:number,endNS:number):Promise<Array<any>> => 843 query("queryProcessData",` 844 select ta.cpu, 845 dur, 846 ts-${(window as any).recordStartNS} as startTime 847from thread_state ta 848where ta.cpu is not null and pid=$pid and startTime between $startNS and $endNS;`, { 849 $pid: pid, 850 $startNS: startNS, 851 $endNS: endNS 852 }); 853 854export const queryProcessMem = (): Promise<Array<any>> => 855 query("queryProcessMem", ` 856 select 857 process_measure_filter.id as trackId, 858 process_measure_filter.name as trackName, 859 ipid as upid, 860 process.pid, 861 process.name as processName 862 from 863 process_measure_filter 864 join 865 process using (ipid) 866 order by trackName;`) 867 868export const queryProcessThreadDataCount = ():Promise<Array<any>> => 869 query(`queryProcessThreadDataCount`,`select pid,count(id) as count 870 from thread_state 871 where ts between ${(window as any).recordStartNS} and ${(window as any).recordEndNS} group by pid;`,{}); 872 873export const queryProcessFuncDataCount = ():Promise<Array<any>> => 874 query(`queryProcessFuncDataCount`,`select 875 P.pid, 876 count(tid) as count 877 from callstack C 878 left join thread A on A.id = C.callid 879 left join process AS P on P.id = A.ipid 880 where C.ts between ${(window as any).recordStartNS} and ${(window as any).recordEndNS} 881 group by pid;`,{}); 882 883export const queryProcessMemDataCount = ():Promise<Array<any>> => 884 query(`queryProcessMemDataCount`,`select 885 p.pid as pid, count(value) count 886 from process_measure c 887 left join process_measure_filter f on f.id = c.filter_id 888 left join process p on p.ipid = f.ipid 889where f.id not NULL and value>0 890 and c.ts between ${(window as any).recordStartNS} and ${(window as any).recordEndNS} 891group by p.pid`,{}); 892 893export const queryProcessMemData = (trackId: number): Promise<Array<ProcessMemStruct>> => 894 query("queryProcessMemData", ` 895 select 896 c.type, 897 ts, 898 value, 899 filter_id as track_id, 900 c.ts-tb.start_ts startTime 901 from 902 process_measure c, 903 trace_range tb 904 where 905 filter_id = $id;`, {$id: trackId}) 906 907export const queryDataDICT = (): Promise<Array<any>> => 908 query("queryDataDICT", `select * from data_dict;`) 909export const queryProcessContentCount = ():Promise<Array<any>> => 910 query(`queryProcessContentCount`,`select pid,swtich_count as switch_count,thread_count,slice_count,mem_count from process;`); 911export const queryProcessThreadsByTable = (): Promise<Array<ThreadStruct>> => 912 query("queryProcessThreadsByTable", ` 913 select p.pid as pid,t.tid as tid,p.name as processName,t.name as threadName from thread t left join process p on t.ipid = p.id where t.tid != 0; 914 `) 915export const queryVirtualMemory = ():Promise<Array<any>> => 916 query("queryVirtualMemory",`select id,name from sys_event_filter where type='sys_virtual_memory_filter'`); 917export const queryVirtualMemoryData = (filterId:number):Promise<Array<any>> => 918 query("queryVirtualMemoryData",`select ts-${(window as any).recordStartNS} as startTime,value,filter_id as filterID from sys_mem_measure where filter_id=$filter_id`,{$filter_id:filterId}); 919export const queryProcessThreads = (): Promise<Array<ThreadStruct>> => 920 query("queryProcessThreads", ` 921 select 922 the_tracks.ipid as upid, 923 the_tracks.itid as utid, 924 total_dur as hasSched, 925 process.pid as pid, 926 thread.tid as tid, 927 process.name as processName, 928 thread.name as threadName 929 from ( 930 select ipid,itid from sched_slice group by itid 931 ) the_tracks 932 left join (select itid,sum(dur) as total_dur from thread_state where state != 'S' group by itid) using(itid) 933 left join thread using(itid) 934 left join process using(ipid) 935 order by total_dur desc,the_tracks.ipid,the_tracks.itid;`, {}) 936 937export const queryThreadData = (tid: number): Promise<Array<ThreadStruct>> => 938 query("queryThreadData", ` 939 select 940 A.id 941 , B.tid 942 , A.name 943 , B.cpu 944 , B.ts - TR.start_ts AS startTime 945 , B.dur 946 , B.state 947 , B.pid 948 , IP.name as processName 949from thread_state AS B 950 left join thread as A on A.id = B.itid 951 left join trace_range AS TR 952 left join process AS IP on IP.id = A.ipid 953where B.tid = $tid;`, {$tid: tid}) 954 955export const queryWakeUpThread_Desc = (): Promise<Array<any>> => 956 query("queryWakeUpThread_Desc", `This is the interval from when the task became eligible to run 957(e.g.because of notifying a wait queue it was a suspended on) to when it started running.`) 958 959/*-------------------------------------------------------------------------------------*/ 960export const queryWakeUpFromThread_WakeThread = (wakets: number): Promise<Array<WakeupBean>> => 961 query("queryWakeUpFromThread_WakeThread", `select TB.tid,TB.name as thread,TA.cpu,(TA.ts - TR.start_ts) as ts,TC.pid,TC.name as process 962from sched_slice TA 963left join thread TB on TA.itid = TB.id 964left join process TC on TB.ipid = TC.id 965left join trace_range TR 966where TA.itid = (select itid from raw where name = 'sched_waking' and ts = $wakets ) 967 and TA.ts < $wakets 968 and TA.ts + Ta.dur >= $wakets`, {$wakets: wakets}) 969 970/*-------------------------------------------------------------------------------------*/ 971export const queryWakeUpFromThread_WakeTime = (itid: number, startTime: number): Promise<Array<WakeUpTimeBean>> => 972 query("queryWakeUpFromThread_WakeTime", `select * from 973 ( select ts as wakeTs,start_ts as startTs from instant,trace_range 974 where name = 'sched_waking' 975 and ref = $itid 976 and ts < start_ts + $startTime 977 order by ts desc limit 1) TA 978 left join 979 (select ts as preRow from sched_slice,trace_range 980 where itid = $itid 981 and ts < start_ts + $startTime 982 order by ts desc limit 1) TB`, {$itid: itid, $startTime: startTime}) 983/*-------------------------------------------------------------------------------------*/ 984 985export const queryThreadWakeUp = (itid: number, startTime: number,dur:number): Promise<Array<WakeupBean>> => 986 query("queryThreadWakeUp", ` 987select TA.tid,min(TA.ts - TR.start_ts) as ts,TA.pid 988from 989 (select min(ts) as wakeTs,ref as itid from instant,trace_range 990 where name = 'sched_wakeup' 991 and wakeup_from = $itid 992 and ts > start_ts + $startTime 993 and ts < start_ts + $startTime + $dur 994 group by ref 995 ) TW 996left join thread_state TA on TW.itid = TA.itid 997left join trace_range TR 998where TA.ts > TW.wakeTs 999group by TA.tid,TA.pid; 1000 `, {$itid: itid, $startTime: startTime,$dur:dur}) 1001 1002export const queryThreadWakeUpFrom = (itid: number, startTime: number,dur:number): Promise<Array<WakeupBean>> => 1003 query("queryThreadWakeUpFrom", ` 1004select TA.tid,TA.cpu,(TA.ts - TR.start_ts) as ts,TA.pid 1005from 1006 (select ts as wakeTs,wakeup_from as wakeupFromTid from instant,trace_range 1007 where name = 'sched_wakeup' 1008 and ref = $itid 1009 and ts > start_ts + $startTime 1010 and ts < start_ts + $startTime + $dur) TW 1011left join thread_state TA on TW.wakeupFromTid = TA.itid 1012left join trace_range TR 1013where TA.ts < TW.wakeTs and TA.ts + TA.dur >= TW.wakeTs 1014limit 1; 1015 `, {$itid: itid, $startTime: startTime,$dur:dur}) 1016/*-------------------------------------------------------------------------------------*/ 1017 1018export const queryHeapGroupByEvent = (): Promise<Array<NativeEventHeap>> => 1019 query("queryHeapGroupByEvent", ` 1020 select 1021 event_type as eventType, 1022 sum(heap_size) as sumHeapSize 1023 from 1024 native_hook 1025 where event_type = 'AllocEvent' or event_type = 'MmapEvent' 1026 group by event_type`, {}) 1027 1028export const queryAllHeapByEvent = (): Promise<Array<NativeEvent>> => 1029 query("queryAllHeapByEvent", ` 1030 select * from ( 1031 select h.start_ts - t.start_ts as startTime, 1032 h.heap_size as heapSize, 1033 h.event_type as eventType 1034from native_hook h ,trace_range t 1035where h.start_ts >= t.start_ts and h.start_ts <= t.end_ts 1036and (h.event_type = 'AllocEvent' or h.event_type = 'MmapEvent') 1037union 1038select h.end_ts - t.start_ts as startTime, 1039 h.heap_size as heapSize, 1040 (case when h.event_type = 'AllocEvent' then 'FreeEvent' else 'MunmapEvent' end) as eventType 1041from native_hook h ,trace_range t 1042where h.start_ts >= t.start_ts and h.start_ts <= t.end_ts 1043and (h.event_type = 'AllocEvent' or h.event_type = 'MmapEvent') 1044and h.end_ts not null ) order by startTime; 1045`, {}) 1046 1047export const queryHeapAllData = (startTs: number, endTs: number, ipids: Array<number>): Promise<Array<HeapTreeDataBean>> => 1048 query("queryHeapAllData", ` 1049 select 1050 h.start_ts - t.start_ts as startTs, 1051 h.end_ts - t.start_ts as endTs, 1052 h.heap_size as heapSize, 1053 h.event_type as eventType, 1054 h.callchain_id as eventId 1055 from 1056 native_hook h 1057 inner join 1058 trace_range t 1059 where 1060 event_type = 'AllocEvent' 1061 and 1062 ipid in (${ipids.join(",")}) 1063 and 1064 (h.start_ts - t.start_ts between ${startTs} and ${endTs} or h.end_ts - t.start_ts between ${startTs} and ${endTs})`, 1065 {ipids: ipids, $startTs: startTs, $endTs: endTs}) 1066 1067export const queryNativeHookStatistics = (leftNs: number, rightNs: number): Promise<Array<NativeHookMalloc>> => 1068 query("queryNativeHookStatistics", ` 1069 select 1070 event_type as eventType, 1071 sub_type_id as subTypeId, 1072 max(heap_size) as max, 1073 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then heap_size else 0 end) as allocByte, 1074 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then 1 else 0 end) as allocCount, 1075 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then heap_size else 0 end) as freeByte, 1076 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then 1 else 0 end) as freeCount 1077 from 1078 native_hook A, 1079 trace_range B 1080 where 1081 (A.start_ts - B.start_ts) between ${leftNs} and ${rightNs} 1082 and (event_type = 'AllocEvent' or event_type = 'MmapEvent') 1083 group by event_type;`, {$leftNs: leftNs, $rightNs: rightNs}) 1084 1085export const queryNativeHookStatisticsMalloc = (leftNs: number, rightNs: number): Promise<Array<NativeHookMalloc>> => 1086 query('queryNativeHookStatisticsMalloc', ` 1087 select 1088 event_type as eventType, 1089 heap_size as heapSize, 1090 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then heap_size else 0 end) as allocByte, 1091 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then 1 else 0 end) as allocCount, 1092 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then heap_size else 0 end) as freeByte, 1093 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then 1 else 0 end) as freeCount 1094 from 1095 native_hook A, 1096 trace_range B 1097 where 1098 (A.start_ts - B.start_ts) between ${leftNs} and ${rightNs} 1099 and 1100 (event_type = 'AllocEvent' or event_type = 'MmapEvent') 1101 and 1102 sub_type_id is null 1103 group by 1104 event_type, 1105 heap_size 1106 order by heap_size desc 1107 `, {$leftNs: leftNs, $rightNs: rightNs}) 1108 1109export const queryNativeHookStatisticsSubType = (leftNs: number, rightNs: number): Promise<Array<NativeHookMalloc>> => 1110 query('queryNativeHookStatisticsSubType', ` 1111 select 1112 event_type as eventType, 1113 sub_type_id as subTypeId, 1114 max(heap_size) as max, 1115 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then heap_size else 0 end) as allocByte, 1116 sum(case when ((A.start_ts - B.start_ts) between ${leftNs} and ${rightNs}) then 1 else 0 end) as allocCount, 1117 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then heap_size else 0 end) as freeByte, 1118 sum(case when ((A.end_ts - B.start_ts) between ${leftNs} and ${rightNs} ) then 1 else 0 end) as freeCount 1119 from 1120 native_hook A, 1121 trace_range B 1122 where 1123 (A.start_ts - B.start_ts) between ${leftNs} and ${rightNs} 1124 and 1125 (event_type = 'MmapEvent') 1126 group by 1127 event_type,sub_type_id; 1128 `, {$leftNs: leftNs, $rightNs: rightNs}) 1129 1130 1131export const queryNativeHookEventTid = (leftNs: number, rightNs: number, types: Array<string>): Promise<Array<NativeHookStatistics>> => 1132 query("queryNativeHookEventTid", ` 1133 select 1134 callchain_id as eventId, 1135 event_type as eventType, 1136 heap_size as heapSize, 1137 addr, 1138 (A.start_ts - B.start_ts) as startTs, 1139 (A.end_ts - B.start_ts) as endTs, 1140 tid, 1141 t.name as threadName 1142 from 1143 native_hook A, 1144 trace_range B 1145 left join 1146 thread t 1147 on 1148 A.itid = t.id 1149 where 1150 A.start_ts - B.start_ts 1151 between ${leftNs} and ${rightNs} and A.event_type in (${types.join(",")})` 1152 , {$leftNs: leftNs, $rightNs: rightNs, $types: types}) 1153 1154export const queryNativeHookProcess = (): Promise<Array<NativeHookProcess>> => 1155 query("queryNativeHookProcess", ` 1156 select 1157 distinct native_hook.ipid, 1158 pid, 1159 name 1160 from 1161 native_hook 1162 left join 1163 process p 1164 on 1165 native_hook.ipid = p.id`, {}) 1166 1167export const queryNativeHookSnapshotTypes = (): Promise<Array<NativeHookSampleQueryInfo>> => 1168 query("queryNativeHookSnapshotTypes", ` 1169select 1170 event_type as eventType, 1171 data as subType 1172 from 1173 native_hook left join data_dict on native_hook.sub_type_id = data_dict.id 1174 where 1175 (event_type = 'AllocEvent' or event_type = 'MmapEvent') 1176 group by 1177 event_type,data;`, {}) 1178 1179export const queryAllHookData = (rightNs: number): Promise<Array<NativeHookSampleQueryInfo>> => 1180 query("queryAllHookData", ` 1181 select 1182 callchain_id as eventId, 1183 event_type as eventType, 1184 data as subType, 1185 addr, 1186 heap_size as growth, 1187 (n.start_ts - t.start_ts) as startTs, 1188 (n.end_ts - t.start_ts) as endTs 1189 from 1190 native_hook n left join data_dict on n.sub_type_id = data_dict.id, 1191 trace_range t 1192 where 1193 (event_type = 'AllocEvent' or event_type = 'MmapEvent') 1194 and 1195 n.start_ts between t.start_ts and ${rightNs} + t.start_ts`, {$rightNs: rightNs}) 1196 1197 1198/** 1199 * HiPerf 1200 */ 1201export const queryHiPerfEventList = (): Promise<Array<any>> => query("queryHiPerfEventList", `select id,report_value from perf_report where report_type='config_name'`, {},"exec-buf") 1202export const queryHiPerfEventListData = (eventTypeId:number): Promise<Array<any>> => query("queryHiPerfEventListData", ` 1203 select s.*,(s.timestamp_trace-t.start_ts) startNS from perf_sample s,trace_range t where event_type_id=${eventTypeId} and s.thread_id != 0; 1204`, {$eventTypeId:eventTypeId},"exec-buf") 1205export const queryHiPerfEventData = (eventTypeId:number,cpu:number): Promise<Array<any>> => query("queryHiPerfEventList", ` 1206 select s.*,(s.timestamp_trace-t.start_ts) startNS from perf_sample s,trace_range t where event_type_id=${eventTypeId} and cpu_id=${cpu} and s.thread_id != 0; 1207`, {$eventTypeId:eventTypeId,$cpu:cpu},"exec-buf") 1208export const queryHiPerfCpuData = (cpu: number): Promise<Array<any>> => 1209 query("queryHiPerfCpuData", `select s.*,(s.timestamp_trace-t.start_ts) startNS from perf_sample s,trace_range t where cpu_id=${cpu} and s.thread_id != 0;`, {$cpu: cpu},"exec-buf") 1210export const queryHiPerfCpuMergeData = (): Promise<Array<any>> => 1211 query("queryHiPerfCpuData", `select s.*,(s.timestamp_trace-t.start_ts) startNS from perf_sample s,trace_range t where s.thread_id != 0;`, {},"exec-buf") 1212export const queryHiPerfCpuMergeData2 = (): Promise<Array<any>> => 1213 query("queryHiPerfCpuData2", `select s.*,(s.timestamp_trace-t.start_ts) startNS from perf_sample s,trace_range t where s.thread_id != 0;`, {}) 1214 1215export const queryHiPerfProcessData = (pid: number): Promise<Array<any>> => query("queryHiPerfProcessData", `SELECT sp.*, 1216 th.thread_name, 1217 th.thread_id tid, 1218 th.process_id pid, 1219 sp.timestamp_trace - tr.start_ts startNS 1220from perf_sample sp, 1221 trace_range tr 1222 left join perf_thread th on th.thread_id = sp.thread_id 1223where pid = ${pid} and sp.thread_id != 0;;`, {$pid: pid},"exec-buf") 1224 1225export const queryHiPerfThreadData = (tid: number): Promise<Array<any>> => query("queryHiPerfThreadData", `SELECT sp.*, 1226 th.thread_name, 1227 th.thread_id tid, 1228 th.process_id pid, 1229 sp.timestamp_trace - tr.start_ts startNS 1230from perf_sample sp, 1231 trace_range tr 1232 left join perf_thread th on th.thread_id = sp.thread_id 1233where tid = ${tid} and sp.thread_id != 0;`, {$tid: tid},"exec-buf") 1234 1235export const querySelectTraceStats = (): Promise<Array<{ 1236 event_name: string 1237 stat_type: string 1238 count: number 1239 source: string 1240 serverity: string 1241}>> => 1242 query('querySelectTraceStats', 'select event_name,stat_type,count,source,serverity from stat'); 1243 1244export const queryCustomizeSelect = (sql: string): Promise<Array<any>> => 1245 query('queryCustomizeSelect', sql); 1246 1247export const queryDistributedTerm = (): Promise<Array<{ 1248 threadId: string 1249 threadName: string 1250 processId: string 1251 processName: string 1252 funName: string 1253 dur: string 1254 ts: string 1255 chainId: string 1256 spanId: string 1257 parentSpanId: string 1258 flag: string 1259 trace_name: string 1260}>> => 1261 query('queryDistributedTerm', ` 1262 select 1263 group_concat(thread.id,',') as threadId, 1264 group_concat(thread.name,',') as threadName, 1265 group_concat(process.id,',') as processId, 1266 group_concat(process.name,',') as processName, 1267 group_concat(callstack.name,',') as funName, 1268 group_concat(callstack.dur,',') as dur, 1269 group_concat(callstack.ts,',') as ts, 1270 cast(callstack.chainId as varchar) as chainId, 1271 callstack.spanId as spanId, 1272 callstack.parentSpanId as parentSpanId, 1273 group_concat(callstack.flag,',') as flag, 1274 (select 1275 value 1276 from 1277 meta 1278 where 1279 name='source_name') as trace_name 1280 from 1281 callstack 1282 inner join thread on callstack.callid = thread.id 1283 inner join process on process.id = thread.ipid 1284 where (callstack.flag='S' or callstack.flag='C') 1285 group by callstack.chainId,callstack.spanId,callstack.parentSpanId`); 1286 1287export const queryTraceCpu = (): Promise<Array<{ 1288 tid: string 1289 pid: string 1290 cpu: string 1291 dur: string 1292 min_freq: string 1293 max_freq: string 1294 avg_frequency: string 1295}>> => 1296 query('queryTraceCpu', `SELECT 1297 itid AS tid, 1298 ipid AS pid, 1299 group_concat(cpu, ',') AS cpu, 1300 group_concat(dur, ',') AS dur, 1301 group_concat(min_freq, ',') AS min_freq, 1302 group_concat(max_freq, ',') AS max_freq, 1303 group_concat(avg_frequency, ',') AS avg_frequency 1304 FROM 1305 (SELECT 1306 itid, 1307 ipid, 1308 cpu, 1309 CAST (SUM(dur) AS INT) AS dur, 1310 CAST (MIN(freq) AS INT) AS min_freq, 1311 CAST (MAX(freq) AS INT) AS max_freq, 1312 CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 1313 from 1314 result 1315 group by 1316 itid, cpu 1317 ) 1318 GROUP BY 1319 ipid, itid 1320 ORDER BY 1321 ipid 1322 `); 1323 1324export const queryTraceCpuTop = (): Promise<Array<{ 1325 tid: string 1326 pid: string 1327 cpu: string 1328 duration: string 1329 min_freq: string 1330 max_freq: string 1331 avg_frequency: string 1332 sumNum: string 1333}>> => 1334 query('queryTraceCpuTop', `SELECT 1335 itid AS tid, 1336 ipid AS pid, 1337 group_concat(cpu, ',') AS cpu, 1338 group_concat(dur, ',') AS dur, 1339 group_concat(min_freq, ',') AS min_freq, 1340 group_concat(max_freq, ',') AS max_freq, 1341 group_concat(avg_frequency, ',') AS avg_frequency, 1342 sum(dur * avg_frequency) AS sumNum 1343 FROM 1344 (SELECT 1345 itid, 1346 ipid, 1347 cpu, 1348 CAST (SUM(dur) AS INT) AS dur, 1349 CAST (MIN(freq) AS INT) AS min_freq, 1350 CAST (MAX(freq) AS INT) AS max_freq, 1351 CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 1352 from result group by itid, cpu 1353 ) 1354 GROUP BY 1355 ipid, itid 1356 ORDER BY 1357 sumNum 1358 DESC 1359 LIMIT 10; 1360 `); 1361 1362export const queryTraceMemory = (): Promise<Array<{ 1363 maxNum: string 1364 minNum: string 1365 avgNum: string 1366 name: string 1367 processName: string 1368}>> => 1369 query('queryTraceMemory', ` 1370 select 1371 max(value) as maxNum, 1372 min(value) as minNum, 1373 avg(value) as avgNum, 1374 filter.name as name, 1375 p.name as processName 1376 from process_measure 1377 left join process_measure_filter as filter on filter.id= filter_id 1378 left join process as p on p.id = filter.ipid 1379 where 1380 filter_id > 0 1381 and 1382 filter.name = 'mem.rss.anon' 1383 group by 1384 filter_id 1385 order by 1386 avgNum desc`); 1387 1388export const queryTraceMemoryTop = (): Promise<Array<{ 1389 maxNum: string 1390 minNum: string 1391 avgNum: string 1392 name: string 1393 processName: string 1394}>> => 1395 query('queryTraceMemoryTop', ` 1396 select 1397 max(value) as maxNum, 1398 min(value) as minNum, 1399 avg(value) as avgNum, 1400 filter.name as name, 1401 p.name as processName 1402 from process_measure 1403 left join process_measure_filter as filter on filter.id= filter_id 1404 left join process as p on p.id = filter.ipid 1405 where 1406 filter_id > 0 1407 and 1408 filter.name = 'mem.rss.anon' 1409 group by 1410 filter_id 1411 order by 1412 avgNum desc limit 10`); 1413 1414export const queryTraceMemoryUnAgg = (): Promise<Array<{ 1415 processName: string 1416 name: string 1417 value: string 1418 ts: string 1419}>> => 1420 query('queryTraceMemoryUnAgg', ` 1421 select 1422 p.name as processName, 1423 group_concat(filter.name) as name, 1424 cast(group_concat(value) as varchar) as value, 1425 cast(group_concat(ts) as varchar) as ts 1426 from process_measure m 1427 left join process_measure_filter as filter on filter.id= m.filter_id 1428 left join process as p on p.id = filter.ipid 1429 where 1430 filter.name = 'mem.rss.anon' 1431 or 1432 filter.name = 'mem.rss.file' 1433 or 1434 filter.name = 'mem.swap' 1435 or 1436 filter.name = 'oom_score_adj' 1437 group by 1438 p.name,filter.ipid 1439 order by 1440 filter.ipid`); 1441 1442export const queryTraceTaskName = (): Promise<Array<{ 1443 id: string 1444 pid: string 1445 process_name: string 1446 thread_name: string 1447}>> => 1448 query('queryTraceTaskName', ` 1449 select 1450 P.id as id, 1451 P.pid as pid, 1452 P.name as process_name, 1453 group_concat(T.name,',') as thread_name 1454 from process as P left join thread as T where P.id = T.ipid 1455 group by pid`); 1456 1457export const queryTraceMetaData = (): Promise<Array<{ 1458 name: string 1459 valueText: string 1460}>> => 1461 query('queryTraceMetaData', ` 1462 select 1463 cast(name as varchar) as name, 1464 cast(value as varchar) as valueText 1465 from meta 1466 UNION 1467 select 'start_ts',cast(start_ts as varchar) from trace_range 1468 UNION 1469 select 'end_ts',cast(end_ts as varchar) from trace_range`); 1470 1471export const querySystemCalls = (): Promise<Array<{ 1472 frequency: string 1473 minDur: string 1474 maxDur: string 1475 avgDur: string 1476 funName: string 1477}>> => 1478 query('querySystemCalls', ` 1479 select 1480 count(*) as frequency, 1481 min(dur) as minDur, 1482 max(dur) as maxDur, 1483 avg(dur) as avgDur, 1484 name as funName 1485 from 1486 callstack 1487 group by name 1488 order by 1489 frequency desc limit 100`); 1490 1491export const querySystemCallsTop = (): Promise<Array<{ 1492 tid: string 1493 pid: string 1494 funName: string 1495 frequency: string 1496 minDur: string 1497 maxDur: string 1498 avgDur: string 1499}>> => 1500 query('querySystemCallsTop', `SELECT 1501 cpu.tid AS tid, 1502 cpu.pid AS pid, 1503 callstack.name AS funName, 1504 count(callstack.name) AS frequency, 1505 min(callstack.dur) AS minDur, 1506 max(callstack.dur) AS maxDur, 1507 round(avg(callstack.dur)) AS avgDur 1508 FROM 1509 callstack 1510 INNER JOIN 1511 (SELECT 1512 itid AS tid, 1513 ipid AS pid, 1514 group_concat(cpu, ',') AS cpu, 1515 group_concat(dur, ',') AS dur, 1516 group_concat(min_freq, ',') AS min_freq, 1517 group_concat(max_freq, ',') AS max_freq, 1518 group_concat(avg_frequency, ',') AS avg_frequency, 1519 sum(dur * avg_frequency) AS sumNum 1520 FROM 1521 (SELECT 1522 itid, 1523 ipid, 1524 cpu, 1525 CAST (SUM(dur) AS INT) AS dur, 1526 CAST (MIN(freq) AS INT) AS min_freq, 1527 CAST (MAX(freq) AS INT) AS max_freq, 1528 CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 1529 FROM 1530 result 1531 GROUP BY 1532 itid, cpu 1533 ) 1534 GROUP BY 1535 ipid, itid 1536 ORDER BY 1537 sumNum 1538 DESC 1539 LIMIT 10 1540 ) AS cpu 1541 ON 1542 callstack.callid = cpu.tid 1543 GROUP BY 1544 callstack.name 1545 ORDER BY 1546 frequency 1547 DESC 1548 LIMIT 10`); 1549 1550export const getTabLiveProcessData = (leftNs: number, rightNs: number): Promise<Array<LiveProcess>> => 1551 query<LiveProcess>("getTabLiveProcessData", `SELECT 1552 process.id as processId, 1553 process.name as processName, 1554 process.ppid as responsibleProcess, 1555 process.uud as userName, 1556 process.usag as cpu, 1557 process.threadN as threads, 1558 process.pss as memory, 1559 process.cpu_time as cpuTime, 1560 process.disk_reads as diskReads, 1561 process.disk_writes as diskWrite 1562 FROM 1563 ( 1564 SELECT 1565 tt.process_id AS id, 1566 tt.process_name AS name, 1567 tt.parent_process_id AS ppid, 1568 tt.uid as uud, 1569 tt.cpu_usage as usag, 1570 tt.thread_num AS threadN, 1571 mt.maxTT - TR.start_ts as endTs, 1572 tt.pss_info as pss, 1573 tt.cpu_time, 1574 tt.disk_reads, 1575 tt.disk_writes 1576 FROM 1577 live_process tt 1578 LEFT JOIN trace_range AS TR 1579 LEFT JOIN (select re.process_id as idd, max(re.ts) as maxTT, min(re.ts) as minTT 1580 from live_process re GROUP BY re.process_name, re.process_id ) mt 1581 on mt.idd = tt.process_id where endTs >= $rightNS 1582 GROUP BY 1583 tt.process_name, 1584 tt.process_id 1585 ) process ;`, {$leftNS: leftNs, $rightNS: rightNs}) 1586 1587export const getTabProcessHistoryData = (leftNs: number, rightNs: number, 1588 processId: number | undefined, threadId: number | undefined): Promise<Array<ProcessHistory>> => 1589 query<ProcessHistory>("getTabProcessHistoryData", `SELECT 1590 process.id as processId, 1591 process.isD as alive, 1592 process.startTS as firstSeen, 1593 process.endTs as lastSeen, 1594 process.name as processName, 1595 process.ppid as responsibleProcess, 1596 process.uuid as userName, 1597 process.cpu_time as cpuTime, 1598 0 as pss 1599 FROM 1600 ( 1601 SELECT 1602 tt.process_id AS id, 1603 tt.process_name AS name, 1604 tt.parent_process_id AS ppid, 1605 tt.uid AS uuid, 1606 tt.cpu_time, 1607 (mt.minTT - TR.start_ts ) AS startTS, 1608 mt.maxTT - TR.start_ts as endTs, 1609 (mt.maxTT - TR.start_ts - $rightNS) > 0 as isD 1610 FROM 1611 live_process tt 1612 LEFT JOIN trace_range AS TR 1613 LEFT JOIN (select re.process_id as idd, max(re.ts) as maxTT, min(re.ts) as minTT 1614 from live_process re GROUP BY re.process_name, re.process_id ) mt 1615 on mt.idd = tt.process_id 1616 GROUP BY 1617 tt.process_name, 1618 tt.process_id 1619 ) process;` 1620 , {$leftNS: leftNs, $rightNS: rightNs, $processID: processId, $threadID: threadId}) 1621 1622export const getTabCpuAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemCpuSummary>> => 1623 query<SystemCpuSummary>("getTabCpuAbilityData", `SELECT 1624 ( n.ts - TR.start_ts ) AS startTime, 1625 n.dur AS duration, 1626 n.total_load AS totalLoad, 1627 n.user_load AS userLoad, 1628 n.system_load AS systemLoad, 1629 n.process_num AS threads 1630 FROM 1631 cpu_usage AS n, 1632 trace_range AS TR 1633 WHERE 1634 ( n.ts - TR.start_ts ) >= ifnull(( 1635 SELECT 1636 ( usage.ts - TR.start_ts ) 1637 FROM 1638 cpu_usage usage, 1639 trace_range TR 1640 WHERE 1641 ( usage.ts - TR.start_ts ) <= $leftNS 1642 ORDER BY 1643 usage.ts DESC 1644 LIMIT 1 1645 ),0) 1646 AND ( n.ts - TR.start_ts ) <= $rightNS 1647 ORDER BY 1648 startTime ASC; 1649 `, {$leftNS: leftNs, $rightNS: rightNs}) 1650 1651export const getTabMemoryAbilityData = (leftNs: number, rightNs: number): Promise<Array<{ 1652 startTime: number, 1653 value: string, 1654 name: string; 1655}>> => 1656 query("getTabMemoryAbilityData", `SELECT 1657 m.ts AS startTime, 1658 GROUP_CONCAT( IFNULL( m.value, 0 ) ) AS value, 1659 GROUP_CONCAT( f.name ) AS name 1660 FROM 1661 sys_mem_measure AS m 1662 INNER JOIN sys_event_filter AS f ON m.filter_id = f.id 1663 AND (f.name = 'sys.mem.total' 1664 or f.name = 'sys.mem.free' 1665 or f.name = 'sys.mem.buffers' 1666 or f.name = 'sys.mem.cached' 1667 or f.name = 'sys.mem.shmem' 1668 or f.name = 'sys.mem.slab' 1669 or f.name = 'sys.mem.swap.total' 1670 or f.name = 'sys.mem.swap.free' 1671 or f.name = 'sys.mem.mapped' 1672 or f.name = 'sys.mem.vmalloc.used' 1673 or f.name = 'sys.mem.page.tables' 1674 or f.name = 'sys.mem.kernel.stack' 1675 or f.name = 'sys.mem.active' 1676 or f.name = 'sys.mem.inactive' 1677 or f.name = 'sys.mem.unevictable' 1678 or f.name = 'sys.mem.vmalloc.total' 1679 or f.name = 'sys.mem.slab.unreclaimable' 1680 or f.name = 'sys.mem.cma.total' 1681 or f.name = 'sys.mem.cma.free' 1682 or f.name = 'sys.mem.kernel.reclaimable' 1683 or f.name = 'sys.mem.zram' 1684 ) 1685 AND m.ts >= ifnull(( 1686 SELECT 1687 m.ts AS startTime 1688 FROM 1689 sys_mem_measure AS m 1690 INNER JOIN sys_event_filter AS f ON m.filter_id = f.id 1691 AND m.ts <= $leftNS 1692 AND (f.name = 'sys.mem.total' 1693 or f.name = 'sys.mem.free' 1694 or f.name = 'sys.mem.buffers' 1695 or f.name = 'sys.mem.cached' 1696 or f.name = 'sys.mem.shmem' 1697 or f.name = 'sys.mem.slab' 1698 or f.name = 'sys.mem.swap.total' 1699 or f.name = 'sys.mem.swap.free' 1700 or f.name = 'sys.mem.mapped' 1701 or f.name = 'sys.mem.vmalloc.used' 1702 or f.name = 'sys.mem.page.tables' 1703 or f.name = 'sys.mem.kernel.stack' 1704 or f.name = 'sys.mem.active' 1705 or f.name = 'sys.mem.inactive' 1706 or f.name = 'sys.mem.unevictable' 1707 or f.name = 'sys.mem.vmalloc.total' 1708 or f.name = 'sys.mem.slab.unreclaimable' 1709 or f.name = 'sys.mem.cma.total' 1710 or f.name = 'sys.mem.cma.free' 1711 or f.name = 'sys.mem.kernel.reclaimable' 1712 or f.name = 'sys.mem.zram' 1713 ) 1714 ORDER BY 1715 m.ts DESC 1716 LIMIT 1 1717 ),0) 1718 AND m.ts <= $rightNS GROUP BY m.ts;`, {$leftNS: leftNs, $rightNS: rightNs}) 1719 1720export const getTabNetworkAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemNetworkSummary>> => 1721 query<SystemNetworkSummary>("getTabNetworkAbilityData", `SELECT 1722 ( n.ts - TR.start_ts ) AS startTime, 1723 n.dur AS duration, 1724 n.rx AS dataReceived, 1725 n.tx_speed AS dataReceivedSec, 1726 n.tx AS dataSend, 1727 n.rx_speed AS dataSendSec, 1728 n.packet_in AS packetsIn, 1729 n.packet_in_sec AS packetsInSec, 1730 n.packet_out AS packetsOut, 1731 n.packet_out_sec AS packetsOutSec 1732 FROM 1733 network AS n, 1734 trace_range AS TR 1735 WHERE 1736 ( n.ts - TR.start_ts ) >= ifnull(( 1737 SELECT 1738 ( nn.ts - T.start_ts ) AS startTime 1739 FROM 1740 network nn, 1741 trace_range T 1742 WHERE 1743 ( nn.ts - T.start_ts ) <= $leftNS 1744 ORDER BY 1745 nn.ts DESC 1746 LIMIT 1 1747 ),0) 1748 AND ( n.ts - TR.start_ts ) <= $rightNS 1749 ORDER BY 1750 startTime ASC`, {$leftNS: leftNs, $rightNS: rightNs}) 1751 1752/*-------------------------------------------------------------------------------------*/ 1753export const getTabDiskAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemDiskIOSummary>> => 1754 query<SystemDiskIOSummary>("getTabDiskAbilityData", `SELECT 1755 ( n.ts - TR.start_ts ) AS startTime, 1756 n.dur AS duration, 1757 n.rd AS dataRead, 1758 n.rd_speed AS dataReadSec, 1759 n.wr AS dataWrite, 1760 n.wr_speed AS dataWriteSec, 1761 n.rd_count AS readsIn, 1762 n.rd_count_speed AS readsInSec, 1763 n.wr_count AS writeOut, 1764 n.wr_count_speed AS writeOutSec 1765 FROM 1766 diskio AS n, 1767 trace_range AS TR 1768 WHERE 1769 ( n.ts - TR.start_ts ) >= ifnull(( 1770 SELECT 1771 ( nn.ts - T.start_ts ) AS startTime 1772 FROM 1773 diskio AS nn, 1774 trace_range AS T 1775 WHERE 1776 ( nn.ts - T.start_ts ) <= $leftNS 1777 ORDER BY 1778 nn.ts DESC 1779 LIMIT 1 1780 ),0) 1781 AND ( n.ts - TR.start_ts ) <= $rightNS 1782 ORDER BY 1783 startTime ASC; 1784 `, {$leftNS: leftNs, $rightNS: rightNs}) 1785 1786export const queryCpuAbilityData = (): Promise<Array<CpuAbilityMonitorStruct>> => 1787 query("queryCpuAbilityData", `select 1788 (t.total_load) as value, 1789 (t.ts - TR.start_ts) as startNS 1790 from cpu_usage t, trace_range AS TR;`) 1791 1792export const queryCpuAbilityUserData = (): Promise<Array<CpuAbilityMonitorStruct>> => 1793 query("queryCpuAbilityUserData", `select 1794 t.user_load as value, 1795 (t.ts - TR.start_ts) as startNS 1796 from cpu_usage t, trace_range AS TR;`) 1797 1798export const queryCpuAbilitySystemData = (): Promise<Array<CpuAbilityMonitorStruct>> => 1799 query("queryCpuAbilitySystemData", `select 1800 t.system_load as value, 1801 (t.ts - TR.start_ts) as startNS 1802 from cpu_usage t, trace_range AS TR;`) 1803 1804export const queryMemoryUsedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> => 1805 query("queryMemoryUsedAbilityData", `select 1806 t.value as value, 1807 (t.ts - TR.start_ts) as startNS 1808 from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`, {$id: id}) 1809 1810export const queryCachedFilesAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> => 1811 query("queryCachedFilesAbilityData", `select 1812 t.value as value, 1813 (t.ts - TR.start_ts) as startNS 1814 from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`, {$id: id}) 1815 1816export const queryCompressedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> => 1817 query("queryCompressedAbilityData", `select 1818 t.value as value, 1819 (t.ts - TR.start_ts) as startNS 1820 from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`, {$id: id}) 1821 1822export const querySwapUsedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> => 1823 query("querySwapUsedAbilityData", `select 1824 t.value as value, 1825 (t.ts - TR.start_ts) as startNS 1826 from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`, {$id: id}) 1827 1828export const queryBytesReadAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> => 1829 query("queryBytesReadAbilityData", `select 1830 t.rd_speed as value, 1831 (t.ts - TR.start_ts) as startNS 1832 from diskio t, trace_range AS TR;`) 1833 1834export const queryBytesWrittenAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> => 1835 query("queryBytesWrittenAbilityData", `select 1836 t.wr_speed as value, 1837 (t.ts - TR.start_ts) as startNS 1838 from diskio t, trace_range AS TR;`) 1839 1840export const queryReadAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> => 1841 query("queryReadAbilityData", `select 1842 t.rd_count_speed as value, 1843 (t.ts - TR.start_ts) as startNS 1844 from diskio t, trace_range AS TR;`) 1845 1846 1847export const queryWrittenAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> => 1848 query("queryWrittenAbilityData", `select 1849 t.wr_count_speed as value, 1850 (t.ts - TR.start_ts) as startNS 1851 from diskio t, trace_range AS TR;`) 1852 1853export const queryBytesInAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> => 1854 query("queryBytesInAbilityData", `select 1855 t.tx_speed as value, 1856 (t.ts - TR.start_ts) as startNS 1857 from network t, trace_range AS TR;`) 1858 1859export const queryBytesOutAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> => 1860 query("queryBytesOutAbilityData", `select 1861 t.rx_speed as value, 1862 (t.ts - TR.start_ts) as startNS 1863 from network t, trace_range AS TR;`,) 1864 1865export const queryPacketsInAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> => 1866 query("queryPacketsInAbilityData", `select 1867 t.packet_in_sec as value, 1868 (t.ts - TR.start_ts) as startNS 1869 from network t, trace_range AS TR;`,) 1870 1871export const queryPacketsOutAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> => 1872 query("queryPacketsOutAbilityData", `select 1873 t.packet_out_sec as value, 1874 (t.ts - TR.start_ts) as startNS 1875 from network t, trace_range AS TR;`) 1876 1877export const queryNetWorkMaxData = (): Promise<Array<any>> => 1878 query("queryNetWorkMaxData", `select 1879 ifnull(max(tx_speed),0) as maxIn, 1880 ifnull(max(rx_speed),0) as maxOut, 1881 ifnull(max(packet_in_sec),0) as maxPacketIn, 1882 ifnull(max(packet_in_sec),0) as maxPacketOut 1883 from network`) 1884 1885export const queryMemoryMaxData = (memoryName: string): Promise<Array<any>> => 1886 query("queryMemoryMaxData", 1887 `SELECT ifnull(max(m.value),0) as maxValue, 1888 filter_id 1889 from sys_mem_measure m 1890 WHERE m.filter_id = 1891 (SELECT id FROM sys_event_filter WHERE name = $memoryName) 1892`, {$memoryName: memoryName}) 1893 1894export const queryDiskIoMaxData = (): Promise<Array<any>> => 1895 query("queryDiskIoMaxData", `select 1896 ifnull(max(rd_speed),0) as bytesRead, 1897 ifnull(max(wr_speed),0) as bytesWrite, 1898 ifnull(max(rd_count_speed),0) as readOps, 1899 ifnull(max(wr_count_speed),0) as writeOps 1900 from diskio`) 1901 1902export const queryAbilityExits = (): Promise<Array<any>> => 1903 query("queryAbilityExits", `select 1904 event_name 1905 from stat s 1906 where s.event_name in ('trace_diskio','trace_network', 'trace_cpu_usage','sys_memory') 1907 and s.stat_type ='received' and s.count > 0`) 1908 1909export const queryStartTime = (): Promise<Array<any>> => 1910 query("queryStartTime", `SELECT start_ts FROM trace_range`) 1911 1912export const queryPerfFiles = (): Promise<Array<PerfFile>> => 1913 query("queryPerfFiles", `select file_id as fileId,symbol,path from perf_files`, {}) 1914 1915export const queryPerfProcess = (): Promise<Array<PerfThread>> => 1916 query("queryPerfThread", `select process_id as pid,thread_name as processName from perf_thread where process_id = thread_id`, {}) 1917 1918export const queryPerfThread = (): Promise<Array<PerfThread>> => 1919 query("queryPerfThread", `select a.thread_id as tid,a.thread_name as threadName,a.process_id as pid,b.thread_name as processName from perf_thread a left join (select * from perf_thread where thread_id = process_id) b on a.process_id = b.thread_id`, {}) 1920 1921export const queryPerfSampleListByTimeRange = (leftNs: number, rightNs: number, cpus: Array<number>, processes: Array<number>, threads: Array<number>): Promise<Array<PerfSample>> => { 1922 let sql = ` 1923select A.callchain_id as sampleId, 1924 A.thread_id as tid, 1925 C.thread_name as threadName, 1926 A.thread_state as state, 1927 C.process_id as pid, 1928 (timestamp_trace - R.start_ts) as time, 1929 cpu_id as core 1930from perf_sample A,trace_range R 1931left join perf_thread C on A.thread_id = C.thread_id 1932where time >= $leftNs and time <= $rightNs and A.thread_id != 0 1933 ` 1934 if (cpus.length != 0 || processes.length != 0 || threads.length != 0) { 1935 let arg1 = cpus.length > 0 ? `or core in (${cpus.join(",")}) ` : ''; 1936 let arg2 = processes.length > 0 ? `or pid in (${processes.join(",")}) ` : ''; 1937 let arg3 = threads.length > 0 ? `or tid in (${threads.join(",")})` : ''; 1938 let arg = `${arg1}${arg2}${arg3}`.substring(3); 1939 sql = `${sql} and (${arg})` 1940 } 1941 return query("queryPerfSampleListByTimeRange", sql, {$leftNs: leftNs, $rightNs: rightNs}); 1942} 1943 1944export const queryPerfSampleIdsByTimeRange = (leftNs: number, rightNs: number, cpus: Array<number>, processes: Array<number>, threads: Array<number>): Promise<Array<PerfSample>> => { 1945 let sql = ` 1946select A.callchain_id as sampleId 1947from perf_sample A,trace_range R 1948left join perf_thread C on A.thread_id = C.thread_id 1949where (timestamp_trace - R.start_ts) >= $leftNs and (timestamp_trace - R.start_ts) <= $rightNs and A.thread_id != 0 1950 ` 1951 if (cpus.length != 0 || processes.length != 0 || threads.length != 0) { 1952 let arg1 = cpus.length > 0 ? `or A.cpu_id in (${cpus.join(",")}) ` : ''; 1953 let arg2 = processes.length > 0 ? `or C.process_id in (${processes.join(",")}) ` : ''; 1954 let arg3 = threads.length > 0 ? `or A.thread_id in (${threads.join(",")})` : ''; 1955 let arg = `${arg1}${arg2}${arg3}`.substring(3); 1956 sql = `${sql} and (${arg})` 1957 } 1958 return query("queryPerfSampleIdsByTimeRange", sql, {$leftNs: leftNs, $rightNs: rightNs}); 1959} 1960 1961export const queryPerfSampleCallChain = (sampleId: number): Promise<Array<PerfStack>> => 1962 query("queryPerfSampleCallChain", ` 1963 select 1964 callchain_id as callChainId, 1965 callchain_id as sampleId, 1966 file_id as fileId, 1967 symbol_id as symbolId, 1968 vaddr_in_file as vaddrInFile, 1969 name as symbol 1970from perf_callchain where callchain_id = $sampleId and symbol_id != -1 and vaddr_in_file != 0; 1971 `, {$sampleId: sampleId}) 1972 1973export const queryPerfCmdline = ():Promise<Array<PerfCmdLine>> => 1974 query("queryPerfCmdline",` 1975 select report_value from perf_report where report_type = 'cmdline' 1976 `,{}) 1977 1978export const queryCPuAbilityMaxData = (): Promise<Array<any>> => 1979 query("queryCPuAbilityMaxData", 1980 `select ifnull(max(total_load),0) as totalLoad, 1981 ifnull(max(user_load),0) as userLoad, 1982 ifnull(max(system_load),0) as systemLoad 1983 from cpu_usage`) 1984 1985export const querySearchFunc = (search:string):Promise<Array<SearchFuncBean>> => 1986 query("querySearchFunc",` 1987 select c.id,c.name as funName,c.ts - r.start_ts as startTime,c.dur,c.depth,t.tid,t.name as threadName 1988 ,p.pid ,'func' as type from callstack c left join thread t on c.callid = t.id left join process p on t.ipid = p.id 1989 left join trace_range r 1990 where c.name like '%${search}%' and startTime > 0; 1991 `,{$search:search}) 1992 1993export const queryBinderBySliceId = (id:number): Promise<Array<any>> => 1994 query("queryBinderBySliceId", 1995 `select c.ts-D.start_ts as startTime, 1996 c.dur, 1997 t.tid,p.pid,c.depth 1998 from callstack c,trace_range D 1999 left join thread t on c.callid = t.id 2000 left join process p on p.id = t.ipid 2001where cat = 'binder' and c.id = $id;`,{$id:id}) 2002 2003export const queryBinderByArgsId = (id:number,startTime:number,isNext:boolean): Promise<Array<any>> =>{ 2004 let sql = `select c.ts - D.start_ts as startTime, 2005 c.dur, 2006 t.tid,p.pid,c.depth 2007 from callstack c,trace_range D 2008 left join thread t on c.callid = t.id 2009 left join process p on p.id = t.ipid 2010where cat = 'binder' and c.argsetid = $id` 2011 if(isNext){ 2012 sql += " and c.ts > $startTime + D.start_ts" 2013 }else { 2014 sql += " and c.ts < $startTime + D.start_ts" 2015 } 2016 return query("queryBinderByArgsId",sql,{$id:id,$startTime:startTime}) 2017} 2018 2019export const getTabPaneFilesystemStatisticsFather = (leftNs: number, rightNs: number): Promise<Array<any>> => 2020 query("getTabPaneFilesystemStatisticsFather", ` 2021 select SUM(dur) as allDuration, 2022 count(f.type) as count, 2023 min(dur) as minDuration, 2024 max(dur) as maxDuration, 2025 round(avg(dur),2) as avgDuration, 2026 p.name, 2027 f.type, 2028 p.pid, 2029 sum(ifnull(size,0)) as size 2030 from file_system_sample as f left join process as p on f.ipid=p.ipid 2031 where f.start_ts >= $leftNs 2032 and end_ts <= $rightNs 2033 group by f.type; 2034`, {$leftNs:leftNs,$rightNs:rightNs}); 2035 2036export const getTabPaneFilesystemStatisticsChild = (leftNs: number, rightNs: number): Promise<Array<any>> => 2037 query("getTabPaneFilesystemStatisticsChild", ` 2038 select SUM(dur) as allDuration, 2039 count(f.type) as count, 2040 min(dur) as minDuration, 2041 max(dur) as maxDuration, 2042 round(avg(dur),2) as avgDuration, 2043 p.name, 2044 f.type, 2045 p.pid, 2046 sum(ifnull(size,0)) as size 2047 from file_system_sample as f left join process as p on f.ipid=p.ipid 2048 where f.start_ts >= $leftNs 2049 and end_ts <= $rightNs 2050 group by f.type, f.ipid; 2051`, {$leftNs:leftNs,$rightNs:rightNs}); 2052 2053export const getTabPaneFilesystemStatisticsAll = (leftNs: number, rightNs: number): Promise<Array<any>> => 2054 query("getTabPaneFilesystemStatisticsAll", ` 2055 select SUM(dur) as allDuration, 2056 count(type) as count, 2057 min(dur) as minDuration, 2058 max(dur) as maxDuration, 2059 round(avg(dur),2) as avgDuration, 2060 type 2061 from file_system_sample 2062 where start_ts >= $leftNs 2063 and end_ts <= $rightNs; 2064`, {$leftNs:leftNs,$rightNs:rightNs}); 2065 2066export const getTabPaneFilesystemStatistics = (leftNs: number, rightNs: number): Promise<Array<any>> => 2067 query("getTabPaneFilesystemStatistics", ` 2068 select p.pid, 2069 ifnull(p.name,'Process') as name, 2070 f.type, 2071 count(f.ipid) as count, 2072 sum(ifnull(size,0)) as size, 2073 sum(case when f.type = 2 then ifnull(size,0) else 0 end) as logicalReads, 2074 sum(case when f.type = 3 then ifnull(size,0) else 0 end) as logicalWrites, 2075 sum(case when f.type != 2 and f.type != 3 then ifnull(size,0) else 0 end) as otherFile, 2076 sum(dur) as allDuration, 2077 min(dur) as minDuration, 2078 max(dur) as maxDuration, 2079 avg(dur) as avgDuration 2080 from file_system_sample as f left join process as p on f.ipid=p.ipid 2081 where end_ts >= $leftNs 2082 and end_ts <= $rightNs 2083 group by f.type,f.ipid 2084 order by f.type; 2085`, {$leftNs:leftNs,$rightNs:rightNs}); 2086 2087export const getTabPaneVirtualMemoryStatisticsData = (leftNs: number, rightNs: number): Promise<Array<any>> => 2088 query("getTabPaneVirtualMemoryStatisticsData", ` 2089 select p.pid, 2090 t.tid, 2091 ifnull(p.name,'Process') as pname, 2092 ifnull(t.name,'Thread') as tname, 2093 f.type, 2094 f.ipid, 2095 f.itid, 2096 count(f.ipid) as count, 2097 sum(dur) as allDuration, 2098 min(dur) as minDuration, 2099 max(dur) as maxDuration, 2100 avg(dur) as avgDuration 2101 from virtual_memory_sample as f left join process as p on f.ipid=p.ipid left join thread as t on f.itid=t.itid 2102 where f.end_ts >= $leftNs 2103 and f.end_ts <= $rightNs 2104 group by f.type,f.ipid,f.itid 2105 order by f.type; 2106`, {$leftNs:leftNs,$rightNs:rightNs}); 2107 2108export const getTabPaneIOTierStatisticsData = (leftNs: number, rightNs: number, diskIOipids:Array<number>): Promise<Array<any>> =>{ 2109 let str = ""; 2110 if (diskIOipids.length > 0) { 2111 str = ` and f.ipid in (${diskIOipids.join(",")})`; 2112 } 2113 return query("getTabPaneIOTierStatisticsData", ` 2114 select p.pid, 2115 ifnull(p.name,'Process') as pname, 2116 i.tier, 2117 i.ipid, 2118 path, 2119 count(i.ipid) as count, 2120 sum(latency_dur) as allDuration, 2121 min(latency_dur) as minDuration, 2122 max(latency_dur) as maxDuration, 2123 avg(latency_dur) as avgDuration 2124 from io_latency_sample as i left join process as p on i.ipid=p.ipid 2125 where i.start_ts >= $leftNs 2126 and i.start_ts+latency_dur <= $rightNs 2127 ${str} 2128 group by i.tier,i.ipid,i.path 2129 order by i.tier; 2130`, {$leftNs:leftNs,$rightNs:rightNs}) 2131}; 2132 2133export const getTabPaneCounterSampleData = (leftNs: number, rightNs: number, cpuStateFilterIds: Array<number>): Promise<Array<any>> =>{ 2134 let str = ""; 2135 if (cpuStateFilterIds.length > 0) { 2136 str = ` and filter_id in (${cpuStateFilterIds.join(",")})`; 2137 } 2138 return query("getTabPaneCounterSampleData", ` 2139 select value, filter_id as filterId, ts, f.cpu 2140 from measure left join cpu_measure_filter as f on f.id=filter_id 2141 where 2142 ts <= $rightNs${str} order by ts asc; 2143`, {$leftNs:leftNs,$rightNs:rightNs}) 2144}; 2145 2146export const getTabPaneFrequencySampleData = (leftNs: number, rightNs: number, cpuFreqFilterIds: Array<number>): Promise<Array<any>> =>{ 2147 let str = ""; 2148 if (cpuFreqFilterIds.length > 0) { 2149 str = ` and filter_id in (${cpuFreqFilterIds.join(",")})`; 2150 } 2151 return query("getTabPaneFrequencySampleData", ` 2152 select value, filter_id as filterId, ts, f.cpu 2153 from measure left join cpu_measure_filter as f on f.id=filter_id 2154 where 2155 ts <= $rightNs${str} order by ts asc; 2156`, {$leftNs:leftNs,$rightNs:rightNs}) 2157}; 2158 2159export const hasFileSysData = () : Promise<Array<any>> => 2160 query("hasFileSysData",` 2161 select 2162 fsCount, 2163 vmCount, 2164 0 as ioCount from 2165 (select count(1) as fsCount from file_system_sample) 2166 ,(select count(1) as vmCount from virtual_memory_sample) 2167 --,(select count(1) as ioCount from io_latency_sample); 2168 `,{}) 2169 2170export const getFileSysChartDataByType = (type:number) : Promise<Array<any>> => 2171 query("getFileSysChartData",` 2172 select 2173 (A.start_ts -B.start_ts) as startNS, 2174 (A.end_ts - B.start_ts) as endNS, 2175 dur 2176 from file_system_sample A,trace_range B 2177 where type = $type and startNS > 0;`,{$type:type},"exec-buf") 2178 2179export const getFileSysVirtualMemoryChartData = () : Promise<Array<any>> => 2180 query("getFileSysVirtualMemoryChartData",` 2181 select 2182 (A.start_ts -B.start_ts) as startNS, 2183 (A.end_ts - B.start_ts) as endNS, 2184 dur as dur 2185 from virtual_memory_sample A,trace_range B 2186 where startNS > 0 2187 order by A.start_ts;`,{},"exec-buf") 2188 2189export const getDiskIOProcess = () : Promise<Array<any>> => 2190 query("getDiskIOProcess",` 2191 select name,B.ipid,pid 2192 from (select distinct ipid from io_latency_sample) A 2193 left join process B on A.ipid = B.ipid;`,{}) 2194 2195export const getDiskIOLatencyChartDataByProcess = (all:boolean,ipid:number,typeArr:Array<number>) : Promise<Array<any>> => 2196 query("getDiskIOLatencyChartDataByProcess",` 2197 select 2198 (A.start_ts -B.start_ts) as startNS, 2199 (A.start_ts - B.start_ts + A.latency_dur) as endNS, 2200 latency_dur as dur 2201 from io_latency_sample A,trace_range B 2202 where type in (${typeArr.join(",")}) and startNS > 0 2203 ${ all ? '' : 'and ipid = ' + ipid } 2204 order by A.start_ts;`,{},"exec-buf") 2205 2206export const querySdkCount = (sql:string, componentId:number ): Promise<Array<any>> => 2207 query("querySdkCount", sql,{},"exec-sdk-" + componentId) 2208 2209export const querySdkCounterData = (sql:string, counter_id:number, componentId:number): Promise<Array<CounterStruct>> => 2210 query("querySdkCounterData", sql,{$counter_id:counter_id}, "exec-sdk-" + componentId) 2211 2212export const getTabSdkCounterData = (sqlStr: string, startTime: number, leftNs: number, rightNs: number, counters: Array<string>, componentId: number): Promise<Array<CounterSummary>> => 2213 query<CounterSummary>("getTabSdkCounterData", sqlStr, { 2214 $startTime:startTime, 2215 $leftNs: leftNs, 2216 $rightNs: rightNs, 2217 $counters:counters 2218 },"exec-sdk-" + componentId) 2219 2220 2221export const getTabSdkCounterLeftData = (sqlStr: string, leftNs: number, counters: Array<string>, componentId: number): Promise<Array<any>> => 2222 query<any>("getTabSdkCounterLeftData", sqlStr, { 2223 $leftNs: leftNs, 2224 $counters:counters 2225 },"exec-sdk-" + componentId) 2226 2227export const getTabSdkSliceData = (sqlStr: string, startTime:number, leftNs: number, rightNs: number, slices: Array<string>,componentId: number): Promise<Array<SdkSliceSummary>> => 2228 query<SdkSliceSummary>("getTabSdkSliceData", sqlStr, { 2229 $startTime:startTime, 2230 $leftNs: leftNs, 2231 $rightNs: rightNs, 2232 $slices: slices 2233 },"exec-sdk-" + componentId) 2234 2235export const querySdkSliceData = (sqlStr:string, column_id: number, startNS: number, endNS: number, componentId:number): Promise<Array<SdkSliceStruct>> => 2236 query("querySdkSliceData", sqlStr, {$column_id: column_id, $startNS: startNS, $endNS: endNS},"exec-sdk-" + componentId) 2237 2238export const queryCounterMax = (sqlStr:string, counter_id:number, componentId:number): Promise<Array<any>> => 2239 query("queryCounterMax", sqlStr,{$counter_id:counter_id}, "exec-sdk-" + componentId) 2240 2241export const queryAnomalyData = (): Promise<Array<EnergyAnomalyStruct>> => 2242 query("queryAnomalyData", `select 2243 (S.ts - TR.start_ts) as startNS, 2244 D.data as eventName, 2245 D2.data as appKey, 2246 (case when S.type==1 then group_concat(S.string_value,',') else group_concat(S.int_value,',') end) as Value 2247 from trace_range AS TR,hisys_event_measure as S 2248 left join data_dict as D on D.id=S.name_id 2249 left join app_name as APP on APP.id=S.key_id 2250 left join data_dict as D2 on D2.id=APP.app_key 2251 where D.data in ('ANOMALY_SCREEN_OFF_ENERGY','ANOMALY_KERNEL_WAKELOCK','ANOMALY_CPU_HIGH_FREQUENCY','ANOMALY_WAKEUP') 2252 or (D.data in ('ANOMALY_RUNNINGLOCK','ANORMALY_APP_ENERGY','ANOMALY_GNSS_ENERGY','ANOMALY_CPU_ENERGY','ANOMALY_ALARM_WAKEUP') and D2.data in ("APPNAME")) 2253 group by S.ts,D.data`) 2254 2255export const querySystemData = (): Promise<Array<{ 2256 startNs: string 2257 eventName: string 2258 type: string 2259 state: string 2260}>> => 2261 query("querySystemData", `SELECT 2262 ( S.ts - TR.start_ts ) AS ts, 2263 D.data AS eventName, 2264 D2.data AS appKey, 2265 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS Value 2266 FROM 2267 trace_range AS TR, 2268 hisys_event_measure AS S 2269 LEFT JOIN data_dict AS D ON D.id = S.name_id 2270 LEFT JOIN app_name AS APP ON APP.id = S.key_id 2271 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 2272 WHERE 2273 ( D.data = 'POWER_RUNNINGLOCK' AND D2.data = 'TAG' ) 2274 OR ( D.data = 'GNSS_STATE' AND D2.data = 'STATE' ) 2275 OR ( D.data IN ( 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD' ) AND D2.data = 'TYPE' ) 2276 GROUP BY 2277 S.ts, 2278 APP.app_key, 2279 D.data, 2280 D2.data;`) 2281 2282export const querySystemDetailsData = (leftNs: number, rightNs: number): Promise<Array<SystemDetailsEnergy>> => 2283 query("querySystemDetailsData", `SELECT 2284 ( S.ts - TR.start_ts ) AS ts, 2285 D.data AS eventName, 2286 D2.data AS appKey, 2287 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS appValue 2288 FROM 2289 trace_range AS TR, 2290 hisys_event_measure AS S 2291 LEFT JOIN data_dict AS D ON D.id = S.name_id 2292 LEFT JOIN app_name AS APP ON APP.id = S.key_id 2293 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 2294 WHERE 2295 D.data in ('POWER_RUNNINGLOCK', 'GNSS_STATE', 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD', 'WORK_START') 2296 and 2297 D2.data in ('UID', 'TYPE', 'WORKID', 'NAME', 'INTERVAL', 'TAG', 'STATE', 'STACK', 'APPNAME', 'MESSAGE', 'PID', 'LOG_LEVEL') 2298 and (S.ts - TR.start_ts) >= $leftNS 2299 and (S.ts - TR.start_ts) <= $rightNS 2300 GROUP BY 2301 S.ts, 2302 APP.app_key, 2303 D.data, 2304 D2.data;`, {$leftNS: leftNs, $rightNS: rightNs}) 2305 2306export const queryMaxPowerValue = (appName: string): Promise<Array<{ 2307 maxValue: number 2308}>> => 2309 query("queryMaxPowerValue", `SELECT 2310 max( item ) AS maxValue 2311 FROM 2312 ( 2313 SELECT 2314 sum( energy + background_energy + screen_on_energy + screen_off_energy + foreground_energy ) AS item 2315 FROM 2316 energy 2317 WHERE 2318 app_name = $appName 2319 GROUP BY 2320 startNs);`, {$appName: appName}) 2321 2322export const queryPowerData = (): Promise<Array<{ 2323 startNS: number, 2324 eventName: string, 2325 appKey: string, 2326 eventValue: string 2327}>> => 2328 query("queryPowerData", `SELECT 2329 ( S.ts - TR.start_ts ) AS startNS, 2330 D.data AS eventName, 2331 D2.data AS appKey, 2332 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue 2333 FROM 2334 trace_range AS TR, 2335 hisys_event_measure AS S 2336 LEFT JOIN data_dict AS D ON D.id = S.name_id 2337 LEFT JOIN app_name AS APP ON APP.id = S.key_id 2338 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 2339 where 2340 D.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY','POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO','POWER_IDE_WIFISCAN') 2341 and 2342 D2.data in ('BACKGROUND_ENERGY','FOREGROUND_ENERGY','SCREEN_ON_ENERGY','SCREEN_OFF_ENERGY','ENERGY','APPNAME') 2343 GROUP BY 2344 S.ts, 2345 APP.app_key, 2346 D.data, 2347 D2.data 2348 ORDER BY 2349 eventName;`,{}) 2350 2351export const getTabPowerDetailsData = (leftNs: number, rightNs: number): Promise<Array<{ 2352 startNS: number, 2353 eventName: string, 2354 appKey: string, 2355 eventValue: string, 2356}>> => 2357 query("getTabPowerDetailsData", `SELECT 2358 ( S.ts - TR.start_ts ) AS startNS, 2359 D.data AS eventName, 2360 D2.data AS appKey, 2361 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue 2362 FROM 2363 trace_range AS TR, 2364 hisys_event_measure AS S 2365 LEFT JOIN data_dict AS D ON D.id = S.name_id 2366 LEFT JOIN app_name AS APP ON APP.id = S.key_id 2367 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 2368 where 2369 D.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY','POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO','POWER_IDE_WIFISCAN') 2370 and 2371 D2.data in ('APPNAME') 2372 GROUP BY 2373 S.ts, 2374 APP.app_key, 2375 D.data, 2376 D2.data 2377 UNION 2378 SELECT 2379 ( S.ts - TR.start_ts ) AS startNS, 2380 D.data AS eventName, 2381 D2.data AS appKey, 2382 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue 2383 FROM 2384 trace_range AS TR, 2385 hisys_event_measure AS S 2386 LEFT JOIN data_dict AS D ON D.id = S.name_id 2387 LEFT JOIN app_name AS APP ON APP.id = S.key_id 2388 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 2389 where 2390 D.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY','POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO','POWER_IDE_WIFISCAN') 2391 and 2392 D2.data in ('CHARGE','BACKGROUND_TIME','SCREEN_ON_TIME','SCREEN_OFF_TIME','LOAD','USAGE','DURATION','CAMERA_ID', 2393 'FOREGROUND_COUNT','BACKGROUND_COUNT','SCREEN_ON_COUNT','SCREEN_OFF_COUNT','COUNT','UID','FOREGROUND_DURATION', 2394 'FOREGROUND_ENERGY','BACKGROUND_DURATION','BACKGROUND_ENERGY','SCREEN_ON_DURATION','SCREEN_ON_ENERGY', 2395 'SCREEN_OFF_DURATION','SCREEN_OFF_ENERGY','ENERGY') 2396 and 2397 (S.ts - TR.start_ts) >= $leftNS 2398 and (S.ts - TR.start_ts) <= $rightNS 2399 GROUP BY 2400 S.ts, 2401 APP.app_key, 2402 D.data, 2403 D2.data 2404 ORDER BY 2405 eventName;`, {$leftNS: leftNs, $rightNS: rightNs}) 2406 2407export const getTabPowerBatteryData = (rightNs: number): Promise<Array<{ 2408 ts: number, 2409 eventName: string, 2410 appKey: string 2411 eventValue: string 2412}>> => 2413 query("getTabPowerBatteryData", `select 2414 MAX(S.ts) as ts, 2415 D.data as eventName, 2416 D2.data as appKey, 2417 group_concat((case when S.type==1 then S.string_value else S.int_value end), ',') as eventValue 2418 from 2419 trace_range AS TR, 2420 hisys_event_measure as S 2421 left join 2422 data_dict as D 2423 on 2424 D.id=S.name_id 2425 left join 2426 app_name as APP 2427 on 2428 APP.id=S.key_id 2429 left join 2430 data_dict as D2 2431 on 2432 D2.id=APP.app_key 2433 where 2434 D.data = 'POWER_IDE_BATTERY' 2435 and D2.data in ('GAS_GAUGE','CHARGE','SCREEN','LEVEL','CURRENT','CAPACITY') 2436 and (S.ts - TR.start_ts) >= 0 2437 and (S.ts - TR.start_ts) <= $rightNS 2438 group by APP.app_key,D.data,D2.data;`, {$rightNS: rightNs}) 2439 2440export const queryMaxStateValue = (eventName: string): Promise<Array<{ 2441 type: string 2442 maxValue: number 2443}>> => 2444 query("queryMaxStateValue", `select 2445 D.data as type, 2446 max(S.int_value) as maxValue 2447 from trace_range AS TR,hisys_event_measure as S 2448 left join data_dict as D on D.id=S.name_id 2449 left join app_name as APP on APP.id=S.key_id 2450 left join data_dict as D2 on D2.id=APP.app_key 2451 where (case when 'SENSOR_STATE'==$eventName then D.data like '%SENSOR%' else D.data = $eventName end) 2452 and D2.data in ('BRIGHTNESS','STATE','VALUE','LEVEL','VOLUME','OPER_TYPE','VOLUME') 2453 group by APP.app_key,D.data,D2.data;`, {$eventName: eventName}) 2454 2455export const queryStateData = (eventName: string): Promise<Array<EnergyStateStruct>> => 2456 query("queryStateData", `select 2457 (S.ts-TR.start_ts) as startNs, 2458 D.data as type, 2459 D2.data as appKey, 2460 S.int_value as value 2461 from trace_range AS TR,hisys_event_measure as S 2462 left join data_dict as D on D.id=S.name_id 2463 left join app_name as APP on APP.id=S.key_id 2464 left join data_dict as D2 on D2.id=APP.app_key 2465 where (case when 'SENSOR_STATE'==$eventName then D.data like '%SENSOR%' else D.data = $eventName end) 2466 and D2.data in ('BRIGHTNESS','STATE','VALUE','LEVEL','VOLUME','OPER_TYPE','VOLUME') 2467 group by S.ts,APP.app_key,D.data,D2.data;`, {$eventName: eventName}) 2468 2469export const querySyseventAppName = (): Promise<Array<{ 2470 string_value: string | null 2471}>> => 2472 query("querySyseventAppName", ` 2473 SELECT 2474 DISTINCT hisys_event_measure.string_value from data_dict 2475 left join app_name on app_name.app_key=data_dict.id 2476 left join hisys_event_measure on hisys_event_measure.key_id = app_name.id 2477 where data_dict.data = "APPNAME"`) 2478 2479export const queryAnomalyDetailedData = (leftNs: number, rightNs: number): Promise<Array<EnergyAnomalyStruct>> => 2480 query<EnergyAnomalyStruct>("queryAnomalyDetailedData", `select 2481 S.ts, 2482 D.data as eventName, 2483 D2.data as appKey, 2484 group_concat((case when S.type==1 then S.string_value else S.int_value end), ',') as Value 2485 from trace_range AS TR,hisys_event_measure as S 2486 left join data_dict as D on D.id=S.name_id 2487 left join app_name as APP on APP.id=S.key_id 2488 left join data_dict as D2 on D2.id=APP.app_key 2489 where D.data in ('ANOMALY_SCREEN_OFF_ENERGY','ANOMALY_ALARM_WAKEUP','ANOMALY_KERNEL_WAKELOCK', 2490 'ANOMALY_RUNNINGLOCK','ANORMALY_APP_ENERGY','ANOMALY_GNSS_ENERGY','ANOMALY_CPU_HIGH_FREQUENCY','ANOMALY_CPU_ENERGY','ANOMALY_WAKEUP') 2491 and D2.data in ('APPNAME') 2492 and (S.ts - TR.start_ts) >= $leftNS 2493 and (S.ts - TR.start_ts) <= $rightNS 2494 group by S.ts,APP.app_key,D.data,D2.data 2495 union 2496 select 2497 S.ts, 2498 D.data as eventName, 2499 D2.data as appKey, 2500 group_concat((case when S.type==1 then S.string_value else S.int_value end), ',') as Value 2501 from trace_range AS TR,hisys_event_measure as S 2502 left join data_dict as D on D.id=S.name_id 2503 left join app_name as APP on APP.id=S.key_id 2504 left join data_dict as D2 on D2.id=APP.app_key 2505 where D.data in ('ANOMALY_SCREEN_OFF_ENERGY','ANOMALY_ALARM_WAKEUP','ANOMALY_KERNEL_WAKELOCK', 2506 'ANOMALY_RUNNINGLOCK','ANORMALY_APP_ENERGY','ANOMALY_GNSS_ENERGY','ANOMALY_CPU_HIGH_FREQUENCY','ANOMALY_CPU_ENERGY','ANOMALY_WAKEUP') 2507 and D2.data not in ('pid_','tid_','type_','tz_','uid_','domain_', 'id_', 'level_', 'info_', 'tag_', 'APPNAME') 2508 and (S.ts - TR.start_ts) >= $leftNS 2509 and (S.ts - TR.start_ts) <= $rightNS 2510 group by S.ts,APP.app_key,D.data,D2.data;`, {$leftNS: leftNs, $rightNS: rightNs}) 2511 2512export const querySmapsExits = (): Promise<Array<any>> => 2513 query("querySmapsExits", `select 2514 event_name 2515 from stat s 2516 where s.event_name = 'trace_smaps' 2517 and s.stat_type ='received' and s.count > 0`) 2518 2519export const querySmapsData = (columnName: string): Promise<Array<any>> => 2520 query("querySmapsCounterData", 2521 `SELECT (A.timestamp - B.start_ts) as startNS, sum(${columnName}) as value FROM smaps A,trace_range B GROUP by A.timestamp;`) 2522 2523export const querySmapsDataMax = (columnName: string): Promise<Array<any>> => 2524 query("querySmapsDataMax", ` 2525 SELECT (A.timestamp - B.start_ts) as startNS,sum(${columnName}) as max_value FROM smaps A,trace_range B GROUP by A.timestamp order by max_value desc LIMIT 1`) 2526 2527export const getTabSmapsMaxRss = (leftNs: number, rightNs: number): Promise<Array<any>> => 2528 query<Smaps>("getTabSmapsMaxRss", ` 2529SELECT (A.timestamp - B.start_ts) as startNS, sum(resident_size) as max_value FROM smaps A,trace_range B where startNS <= $rightNs`, {$rightNs:rightNs}) 2530 2531export const getTabSmapsData = (leftNs: number, rightNs: number): Promise<Array<Smaps>> => 2532 query<Smaps>("getTabSmapsData", ` 2533 SELECT 2534 (A.timestamp - t.start_ts) AS tsNS, 2535 start_addr, 2536 end_addr, 2537 dirty, 2538 swapper, 2539 resident_size AS rss, 2540 pss,virtaul_size AS size,reside,f.data AS permission,d.data AS path 2541 FROM smaps A 2542 LEFT JOIN data_dict d ON a.path_id = d.id LEFT 2543 JOIN data_dict f ON a.protection_id = f.id, 2544 trace_range AS t 2545 WHERE tsNS <= $rightNs`, {$rightNs : rightNs},"exec") 2546 2547export const getTabVirtualMemoryType = (startTime: number, endTime: number): Promise<Array<string>> => 2548 query("getTabVirtualMemoryType", ` 2549 SELECT type from virtual_memory_sample s,trace_range t 2550 WHERE s.end_ts between $startTime + t.start_ts and $endTime + t.start_ts group by type`, {$startTime : startTime,$endTime:endTime},"exec") 2551 2552export const getCpuLimitFreqId = (): Promise<Array<CpuFreqRowLimit>> => 2553 query("getCpuMaxMinFreqId", ` 2554 select cpu,MAX(iif(name = 'cpu_frequency_limits_max',id,0)) as maxFilterId,MAX(iif(name = 'cpu_frequency_limits_min',id,0)) as minFilterId from cpu_measure_filter where name in ('cpu_frequency_limits_max','cpu_frequency_limits_min') group by cpu 2555`, {}) 2556 2557export const getCpuLimitFreqMax = (filterIds:string): Promise<Array<any>> =>{ 2558 return query("getCpuLimitFreqMax", ` 2559 select max(value) as maxValue,filter_id as filterId from measure where filter_id in (${filterIds}) group by filter_id 2560`, {}) 2561} 2562 2563export const getCpuLimitFreq = (maxId: number, minId: number,cpu:number): Promise<Array<CpuFreqLimitsStruct>> => 2564 query("getCpuLimitFreq", ` 2565 select ts - T.start_ts as startNs,max(value) as max,min(value) as min,$cpu as cpu from measure,trace_range T where filter_id in ($maxId,$minId) group by ts 2566`, {$maxId : maxId,$minId : minId,$cpu : cpu}) 2567 2568export const queryHisystemEventExits = (): Promise<Array<any>> => 2569 query("queryHisystemEventExits", `select 2570 event_name 2571 from stat s 2572 where s.event_name = 'trace_hisys_event' 2573 and s.stat_type ='received' and s.count > 0`) 2574 2575