• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.hiSysEvent (系统事件打点)
2
3本模块提供了系统事件打点能力,包括系统事件的埋点、落盘系统事件的订阅及已落盘的系统事件的查询能力。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> - 本模块的接口为系统接口。
9
10
11## 导入模块
12
13```ts
14import hiSysEvent from '@ohos.hiSysEvent';
15```
16
17## EventType
18
19系统事件类型枚举。
20
21**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
22
23| 名称 | 值 | 说明 |
24| -------- | -------- | -------- |
25| FAULT | 1 | 错误事件类型。 |
26| STATISTIC | 2 | 统计事件类型。 |
27| SECURITY | 3 | 安全事件类型。 |
28| BEHAVIOR | 4 | 用户行为事件类型。 |
29
30## SysEventInfo
31
32系统事件信息对象接口。
33
34**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
35
36| 名称 | 类型 | 必填 | 说明 |
37| -------- | -------- | -------- | -------- |
38| domain | string | 是 | 事件领域。 |
39| name | string | 是 | 事件名称。 |
40| eventType | [EventType](#eventtype) | 是 | 事件类型。 |
41| params | object | 否 | 事件参数。 |
42
43
44## hiSysEvent.write
45
46write(info: SysEventInfo, callback: AsyncCallback<void>): void
47
48系统事件打点方法,接收[SysEventInfo](#syseventinfo)类型的对象作为事件参数,使用callback方式作为异步回调。
49
50**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
51
52**参数:**
53
54| 参数名    | 类型                      | 必填 | 说明                                                         |
55| --------- | ------------------------- | ---- | ------------------------------------------------------------ |
56| info | [SysEventInfo](#syseventinfo) | 是 | 系统事件。 |
57| callback  | AsyncCallback&lt;void&gt; | 是 | 回调函数,可以在回调函数中处理接口返回值。<br/>- 0表示事件校验成功,事件正常异步写入事件文件;<br/>- 正值表示事件打点存在异常,但可以正常写入;<br/>- 负值表示事件打点失败。 |
58
59**错误码:**
60
61以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
62
63| 错误码ID | 错误信息 |
64| ------- | ----------------------------------------------------------------- |
65| 11200001 | Invalid event domain.                                            |
66| 11200002 | Invalid event name.                                              |
67| 11200003 | Abnormal environment.                                            |
68| 11200004 | Length of the event is over limit.                               |
69| 11200051 | Invalid event parameter.                                         |
70| 11200052 | Size of the event parameter of the string type is over limit.    |
71| 11200053 | Count of event parameters is over limit.                         |
72| 11200054 | Count of event parameter of the array type is over limit.        |
73
74**示例:**
75
76```ts
77import hiSysEvent from '@ohos.hiSysEvent';
78import { BusinessError } from '@ohos.base';
79
80try {
81  let customizedParams: Record<string, string | number> = {
82    'PID': 487,
83    'UID': 103,
84    'PACKAGE_NAME': "com.ohos.hisysevent.test",
85    'PROCESS_NAME': "syseventservice",
86    'MSG': "no msg."
87  };
88  let eventInfo: hiSysEvent.SysEventInfo = {
89    domain: "RELIABILITY",
90    name: "STACK",
91    eventType: hiSysEvent.EventType.FAULT,
92    params: customizedParams
93  };
94  hiSysEvent.write(eventInfo, (err: BusinessError) => {
95    // do something here.
96  });
97} catch (err) {
98  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
99}
100```
101
102
103## hiSysEvent.write
104
105write(info: SysEventInfo): Promise&lt;void&gt;
106
107系统事件打点方法,接收[SysEventInfo](#syseventinfo)类型的对象作为事件参数,使用promise方式作为异步回调。
108
109**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
110
111**参数:**
112
113| 参数名    | 类型                    | 必填 | 说明 |
114| --------- | ----------------------- | ---- | --------------- |
115| info | [SysEventInfo](#syseventinfo) | 是   | 系统事件。 |
116
117**返回值:**
118
119| 类型                | 说明                                                         |
120| ------------------- | ------------------------------------------------------------ |
121| Promise&lt;void&gt; | Promise实例,可以在其then()、catch()方法中分别对系统事件写入成功、写入异常的回调进行处理。 |
122
123**错误码:**
124
125以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
126
127| 错误码ID | 错误信息 |
128| -------- | ---------------------------------------------------------------- |
129| 11200001 | Invalid event domain.                                            |
130| 11200002 | Invalid event name.                                              |
131| 11200003 | Abnormal environment.                                            |
132| 11200004 | Length of the event is over limit.                               |
133| 11200051 | Invalid event parameter.                                         |
134| 11200052 | Size of the event parameter of the string type is over limit.    |
135| 11200053 | Count of event parameters is over limit.                         |
136| 11200054 | Count of event parameter of the array type is over limit.        |
137
138**示例:**
139
140```ts
141import hiSysEvent from '@ohos.hiSysEvent';
142import { BusinessError } from '@ohos.base';
143
144try {
145  let customizedParams: Record<string, string | number> = {
146    'PID': 487,
147    'UID': 103,
148    'PACKAGE_NAME': "com.ohos.hisysevent.test",
149    'PROCESS_NAME': "syseventservice",
150    'MSG': "no msg."
151  };
152  let eventInfo: hiSysEvent.SysEventInfo = {
153    domain: "RELIABILITY",
154    name: "STACK",
155    eventType: hiSysEvent.EventType.FAULT,
156    params: customizedParams
157  };
158  hiSysEvent.write(eventInfo).then(
159    () => {
160      // do something here.
161    }
162  ).catch(
163    (err: BusinessError) => {
164      console.error(`error code: ${err.code}, error msg: ${err.message}`);
165    }
166  );
167} catch (err) {
168  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
169}
170```
171
172## RuleType
173
174匹配规则类型枚举。
175
176**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
177
178| 名称 | 值 | 说明 |
179| -------- | -------- | -------- |
180| WHOLE_WORD | 1 | 全词匹配类型。 |
181| PREFIX | 2 | 前缀匹配类型。 |
182| REGULAR | 3 | 正则匹配类型。 |
183
184## WatchRule
185
186系统事件订阅规则对象接口。
187
188**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
189
190| 名称 | 类型 | 必填 | 说明 |
191| -------- | -------- | -------- | -------- |
192| domain | string | 是 | 事件领域。 |
193| name | string | 是 | 事件名称。 |
194| tag | string | 否 | 事件标签。 |
195| ruleType | [RuleType](#ruletype) | 是 | 匹配规则类型。 |
196
197## Watcher
198
199系统事件订阅者对象接口。
200
201**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
202
203| 名称 | 类型 | 必填 | 说明 |
204| -------- | -------- | -------- | -------- |
205| rules | [WatchRule](#watchrule)[] | 是 | 订阅对象数组,每个订阅者对象包含多个订阅规则。 |
206| onEvent | function | 是 | 订阅事件的回调方法(info: [SysEventInfo](#syseventinfo)) => void。 |
207| onServiceDied | function | 是 | 系统事件服务关闭的回调方法() => void。 |
208
209## hiSysEvent.addWatcher
210
211addWatcher(watcher: Watcher): void
212
213订阅系统事件,接收[Watcher](#watcher)类型的对象作为事件参数。
214
215**需要权限:** ohos.permission.READ_DFX_SYSEVENT
216
217**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
218
219**参数:**
220
221| 参数名 | 类型 | 必填 | 说明 |
222| ------ | ----------------------------- | ---- | ------------------------ |
223| watcher | [Watcher](#watcher) | 是 | 系统事件订阅者对象。 |
224
225**错误码:**
226
227以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
228
229| 错误码ID | 错误信息 |
230| -------- | ----------------------------------- |
231| 11200101 | Count of watchers is over limit.    |
232| 11200102 | Count of watch rules is over limit. |
233
234**示例:**
235
236```ts
237import hiSysEvent from '@ohos.hiSysEvent';
238import { BusinessError } from '@ohos.base';
239
240let watchRules: hiSysEvent.WatchRule[] = [{
241    domain: "RELIABILITY",
242    name: "STACK",
243    tag: "STABILITY",
244    ruleType: hiSysEvent.RuleType.WHOLE_WORD,
245  } as hiSysEvent.WatchRule];
246let watcher: hiSysEvent.Watcher = {
247  rules: watchRules,
248  onEvent: (info: hiSysEvent.SysEventInfo) => {
249    // do something here.
250  },
251  onServiceDied: () => {
252    // do something here.
253  }
254};
255try {
256  hiSysEvent.addWatcher(watcher);
257} catch (err) {
258  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
259}
260```
261
262## hiSysEvent.removeWatcher
263
264removeWatcher(watcher: Watcher): void
265
266取消订阅系统事件,接收[Watcher](#watcher)类型的对象作为事件参数。
267
268**需要权限:** ohos.permission.READ_DFX_SYSEVENT
269
270**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
271
272**参数:**
273
274| 参数名 | 类型  | 必填 | 说明  |
275| ------ | ------------- | ---- | ------------------------- |
276| watcher | [Watcher](#watcher) | 是 | 系统事件订阅者对象。 |
277
278**错误码:**
279
280以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
281
282| 错误码ID | 错误信息 |
283| -------- | --------------------------- |
284| 11200201 | The watcher does not exist. |
285
286**示例:**
287
288```ts
289import hiSysEvent from '@ohos.hiSysEvent';
290import { BusinessError } from '@ohos.base';
291
292let watchRules: hiSysEvent.WatchRule[] = [{
293    domain: "RELIABILITY",
294    name: "STACK",
295    tag: "STABILITY",
296    ruleType: hiSysEvent.RuleType.WHOLE_WORD,
297  } as hiSysEvent.WatchRule ];
298let watcher: hiSysEvent.Watcher = {
299  rules: watchRules,
300  onEvent: (info: hiSysEvent.SysEventInfo) => {
301    // do something here.
302  },
303  onServiceDied: () => {
304    // do something here.
305  }
306};
307try {
308  hiSysEvent.addWatcher(watcher);
309  hiSysEvent.removeWatcher(watcher);
310} catch (err) {
311  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
312}
313```
314
315## QueryArg
316
317系统事件查询参数对象接口。
318
319**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
320
321| 名称 | 类型 | 必填 | 说明 |
322| -------- | -------- | -------- | -------- |
323| beginTime | number | 是 | 查询的系统事件起始时间(13位时间戳)。 |
324| endTime | number | 是 | 查询的系统事件结束时间(13位时间戳)。 |
325| maxEvents | number | 是 | 查询的系统事件最多条数。 |
326| fromSeq<sup>10+</sup> | number | 否   | 查询的系统事件起始序列号,默认值为-1。 |
327| toSeq<sup>10+</sup> | number | 否   | 查询的系统事件结束序列号,默认值为-1。 |
328
329## QueryRule
330
331系统事件查询规则对象接口。
332
333**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
334
335| 名称 | 类型 | 必填 | 说明 |
336| -------- | -------- | -------- | -------- |
337| domain | string | 是 | 查询包含的事件领域。 |
338| names | string[] | 是 | 查询所包含的多个事件名称,每个查询规则对象包含多个系统事件名称。 |
339| condition<sup>10+</sup> | string | 否 | 事件的额外参数条件,格式:{"version":"V1","condition":{"and":[{"param":"参数","op":"操作符","value":"比较值"}]}} |
340
341## Querier
342
343系统事件查询者对象接口。
344
345**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
346
347| 名称 | 类型 | 必填 | 说明 |
348| -------- | -------- | -------- | -------- |
349| onQuery | function | 是 | 返回查询到的系统事件的回调方法(infos: [SysEventInfo](#syseventinfo)[]) => void。 |
350| onComplete | function | 是 | 查询结果统计的回调方法(reason: number, total: number) => void。 |
351
352## hiSysEvent.query
353
354query(queryArg: QueryArg, rules: QueryRule[], querier: Querier): void
355
356查询系统事件。
357
358**需要权限:** ohos.permission.READ_DFX_SYSEVENT
359
360**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
361
362**参数:**
363
364| 参数名 | 类型 | 必填 | 说明 |
365| ------ | ----------------------------- | ---- | ------------------------ |
366| queryArg | [QueryArg](#queryarg) | 是   | 查询需要配置的查询参数。 |
367| rules | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次查询可配置多个查询规则。 |
368| querier | [Querier](#querier) | 是   | 查询者对象,包含查询结果及结束的相关回调。 |
369
370**错误码:**
371
372以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
373
374| 错误码ID | 错误信息 |
375| -------- | ------------------------------------------- |
376| 11200301 | Count of query rules is over limit.         |
377| 11200302 | Invalid query rule.                         |
378| 11200303 | Count of concurrent queriers is over limit. |
379| 11200304 | Query frequency is over limit.              |
380
381**示例:**
382
383```ts
384import hiSysEvent from '@ohos.hiSysEvent';
385import { BusinessError } from '@ohos.base';
386
387try {
388  let customizedParams: Record<string, string | number> = {
389    'PID': 487,
390    'UID': 103,
391    'PACKAGE_NAME': "com.ohos.hisysevent.test",
392    'PROCESS_NAME': "syseventservice",
393    'MSG': "no msg."
394  };
395  let eventInfo: hiSysEvent.SysEventInfo = {
396    domain: "RELIABILITY",
397    name: "STACK",
398    eventType: hiSysEvent.EventType.FAULT,
399    params: customizedParams
400  };
401  hiSysEvent.write(eventInfo, (err: BusinessError) => {
402    // do something here.
403  });
404
405  let queryArg: hiSysEvent.QueryArg = {
406    beginTime: -1,
407    endTime: -1,
408    maxEvents: 5,
409  };
410  let queryRules: hiSysEvent.QueryRule[] = [{
411    domain: "RELIABILITY",
412    names: ["STACK"],
413  } as hiSysEvent.QueryRule];
414  let querier: hiSysEvent.Querier = {
415    onQuery: (infos: hiSysEvent.SysEventInfo[]) => {
416      // do something here.
417    },
418    onComplete: (reason: number, total: number) => {
419      // do something here.
420    }
421  };
422  hiSysEvent.query(queryArg, queryRules, querier);
423} catch (err) {
424  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
425}
426```
427
428## hiSysEvent.exportSysEvents<sup>10+</sup>
429
430exportSysEvents(queryArg: QueryArg, rules: QueryRule[]): number
431
432批量导出系统事件,以文件格式写入应用沙箱固定目录(/data/storage/el2/base/cache/hiview/event/)。
433
434**需要权限:** ohos.permission.READ_DFX_SYSEVENT
435
436**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
437
438**参数:**
439
440| 参数名   | 类型                      | 必填 | 说明                                       |
441| -------- | ------------------------- | ---- | ------------------------------------------ |
442| queryArg | [QueryArg](#queryarg)     | 是   | 导出需要配置的查询参数。                   |
443| rules    | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次导出可配置多个查询规则。 |
444
445**返回值:**
446
447| 类型   | 说明             |
448| ------ | ---------------- |
449| number | 接口调用时间戳。 |
450
451**错误码:**
452
453以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
454
455| 错误码ID | 错误信息                            |
456| -------- | ----------------------------------- |
457| 11200301 | Count of query rules is over limit. |
458| 11200302 | Invalid query rule.                 |
459| 11200304 | Export frequency is over limit.     |
460
461**示例:**
462
463```ts
464import hiSysEvent from '@ohos.hiSysEvent';
465import fs from '@ohos.file.fs';
466import { BusinessError } from '@ohos.base';
467
468try {
469  let customizedParams: Record<string, string | number> = {
470    'PID': 487,
471    'UID': 103,
472    'PACKAGE_NAME': "com.ohos.hisysevent.test",
473    'PROCESS_NAME': "syseventservice",
474    'MSG': "no msg."
475  };
476  let eventInfo: hiSysEvent.SysEventInfo = {
477    domain: "RELIABILITY",
478    name: "STACK",
479    eventType: hiSysEvent.EventType.FAULT,
480    params: customizedParams
481  };
482  hiSysEvent.write(eventInfo, (err: BusinessError) => {
483    // do something here.
484  });
485
486  let queryArg: hiSysEvent.QueryArg = {
487    beginTime: -1,
488    endTime: -1,
489    maxEvents: 1,
490  };
491  let queryRules: hiSysEvent.QueryRule[] = [{
492    domain: "RELIABILITY",
493    names: ["STACK"],
494  } as hiSysEvent.QueryRule];
495  let time = hiSysEvent.exportSysEvents(queryArg, queryRules);
496  console.log(`receive export task time is : ${time}`);
497
498  // 延迟读取本次导出的事件
499  setTimeout(() => {
500    let eventDir = '/data/storage/el2/base/cache/hiview/event';
501    let filenames = fs.listFileSync(eventDir);
502    for (let i = 0; i < filenames.length; i++) {
503      if (filenames[i].indexOf(time.toString()) != -1) {
504        let res = fs.readTextSync(eventDir + '/' + filenames[i]);
505        let events: string = JSON.parse('[' + res.slice(0, res.length - 1) + ']');
506        console.log("read file end, events is :" + JSON.stringify(events));
507      }
508    }
509  }, 10000);
510} catch (err) {
511  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
512}
513```
514
515## hiSysEvent.subscribe<sup>10+</sup>
516
517subscribe(rules: QueryRule[]): number
518
519订阅实时系统事件(事件需满足低频率或偶发性的约束条件),事件发生时立即以文件格式写入应用沙箱固定目录(/data/storage/el2/base/cache/hiview/event/)。
520
521**需要权限:** ohos.permission.READ_DFX_SYSEVENT
522
523**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
524
525**参数:**
526
527| 参数名 | 类型                      | 必填 | 说明                                       |
528| ------ | ------------------------- | ---- | ------------------------------------------ |
529| rules  | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次订阅可配置多个查询规则。 |
530
531**返回值:**
532
533| 类型   | 说明             |
534| ------ | ---------------- |
535| number | 接口调用时间戳。 |
536
537**错误码:**
538
539以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
540
541| 错误码ID | 错误信息                            |
542| -------- | ----------------------------------- |
543| 11200301 | Count of query rules is over limit. |
544| 11200302 | Invalid query rule.                 |
545
546**示例:**
547
548```ts
549import hiSysEvent from '@ohos.hiSysEvent';
550import fs from '@ohos.file.fs';
551import { BusinessError } from '@ohos.base';
552
553try {
554  let rules: hiSysEvent.QueryRule[] = [{
555    domain: "RELIABILITY",
556    names: ["STACK"],
557  } as hiSysEvent.QueryRule,
558  {
559    domain: "BUNDLE_MANAGER",
560    names: ["BUNDLE_UNINSTALL"],
561  } as hiSysEvent.QueryRule];
562  hiSysEvent.subscribe(rules);
563
564  let customizedParams: Record<string, string | number> = {
565    'PID': 487,
566    'UID': 103,
567    'PACKAGE_NAME': "com.ohos.hisysevent.test",
568    'PROCESS_NAME': "syseventservice",
569    'MSG': "no msg."
570  };
571  let eventInfo: hiSysEvent.SysEventInfo = {
572    domain: "RELIABILITY",
573    name: "STACK",
574    eventType: hiSysEvent.EventType.FAULT,
575    params: customizedParams
576  };
577  hiSysEvent.write(eventInfo, (err: BusinessError) => {
578    // do something here.
579  });
580
581  // 延迟读取订阅的事件
582  setTimeout(() => {
583    let eventDir = '/data/storage/el2/base/cache/hiview/event';
584    let filenames = fs.listFileSync(eventDir);
585    for (let i = 0; i < filenames.length; i++) {
586      let res = fs.readTextSync(eventDir + '/' + filenames[i]);
587      let events: string = JSON.parse('[' + res.slice(0, res.length - 1) + ']');
588      console.log("read file end, events is :" + JSON.stringify(events));
589    }
590  }, 10000);
591} catch (err) {
592  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
593}
594```
595
596## hiSysEvent.unsubscribe<sup>10+</sup>
597
598unsubscribe(): void
599
600取消订阅系统事件。
601
602**需要权限:** ohos.permission.READ_DFX_SYSEVENT
603
604**系统能力:** SystemCapability.HiviewDFX.HiSysEvent
605
606**错误码:**
607
608以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)。
609
610| 错误码ID | 错误信息            |
611| -------- | ------------------- |
612| 11200305 | Unsubscribe failed. |
613
614**示例:**
615
616```ts
617import hiSysEvent from '@ohos.hiSysEvent';
618import { BusinessError } from '@ohos.base';
619
620try {
621  let rules: hiSysEvent.QueryRule[] = [{
622    domain: "RELIABILITY",
623    names: ["STACK"],
624  } as hiSysEvent.QueryRule,
625  {
626    domain: "BUNDLE_MANAGER",
627    names: ["BUNDLE_UNINSTALL"],
628  } as hiSysEvent.QueryRule];
629  hiSysEvent.subscribe(rules);
630  hiSysEvent.unsubscribe();
631} catch (err) {
632  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
633}
634```
635
636