js-apis-hiviewdfx-hiappevent.md 17.8 KB
Newer Older
1
# @ohos.hiviewdfx.hiAppEvent (应用事件打点)
L
lyj_love_code 已提交
2 3 4

本模块提供了应用事件打点能力,包括应用事件落盘、应用事件订阅、应用事件清理、打点功能配置等功能。

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


## 导入模块

12
```ts
L
lyj_love_code 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import hiAppEvent from '@ohos.hiviewdfx.hiAppEvent';
```

## hiAppEvent.write

write(info: [AppEventInfo](#appeventinfo), callback: AsyncCallback<void>): void

应用事件打点方法,将事件写入到当天的事件文件中,可接收[AppEventInfo](#appeventinfo)类型的事件对象,使用callback方式作为异步回调。

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

**参数:**

| 参数名   | 类型                           | 必填 | 说明           |
| -------- | ------------------------------ | ---- | -------------- |
| info     | [AppEventInfo](#appeventinfo) | 是   | 应用事件对象。 |
29
| callback | AsyncCallback<void>      | 是   | 打点回调函数。 |
L
lyj_love_code 已提交
30 31 32

**错误码:**

33
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46

| 错误码ID | 错误信息                                      |
| -------- | --------------------------------------------- |
| 11100001 | Function is disabled.                         |
| 11101001 | Invalid event domain.                         |
| 11101002 | Invalid event name.                           |
| 11101003 | Invalid number of event parameters.           |
| 11101004 | Invalid string length of the event parameter. |
| 11101005 | Invalid event parameter name.                 |
| 11101006 | Invalid array length of the event parameter.  |

**示例:**

47 48 49 50 51 52 53
```ts
import { BusinessError } from 'ohos.base';

let eventParams: Record<string, number | string> = {
  "int_data": 100,
  "str_data": "strValue",
};
L
lyj_love_code 已提交
54
hiAppEvent.write({
55 56 57 58 59 60 61 62 63 64
  domain: "test_domain",
  name: "test_event",
  eventType: hiAppEvent.EventType.FAULT,
  params: eventParams,
}, (err: BusinessError) => {
  if (err) {
    console.error(`code: ${err.code}, message: ${err.message}`);
    return;
  }
  console.log(`success to write event`);
L
lyj_love_code 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
});
```

## hiAppEvent.write

write(info: [AppEventInfo](#appeventinfo)): Promise&lt;void&gt;

应用事件打点方法,将事件写入到当天的事件文件中,可接收[AppEventInfo](#appeventinfo)类型的事件对象,使用Promise方式作为异步回调。

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

**参数:**

| 参数名 | 类型                           | 必填 | 说明           |
| ------ | ------------------------------ | ---- | -------------- |
| info   | [AppEventInfo](#appeventinfo) | 是   | 应用事件对象。 |

**返回值:**

84 85 86
| 类型                | 说明          |
| ------------------- | ------------- |
| Promise&lt;void&gt; | Promise对象。 |
L
lyj_love_code 已提交
87 88 89

**错误码:**

90
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103

| 错误码ID | 错误信息                                      |
| -------- | --------------------------------------------- |
| 11100001 | Function is disabled.                         |
| 11101001 | Invalid event domain.                         |
| 11101002 | Invalid event name.                           |
| 11101003 | Invalid number of event parameters.           |
| 11101004 | Invalid string length of the event parameter. |
| 11101005 | Invalid event parameter name.                 |
| 11101006 | Invalid array length of the event parameter.  |

**示例:**

104 105 106 107 108 109 110
```ts
import { BusinessError } from 'ohos.base';

let eventParams: Record<string, number | string> = {
  "int_data": 100,
  "str_data": "strValue",
};
L
lyj_love_code 已提交
111
hiAppEvent.write({
112 113 114 115
  domain: "test_domain",
  name: "test_event",
  eventType: hiAppEvent.EventType.FAULT,
  params: eventParams,
L
lyj_love_code 已提交
116
}).then(() => {
117 118 119
  console.log(`success to write event`);
}).catch((err: BusinessError) => {
  console.error(`code: ${err.code}, message: ${err.message}`);
L
lyj_love_code 已提交
120 121 122 123 124 125 126 127 128
});
```

## AppEventInfo

此接口提供了应用事件信息的参数选项。

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

129 130
| 名称      | 类型                    | 必填 | 说明                                                         |
| --------- | ----------------------- | ---- | ------------------------------------------------------------ |
131
| domain    | string                  | 是   | 事件领域。事件领域名称支持数字、小写字母、下划线字符,需要以小写字母开头且不能以下划线结尾,长度非空且不超过16个字符。 |
132
| name      | string                  | 是   | 事件名称。事件名称支持数字字符、字母字符、下划线字符,需要以字母字符或$字符开头且不能以下划线字符结尾,长度非空且不超过48个字符。 |
133
| eventType | [EventType](#eventtype) | 是   | 事件类型。                                                   |
134
| params    | object                  | 是   | 事件参数对象,每个事件参数包括参数名和参数值,其规格定义如下:<br>- 参数名为string类型,只支持数字字符、字母字符、下划线字符,需要以字母字符或$字符开头且不能以下划线字符结尾,长度非空且不超过16个字符。<br>- 参数值支持string、number、boolean、数组类型,string类型参数长度需在8*1024个字符以内,超出会做丢弃处理;number类型参数取值需在Number.MIN_SAFE_INTEGER~Number.MAX_SAFE_INTEGER范围内,超出可能会产生不确定值;数组类型参数中的元素类型只能全为string、number、boolean中的一种,且元素个数需在100以内,超出会做丢弃处理。<br>- 参数个数需在32个以内,超出的参数会做丢弃处理。 |
L
lyj_love_code 已提交
135 136 137

## hiAppEvent.configure

138
configure(config: [ConfigOption](configoption)): void
L
lyj_love_code 已提交
139

140
应用事件打点配置方法,可用于配置打点开关、目录存储配额大小等功能。
L
lyj_love_code 已提交
141 142 143 144 145 146 147 148 149 150 151

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

**参数:**

| 参数名 | 类型                          | 必填 | 说明                     |
| ------ | ----------------------------- | ---- | ------------------------ |
| config | [ConfigOption](#configoption) | 是   | 应用事件打点配置项对象。 |

**错误码:**

152
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
153 154 155 156 157 158 159

| 错误码ID | 错误信息                         |
| -------- | -------------------------------- |
| 11103001 | Invalid max storage quota value. |

**示例:**

160
```ts
161
// 配置打点开关为关闭状态
162 163 164 165
let config1: hiAppEvent.ConfigOption = {
  disable: true,
};
hiAppEvent.configure(config1);
L
lyj_love_code 已提交
166

167
// 配置文件目录存储配额为100M
168 169 170 171
let config2: hiAppEvent.ConfigOption = {
  maxStorage: '100M',
};
hiAppEvent.configure(config2);
L
lyj_love_code 已提交
172 173 174 175
```

## ConfigOption

176
此接口提供了对应用事件打点功能的配置选项。
L
lyj_love_code 已提交
177 178 179

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

180
| 名称       | 类型    | 必填 | 说明                                                         |
L
lyj_love_code 已提交
181
| ---------- | ------- | ---- | ------------------------------------------------------------ |
182 183
| disable    | boolean | 否   | 打点功能开关,默认值为false。true:关闭打点功能,false:不关闭打点功能。 |
| maxStorage | string  | 否   | 打点数据存放目录的配额大小,默认值为“10M”。<br>在目录大小超出配额后,下次打点会触发对目录的清理操作:按从旧到新的顺序逐个删除打点数据文件,直到目录大小不超出配额时结束。 |
L
lyj_love_code 已提交
184 185 186 187 188

## hiAppEvent.addWatcher

addWatcher(watcher: [Watcher](#watcher)): [AppEventPackageHolder](#appeventpackageholder)

189
添加应用事件观察者方法,可用于订阅应用事件。
L
lyj_love_code 已提交
190 191 192 193 194 195 196

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

**参数:**

| 参数名  | 类型                 | 必填 | 说明             |
| ------- | -------------------- | ---- | ---------------- |
197
| watcher | [Watcher](#watcher) | 是   | 应用事件观察者。 |
L
lyj_love_code 已提交
198 199 200 201 202 203 204 205 206

**返回值:**

| 类型                                             | 说明                                 |
| ------------------------------------------------ | ------------------------------------ |
| [AppEventPackageHolder](#appeventpackageholder) | 订阅数据持有者,订阅失败时返回null。 |

**错误码:**

207
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
208 209 210 211 212 213 214 215 216 217 218

| 错误码ID | 错误信息                        |
| -------- | ------------------------------- |
| 11102001 | Invalid watcher name.           |
| 11102002 | Invalid filtering event domain. |
| 11102003 | Invalid row value.              |
| 11102004 | Invalid size value.             |
| 11102005 | Invalid timeout value.          |

**示例:**

219
```ts
220
// 1. 如果观察者传入了回调的相关参数,则可以选择在自动触发的回调函数中对订阅事件进行处理
L
lyj_love_code 已提交
221
hiAppEvent.addWatcher({
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
  name: "watcher1",
  appEventFilters: [
    {
      domain: "test_domain",
      eventTypes: [hiAppEvent.EventType.FAULT, hiAppEvent.EventType.BEHAVIOR]
    }
  ],
  triggerCondition: {
    row: 10,
    size: 1000,
    timeOut: 1
  },
  onTrigger: (curRow: number, curSize: number, holder: hiAppEvent.AppEventPackageHolder) => {
    if (holder == null) {
      console.error("holder is null");
      return;
L
lyj_love_code 已提交
238
    }
239 240 241 242 243 244 245 246 247 248 249
    console.info(`curRow=${curRow}, curSize=${curSize}`);
    let eventPkg: hiAppEvent.AppEventPackage | null = null;
    while ((eventPkg = holder.takeNext()) != null) {
      console.info(`eventPkg.packageId=${eventPkg.packageId}`);
      console.info(`eventPkg.row=${eventPkg.row}`);
      console.info(`eventPkg.size=${eventPkg.size}`);
      for (const eventInfo of eventPkg.data) {
        console.info(`eventPkg.data=${eventInfo}`);
      }
    }
  }
L
lyj_love_code 已提交
250 251
});

252
// 2. 如果观察者未传入回调的相关参数,则可以选择使用返回的holder对象手动去处理订阅事件
L
lyj_love_code 已提交
253
let holder = hiAppEvent.addWatcher({
254
  name: "watcher2",
L
lyj_love_code 已提交
255 256
});
if (holder != null) {
257 258 259 260 261 262 263
  let eventPkg: hiAppEvent.AppEventPackage | null = null;
  while ((eventPkg = holder.takeNext()) != null) {
    console.info(`eventPkg.packageId=${eventPkg.packageId}`);
    console.info(`eventPkg.row=${eventPkg.row}`);
    console.info(`eventPkg.size=${eventPkg.size}`);
    for (const eventInfo of eventPkg.data) {
      console.info(`eventPkg.data=${eventInfo}`);
L
lyj_love_code 已提交
264
    }
265
  }
L
lyj_love_code 已提交
266 267 268 269 270 271 272
}
```

## hiAppEvent.removeWatcher

removeWatcher(watcher: [Watcher](#watcher)): void

273
移除应用事件观察者方法,可用于取消订阅应用事件。
L
lyj_love_code 已提交
274 275 276 277 278 279 280

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

**参数:**

| 参数名  | 类型                 | 必填 | 说明             |
| ------- | -------------------- | ---- | ---------------- |
281
| watcher | [Watcher](#watcher) | 是   | 应用事件观察者。 |
L
lyj_love_code 已提交
282 283 284

**错误码:**

285
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
286 287 288 289 290 291 292

| 错误码ID | 错误信息              |
| -------- | --------------------- |
| 11102001 | Invalid watcher name. |

**示例:**

293
```ts
294
// 1. 定义一个应用事件观察者
295 296
let watcher: hiAppEvent.Watcher = {
  name: "watcher1",
L
lyj_love_code 已提交
297 298
}

299
// 2. 添加一个应用事件观察者来订阅事件
L
lyj_love_code 已提交
300 301
hiAppEvent.addWatcher(watcher);

302
// 3. 移除该应用事件观察者以取消订阅事件
L
lyj_love_code 已提交
303 304 305 306 307
hiAppEvent.removeWatcher(watcher);
```

## Watcher

308
此接口提供了应用事件观察者的参数选项。
L
lyj_love_code 已提交
309 310 311

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

312
| 名称             | 类型                                                         | 必填 | 说明                                                         |
313 314 315 316 317
| ---------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| name             | string                                                       | 是   | 观察者名称,用于唯一标识观察者。                             |
| triggerCondition | [TriggerCondition](#triggercondition)                        | 否   | 订阅回调触发条件,需要与回调函数一同传入才会生效。           |
| appEventFilters  | [AppEventFilter](#appeventfilter)[]                          | 否   | 订阅过滤条件,在需要对订阅事件进行过滤时传入。               |
| onTrigger        | (curRow: number, curSize: number, holder: [AppEventPackageHolder](#appeventpackageholder)) => void | 否   | 订阅回调函数,需要与回调触发条件一同传入才会生效,函数入参说明如下:<br>curRow:在本次回调触发时的订阅事件总数量; <br>curSize:在本次回调触发时的订阅事件总大小,单位为byte;  <br/>holder:订阅数据持有者对象,可以通过其对订阅事件进行处理。 |
L
lyj_love_code 已提交
318 319 320

## TriggerCondition

321
此接口提供了回调触发条件的参数选项,只要满足任一条件就会触发订阅回调。
L
lyj_love_code 已提交
322 323 324

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

325 326 327 328 329
| 名称    | 类型   | 必填 | 说明                                   |
| ------- | ------ | ---- | -------------------------------------- |
| row     | number | 否   | 满足触发回调的事件总数量。             |
| size    | number | 否   | 满足触发回调的事件总大小,单位为byte。 |
| timeOut | number | 否   | 满足触发回调的超时时长,单位为30s。    |
L
lyj_love_code 已提交
330 331 332

## AppEventFilter

333
此接口提供了过滤应用事件的参数选项。
L
lyj_love_code 已提交
334 335 336

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

337
| 名称       | 类型                      | 必填 | 说明                     |
L
lyj_love_code 已提交
338 339 340 341 342 343 344 345 346 347 348 349
| ---------- | ------------------------- | ---- | ------------------------ |
| domain     | string                    | 是   | 需要订阅的事件领域。     |
| eventTypes | [EventType](#eventtype)[] | 否   | 需要订阅的事件类型集合。 |

## AppEventPackageHolder

订阅数据持有者类,用于对订阅事件进行处理。

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

### constructor

350
constructor(watcherName: string)
L
lyj_love_code 已提交
351

352
类构造函数,在添加应用事件观察者时,会由系统自动调用来创建一个该观察者对应的订阅数据持有者对象,并返回给开发者。
L
lyj_love_code 已提交
353 354 355

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

356 357 358 359 360 361
**参数:**

| 参数名 | 类型              | 必填 | 说明                     |
| ------ | ----------------- | ---- | ------------------------ |
| watcherName | string | 是   | 观察者名称。 |

L
lyj_love_code 已提交
362 363
**示例:**

364 365 366
```ts
let holder1 = hiAppEvent.addWatcher({
    name: "watcher1",
L
lyj_love_code 已提交
367 368 369 370 371 372 373
});
```

### setSize

setSize(size: number): void

374
设置每次取出的应用事件包的数据大小阈值。
L
lyj_love_code 已提交
375 376 377

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

378 379 380 381 382 383
**参数:**

| 参数名 | 类型   | 必填 | 说明                                         |
| ------ | ------ | ---- | -------------------------------------------- |
| size   | number | 是   | 数据大小阈值,单位为byte,默认值为512*1024。 |

L
lyj_love_code 已提交
384 385
**错误码:**

386
以下错误码的详细介绍请参见[应用事件打点错误码](../errorcodes/errorcode-hiappevent.md)
L
lyj_love_code 已提交
387 388 389 390 391 392 393

| 错误码ID | 错误信息            |
| -------- | ------------------- |
| 11104001 | Invalid size value. |

**示例:**

394 395 396
```ts
let holder2 = hiAppEvent.addWatcher({
    name: "watcher2",
L
lyj_love_code 已提交
397
});
398
holder2.setSize(1000);
L
lyj_love_code 已提交
399 400 401 402 403 404 405 406 407 408 409 410
```

### takeNext

takeNext(): [AppEventPackage](#appeventpackage)

根据设置的数据大小阈值来取出订阅事件数据,当订阅事件数据全部被取出时返回null作为标识。

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

**示例:**

411 412 413
```ts
let holder3 = hiAppEvent.addWatcher({
    name: "watcher3",
L
lyj_love_code 已提交
414
});
415
let eventPkg = holder3.takeNext();
L
lyj_love_code 已提交
416 417 418 419 420 421 422 423
```

## AppEventPackage

此接口提供了订阅返回的应用事件包的参数定义。

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

424 425 426 427 428 429
| 名称      | 类型     | 必填 | 说明                           |
| --------- | -------- | ---- | ------------------------------ |
| packageId | number   | 是   | 事件包ID,从0开始自动递增。    |
| row       | number   | 是   | 事件包的事件数量。             |
| size      | number   | 是   | 事件包的事件大小,单位为byte。 |
| data      | string[] | 是   | 事件包的事件信息。             |
L
lyj_love_code 已提交
430 431 432 433 434 435 436 437 438 439 440

## hiAppEvent.clearData

clearData(): void

应用事件打点数据清理方法,将应用存储在本地的打点数据进行清除。

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

**示例:**

441
```ts
L
lyj_love_code 已提交
442 443 444 445 446 447 448 449 450 451
hiAppEvent.clearData();
```


## EventType

事件类型枚举。

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

452 453 454 455 456 457
| 名称      | 值   | 说明           |
| --------- | ---- | -------------- |
| FAULT     | 1    | 故障类型事件。 |
| STATISTIC | 2    | 统计类型事件。 |
| SECURITY  | 3    | 安全类型事件。 |
| BEHAVIOR  | 4    | 行为类型事件。 |
L
lyj_love_code 已提交
458 459


460
## event
L
lyj_love_code 已提交
461 462 463 464 465

此接口提供了所有预定义事件的事件名称常量。

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

466 467 468 469 470
| 名称                      | 类型   | 说明                 |
| ------------------------- | ------ | -------------------- |
| USER_LOGIN                | string | 用户登录事件。       |
| USER_LOGOUT               | string | 用户登出事件。       |
| DISTRIBUTED_SERVICE_START | string | 分布式服务启动事件。 |
L
lyj_love_code 已提交
471 472


473
## param
L
lyj_love_code 已提交
474 475 476 477 478

此接口提供了所有预定义参数的参数名称常量。

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

479 480 481 482 483
| 名称                            | 类型   | 说明               |
| ------------------------------- | ------ | ------------------ |
| USER_ID                         | string | 用户自定义ID。     |
| DISTRIBUTED_SERVICE_NAME        | string | 分布式服务名称。   |
| DISTRIBUTED_SERVICE_INSTANCE_ID | string | 分布式服务实例ID。 |