js-apis-hisysevent.md 20.3 KB
Newer Older
1
# @ohos.hiSysEvent (系统事件打点)
2

X
xuyong 已提交
3
本模块提供了系统事件打点能力,包括系统事件的埋点、落盘系统事件的订阅及已落盘的系统事件的查询能力。
4

5
> **说明:**
6
>
7
> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
> - 本模块的接口为系统接口。
9 10 11 12


## 导入模块

13
```ts
14 15 16 17 18 19 20 21 22
import hiSysEvent from '@ohos.hiSysEvent';
```

## EventType

系统事件类型枚举。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

23
| 名称 | 值 | 说明 |
24 25 26 27 28 29 30 31 32 33 34 35
| -------- | -------- | -------- |
| FAULT | 1 | 错误事件类型。 |
| STATISTIC | 2 | 统计事件类型。 |
| SECURITY | 3 | 安全事件类型。 |
| BEHAVIOR | 4 | 用户行为事件类型。 |

## SysEventInfo

系统事件信息对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

36
| 名称 | 类型 | 必填 | 说明 |
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| -------- | -------- | -------- | -------- |
| domain | string | 是 | 事件领域。 |
| name | string | 是 | 事件名称。 |
| eventType | [EventType](#eventtype) | 是 | 事件类型。 |
| params | object | 否 | 事件参数。 |


## hiSysEvent.write

write(info: SysEventInfo, callback: AsyncCallback<void>): void

系统事件打点方法,接收[SysEventInfo](#syseventinfo)类型的对象作为事件参数,使用callback方式作为异步回调。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名    | 类型                      | 必填 | 说明                                                         |
| --------- | ------------------------- | ---- | ------------------------------------------------------------ |
| info | [SysEventInfo](#syseventinfo) | 是 | 系统事件。 |
57
| callback  | AsyncCallback&lt;void&gt; | 是 | 回调函数,可以在回调函数中处理接口返回值。<br/>- 0表示事件校验成功,事件正常异步写入事件文件;<br/>- 正值表示事件打点存在异常,但可以正常写入;<br/>- 负值表示事件打点失败。 |
58

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------------------------------------------------- |
| 11200001 | Invalid event domain.                                            |
| 11200002 | Invalid event name.                                              |
| 11200003 | Abnormal environment.                                            |
| 11200004 | Length of the event is over limit.                               |
| 11200051 | Invalid event parameter.                                         |
| 11200052 | Size of the event parameter of the string type is over limit.    |
| 11200053 | Count of event parameters is over limit.                         |
| 11200054 | Count of event parameter of the array type is over limit.        |

74 75
**示例:**

76
```ts
77
import hiSysEvent from '@ohos.hiSysEvent';
78
import { BusinessError } from '@ohos.base';
79

80
try {
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
  let customizedParams: Record<string, string | number> = {
    'PID': 487,
    'UID': 103,
    'PACKAGE_NAME': "com.ohos.hisysevent.test",
    'PROCESS_NAME': "syseventservice",
    'MSG': "no msg."
  };
  let eventInfo: hiSysEvent.SysEventInfo = {
    domain: "RELIABILITY",
    name: "STACK",
    eventType: hiSysEvent.EventType.FAULT,
    params: customizedParams
  };
  hiSysEvent.write(eventInfo, (err: BusinessError, val: number) => {
    // do something here.
  });
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
99
}
100 101 102 103 104
```


## hiSysEvent.write

X
xuyong 已提交
105
write(info: SysEventInfo): Promise&lt;void&gt;
106 107 108 109 110 111 112 113 114

系统事件打点方法,接收[SysEventInfo](#syseventinfo)类型的对象作为事件参数,使用promise方式作为异步回调。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名    | 类型                    | 必填 | 说明 |
| --------- | ----------------------- | ---- | --------------- |
115
| info | [SysEventInfo](#syseventinfo) | 是   | 系统事件。 |
116 117 118 119 120 121 122

**返回值:**

| 类型                | 说明                                                         |
| ------------------- | ------------------------------------------------------------ |
| Promise&lt;void&gt; | Promise实例,可以在其then()、catch()方法中分别对系统事件写入成功、写入异常的回调进行处理。 |

123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息 |
| -------- | ---------------------------------------------------------------- |
| 11200001 | Invalid event domain.                                            |
| 11200002 | Invalid event name.                                              |
| 11200003 | Abnormal environment.                                            |
| 11200004 | Length of the event is over limit.                               |
| 11200051 | Invalid event parameter.                                         |
| 11200052 | Size of the event parameter of the string type is over limit.    |
| 11200053 | Count of event parameters is over limit.                         |
| 11200054 | Count of event parameter of the array type is over limit.        |

138 139
**示例:**

140
```ts
141
import hiSysEvent from '@ohos.hiSysEvent';
142
import { BusinessError } from '@ohos.base';
143

144
try {
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
  let customizedParams: Record<string, string | number> = {
    'PID': 487,
    'UID': 103,
    'PACKAGE_NAME': "com.ohos.hisysevent.test",
    'PROCESS_NAME': "syseventservice",
    'MSG': "no msg."
  };
  let eventInfo: hiSysEvent.SysEventInfo = {
    domain: "RELIABILITY",
    name: "STACK",
    eventType: hiSysEvent.EventType.FAULT,
    params: customizedParams
  };
  hiSysEvent.write(eventInfo).then(
    (val: number) => {
      // do something here.
    }
  ).catch(
    (err: BusinessError) => {
      console.error(`error code: ${err.code}, error msg: ${err.message}`);
    }
166
  );
167 168
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
169
}
170 171 172 173 174 175 176 177
```

## RuleType

匹配规则类型枚举。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

178
| 名称 | 值 | 说明 |
179 180 181 182 183 184 185 186 187 188 189
| -------- | -------- | -------- |
| WHOLE_WORD | 1 | 全词匹配类型。 |
| PREFIX | 2 | 前缀匹配类型。 |
| REGULAR | 3 | 正则匹配类型。 |

## WatchRule

系统事件订阅规则对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

190
| 名称 | 类型 | 必填 | 说明 |
191 192 193
| -------- | -------- | -------- | -------- |
| domain | string | 是 | 事件领域。 |
| name | string | 是 | 事件名称。 |
X
xuyong 已提交
194
| tag | string | 否 | 事件标签。 |
195 196 197 198 199 200 201 202
| ruleType | [RuleType](#ruletype) | 是 | 匹配规则类型。 |

## Watcher

系统事件订阅者对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

203
| 名称 | 类型 | 必填 | 说明 |
204 205 206 207 208 209 210
| -------- | -------- | -------- | -------- |
| rules | [WatchRule](#watchrule)[] | 是 | 订阅对象数组,每个订阅者对象包含多个订阅规则。 |
| onEvent | function | 是 | 订阅事件的回调方法(info: [SysEventInfo](#syseventinfo)) => void。 |
| onServiceDied | function | 是 | 系统事件服务关闭的回调方法() => void。 |

## hiSysEvent.addWatcher

211
addWatcher(watcher: Watcher): void
212 213 214 215 216 217 218 219 220 221 222 223 224

订阅系统事件,接收[Watcher](#watcher)类型的对象作为事件参数。

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ------------------------ |
| watcher | [Watcher](#watcher) | 是 | 系统事件订阅者对象。 |

225 226 227 228 229 230 231 232 233
**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息 |
| -------- | ----------------------------------- |
| 11200101 | Count of watchers is over limit.    |
| 11200102 | Count of watch rules is over limit. |

234 235
**示例:**

236
```ts
237
import hiSysEvent from '@ohos.hiSysEvent';
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
import { BusinessError } from '@ohos.base';

let watchRules: hiSysEvent.WatchRule[] = [{
    domain: "RELIABILITY",
    name: "STACK",
    tag: "STABILITY",
    ruleType: hiSysEvent.RuleType.WHOLE_WORD,
  } as hiSysEvent.WatchRule];
let watcher: hiSysEvent.Watcher = {
  rules: watchRules,
  onEvent: (info: hiSysEvent.SysEventInfo) => {
    // do something here.
  },
  onServiceDied: () => {
    // do something here.
  }
254
};
255
try {
256
  hiSysEvent.addWatcher(watcher);
257 258
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
259 260 261 262 263
}
```

## hiSysEvent.removeWatcher

264
removeWatcher(watcher: Watcher): void
265 266 267 268 269 270 271 272 273 274

取消订阅系统事件,接收[Watcher](#watcher)类型的对象作为事件参数。

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名 | 类型  | 必填 | 说明  |
275
| ------ | ------------- | ---- | ------------------------- |
276 277
| watcher | [Watcher](#watcher) | 是 | 系统事件订阅者对象。 |

278 279 280 281 282 283 284 285
**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息 |
| -------- | --------------------------- |
| 11200201 | The watcher does not exist. |

286 287
**示例:**

288
```ts
289
import hiSysEvent from '@ohos.hiSysEvent';
290 291 292 293 294 295 296
import { BusinessError } from '@ohos.base';

let watchRules: hiSysEvent.WatchRule[] = [{
    domain: "RELIABILITY",
    name: "STACK",
    tag: "STABILITY",
    ruleType: hiSysEvent.RuleType.WHOLE_WORD,
297
  } as hiSysEvent.WatchRule ];
298 299 300 301 302 303 304 305
let watcher: hiSysEvent.Watcher = {
  rules: watchRules,
  onEvent: (info: hiSysEvent.SysEventInfo) => {
    // do something here.
  },
  onServiceDied: () => {
    // do something here.
  }
306
};
307
try {
308 309
  hiSysEvent.addWatcher(watcher);
  hiSysEvent.removeWatcher(watcher);
310 311
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
312 313 314 315 316 317 318 319 320
}
```

## QueryArg

系统事件查询参数对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

321
| 名称 | 类型 | 必填 | 说明 |
322 323 324 325
| -------- | -------- | -------- | -------- |
| beginTime | number | 是 | 查询的系统事件起始时间(13位时间戳)。 |
| endTime | number | 是 | 查询的系统事件结束时间(13位时间戳)。 |
| maxEvents | number | 是 | 查询的系统事件最多条数。 |
C
cbw11zero 已提交
326 327
| fromSeq<sup>10+</sup> | number | 否   | 查询的系统事件起始序列号,默认值为-1。 |
| toSeq<sup>10+</sup> | number | 否   | 查询的系统事件结束序列号,默认值为-1。 |
328 329 330 331 332 333 334

## QueryRule 

系统事件查询规则对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

335
| 名称 | 类型 | 必填 | 说明 |
336 337 338
| -------- | -------- | -------- | -------- |
| domain | string | 是 | 查询包含的事件领域。 |
| names | string[] | 是 | 查询所包含的多个事件名称,每个查询规则对象包含多个系统事件名称。 |
C
cbw11zero 已提交
339
| condition<sup>10+</sup> | string | 否 | 事件的额外参数条件,格式:{"version":"V1","condition":{"and":[{"param":"参数","op":"操作符","value":"比较值"}]}} |
340 341 342 343 344 345 346

## Querier

系统事件查询者对象接口。

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

347
| 名称 | 类型 | 必填 | 说明 |
348
| -------- | -------- | -------- | -------- |
349
| onQuery | function | 是 | 返回查询到的系统事件的回调方法(infos: [SysEventInfo](#syseventinfo)[]) => void。 |
350 351 352 353
| onComplete | function | 是 | 查询结果统计的回调方法(reason: number, total: number) => void。 |

## hiSysEvent.query

354
query(queryArg: QueryArg, rules: QueryRule[], querier: Querier): void
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369

查询系统事件。

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------- | ---- | ------------------------ |
| queryArg | [QueryArg](#queryarg) | 是   | 查询需要配置的查询参数。 |
| rules | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次查询可配置多个查询规则。 |
| querier | [Querier](#querier) | 是   | 查询者对象,包含查询结果及结束的相关回调。 |

370 371 372 373 374 375 376 377 378 379 380
**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息 |
| -------- | ------------------------------------------- |
| 11200301 | Count of query rules is over limit.         |
| 11200302 | Invalid query rule.                         |
| 11200303 | Count of concurrent queriers is over limit. |
| 11200304 | Query frequency is over limit.              |

381 382
**示例:**

383
```ts
384
import hiSysEvent from '@ohos.hiSysEvent';
385
import { BusinessError } from '@ohos.base';
386

387
try {
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
  let customizedParams: Record<string, string | number> = {
    'PID': 487,
    'UID': 103,
    'PACKAGE_NAME': "com.ohos.hisysevent.test",
    'PROCESS_NAME': "syseventservice",
    'MSG': "no msg."
  };
  let eventInfo: hiSysEvent.SysEventInfo = {
    domain: "RELIABILITY",
    name: "STACK",
    eventType: hiSysEvent.EventType.FAULT,
    params: customizedParams
  };
  hiSysEvent.write(eventInfo, (err: BusinessError, val: number) => {
    // do something here.
403
  });
404 405 406 407 408 409 410 411 412

  let queryArg: hiSysEvent.QueryArg = {
    beginTime: -1,
    endTime: -1,
    maxEvents: 5,
  };
  let queryRules: hiSysEvent.QueryRule[] = [{
    domain: "RELIABILITY",
    names: ["STACK"],
413
  } as hiSysEvent.QueryRule];
414 415 416 417 418 419 420
  let querier: hiSysEvent.Querier = {
    onQuery: (infos: hiSysEvent.SysEventInfo[]) => {
      // do something here.
    },
    onComplete: (reason: number, total: number) => {
      // do something here.
    }
421 422
  };
  hiSysEvent.query(queryArg, queryRules, querier);
423 424
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
425
}
426 427
```

C
cbw11zero 已提交
428
## hiSysEvent.exportSysEvents<sup>10+</sup>
429 430 431

exportSysEvents(queryArg: QueryArg, rules: QueryRule[]): number

C
cbw11zero 已提交
432
批量导出系统事件,以文件格式写入应用沙箱固定目录(/data/storage/el2/base/cache/hiview/event/)。
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名   | 类型                      | 必填 | 说明                                       |
| -------- | ------------------------- | ---- | ------------------------------------------ |
| queryArg | [QueryArg](#queryarg)     | 是   | 导出需要配置的查询参数。                   |
| rules    | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次导出可配置多个查询规则。 |

**返回值:**

| 类型   | 说明             |
| ------ | ---------------- |
| number | 接口调用时间戳。 |

**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息                            |
| -------- | ----------------------------------- |
| 11200301 | Count of query rules is over limit. |
| 11200302 | Invalid query rule.                 |
| 11200304 | Export frequency is over limit.     |

**示例:**

463
```ts
464 465
import hiSysEvent from '@ohos.hiSysEvent';
import fs from '@ohos.file.fs';
466
import { BusinessError } from '@ohos.base';
467 468

try {
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483
  let customizedParams: Record<string, string | number> = {
    'PID': 487,
    'UID': 103,
    'PACKAGE_NAME': "com.ohos.hisysevent.test",
    'PROCESS_NAME': "syseventservice",
    'MSG': "no msg."
  };
  let eventInfo: hiSysEvent.SysEventInfo = {
    domain: "RELIABILITY",
    name: "STACK",
    eventType: hiSysEvent.EventType.FAULT,
    params: customizedParams
  };
  hiSysEvent.write(eventInfo, (err: BusinessError, val: number) => {
    // do something here.
484
  });
485 486 487 488 489

  let queryArg: hiSysEvent.QueryArg = {
    beginTime: -1,
    endTime: -1,
    maxEvents: 1,
490
  };
491 492 493
  let queryRules: hiSysEvent.QueryRule[] = [{
    domain: "RELIABILITY",
    names: ["STACK"],
494 495
  } as hiSysEvent.QueryRule];
  let time = hiSysEvent.exportSysEvents(queryArg, queryRules);
496 497 498 499 500 501 502 503 504 505 506 507 508
  console.log(`receive export task time is : ${time}`);

  // 延迟读取本次导出的事件
  setTimeout(() => {
    let eventDir = '/data/storage/el2/base/cache/hiview/event';
    let filenames = fs.listFileSync(eventDir);
    for (let i = 0; i < filenames.length; i++) {
      if (filenames[i].indexOf(time.toString()) != -1) {
        let res = fs.readTextSync(eventDir + '/' + filenames[i]);
        let events: string = JSON.parse('[' + res.slice(0, res.length - 1) + ']');
        console.log("read file end, events is :" + JSON.stringify(events));
      }
    }
509
  }, 10000);
510 511
} catch catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
512 513 514
}
```

C
cbw11zero 已提交
515
## hiSysEvent.subscribe<sup>10+</sup>
516 517 518

subscribe(rules: QueryRule[]): number

C
cbw11zero 已提交
519
订阅实时系统事件(事件需满足低频率或偶发性的约束条件),事件发生时立即以文件格式写入应用沙箱固定目录(/data/storage/el2/base/cache/hiview/event/)。
520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**参数:**

| 参数名 | 类型                      | 必填 | 说明                                       |
| ------ | ------------------------- | ---- | ------------------------------------------ |
| rules  | [QueryRule](#queryrule)[] | 是   | 查询规则数组,每次订阅可配置多个查询规则。 |

**返回值:**

| 类型   | 说明             |
| ------ | ---------------- |
| number | 接口调用时间戳。 |

**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息                            |
| -------- | ----------------------------------- |
| 11200301 | Count of query rules is over limit. |
| 11200302 | Invalid query rule.                 |

**示例:**

548
```ts
549 550
import hiSysEvent from '@ohos.hiSysEvent';
import fs from '@ohos.file.fs';
551
import { BusinessError } from '@ohos.base';
552 553

try {
554 555 556 557 558 559 560 561
  let rules: hiSysEvent.QueryRule[] = [{
    domain: "RELIABILITY",
    names: ["STACK"],
  } as hiSysEvent.QueryRule,
  {
    domain: "BUNDLE_MANAGER",
    names: ["BUNDLE_UNINSTALL"],
  } as hiSysEvent.QueryRule];
562
  hiSysEvent.subscribe(rules);
563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578

  let customizedParams: Record<string, string | number> = {
    'PID': 487,
    'UID': 103,
    'PACKAGE_NAME': "com.ohos.hisysevent.test",
    'PROCESS_NAME': "syseventservice",
    'MSG': "no msg."
  };
  let eventInfo: hiSysEvent.SysEventInfo = {
    domain: "RELIABILITY",
    name: "STACK",
    eventType: hiSysEvent.EventType.FAULT,
    params: customizedParams
  };
  hiSysEvent.write(eventInfo, (err: BusinessError, val: number) => {
    // do something here.
579
  });
580 581 582 583 584 585 586 587 588 589

  // 延迟读取订阅的事件
  setTimeout(() => {
    let eventDir = '/data/storage/el2/base/cache/hiview/event';
    let filenames = fs.listFileSync(eventDir);
    for (let i = 0; i < filenames.length; i++) {
      let res = fs.readTextSync(eventDir + '/' + filenames[i]);
      let events: string = JSON.parse('[' + res.slice(0, res.length - 1) + ']');
      console.log("read file end, events is :" + JSON.stringify(events));
    }
590
  }, 10000);
591 592
} catch catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
593 594 595
}
```

C
cbw11zero 已提交
596
## hiSysEvent.unsubscribe<sup>10+</sup>
597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615

unsubscribe(): void

取消订阅系统事件。

**需要权限:** ohos.permission.READ_DFX_SYSEVENT

**系统能力:** SystemCapability.HiviewDFX.HiSysEvent

**错误码:**

以下错误码的详细介绍请参见[系统事件错误码](../errorcodes/errorcode-hisysevent.md)

| 错误码ID | 错误信息            |
| -------- | ------------------- |
| 11200305 | Unsubscribe failed. |

**示例:**

616
```ts
617
import hiSysEvent from '@ohos.hiSysEvent';
618
import { BusinessError } from '@ohos.base';
619 620

try {
621 622 623 624 625 626 627 628
  let rules: hiSysEvent.QueryRule[] = [{
    domain: "RELIABILITY",
    names: ["STACK"],
  } as hiSysEvent.QueryRule,
  {
    domain: "BUNDLE_MANAGER",
    names: ["BUNDLE_UNINSTALL"],
  } as hiSysEvent.QueryRule];
629
  hiSysEvent.subscribe(rules);
630 631 632
  hiSysEvent.unsubscribe();
} catch (err) {
  console.error(`error code: ${(err as BusinessError).code}, error msg: ${(err as BusinessError).message}`);
633 634 635
}
```