# HiSysEvent打点YAML文件配置指导
- [概述](#section315316685115)
- [yaml文件的编写](#section123181432175113)
- [yaml文件编写规则](#section123181432175133)
- [yaml文件样例](#section123181432175123)
- [yaml文件的验证流程](#section123181432175115)
- [yaml文件的路径配置](#section123181432175135)
- [yaml文件的编译](#section123181432175137)
- [打点验证](#section123181432175139)
## 概述
OpenHarmony编译框架会收集各个部件通过bundle.js文件所指定的yaml文件,然后通过python编译脚本解析校验这些yaml文件。通过解析校验之后,该python脚本还会将这些yaml文件中配置的信息转换成名为“hisysevent.def”的json文件。最后,编译框架会将此json文件打包到rom的在指定路径。
## yaml文件的编写
### yaml文件编写规则
1. 每个部件可以包含一个或多个yaml文件,每个yaml文件只能有一个domain,且不能与其他domain重名,domain的命名规则如下:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围为1~16。
2. 每个domain包含零个或多个event,同一个domain内部的event不能重名,event的命名规则如下:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围1~32;
- 单个domain内部event的个数取值范围0~4096。
3. 每个event包含多个param,同一个event内部的param不能重名,param的命名规则如下:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围1~32;
- 单个event内部param的个数取值范围1~128。
每个event**必须且只能**包含一个名称为```__BASE```的param,此param组成如表1,其他param的名称可以自定义,具体组成如表2:
**表 1**
字段名称
|
描述
|
type
|
字段说明: 必选字段,用来标识该event的类型。
取值范围:
- FAULT:错误类型。
- STATISTIC:统计类型。
- SECURITY:安全性。
- BEHAVIOR:用户行为。
|
level
|
字段作用: 必选字段,用来标识该event的级别。
取值范围:
|
tag
|
字段作用: 可选字段,用来标识该event的标签。
定义规则:
- 最多可同时定义5个标签,标签之间使用空格来分隔。
- 单个标签最多包含16个字符,字符范围[a-zA-Z0-9]。
|
desc
|
字段作用: 必选字段,用来对该event进行描述。
定义规则:
- 至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]
|
**表 2**
字段名称
|
描述
|
type
|
字段说明: 必选字段,用来该param的类型。
取值范围:
- BOOL
- INT8
- UINT8
- INT16
- UINT16
- INT32
- UINT32
- INT64
- UINT64
- FLOAT
- DOUBLE
- STRING
|
arrsize
|
字段作用: 可选字段,用来标识数组类型param的长度。
取值范围: 1~100
|
desc
|
字段作用: 必选字段,用来对该param进行描述。
定义规则:
- 至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]
|
### yaml文件样例
```
##########################################
# the hisysevent definition for module a #
##########################################
domain: MODULEA
EVENT_NAMEA:
__BASE: {type: FAULT, level: CRITICAL, tag: tag1 tag2, desc: event name a}
NAME1: {type: STRING, desc: name1}
NAME2: {type: STRING, desc: name2}
NAME3: {type: UINT16, desc: name3}
EVENT_NAMEB:
__BASE: {type: STATISTIC, level: CRITICAL, desc: event name b}
NAME1: {type: UINT16, desc: name1}
NAME2: {type: UINT32, desc: name2}
```
## yaml文件的验证流程
### yaml文件的路径配置
- 在bundle.js文件中通过```hisysevent_config```属性完成yaml文件的路径指定:
```
{
"name": "@ohos/moduel_a",
"description": "module a",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "moduel_a_path"
},
"dirs": {},
"scripts": {},
"component": {
"name": "hisysevent_native",
"subsystem": "hiviewdfx",
"adapted_system_type": [
"standard"
],
"rom": "",
"ram": "",
"hisysevent_config": [
"//moduel_a_path/yaml_file1.yaml",
"//moduel_a_path/yaml_file2.yaml"
],
"deps": {
"components": [
"hilog_native",
"hitrace_native",
"ipc",
"safwk",
"samgr_standard",
"utils_base"
],
"third_party": []
},
"build": {
}
}
}
```
>![](../public_sys-resources/icon-note.gif) **说明:**
>yaml文件可根据实际需求置于部件工程的任意目录下,只要在bundle.js文件指定即可。
### yaml文件的编译
- 全量编译:
- 全量编译整个系统,会将所有部件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。
```
cd 工程根目录的绝对路径 | ./build --product-name
```
- 全量编译生成的hisysevent.def文件可以通过以下命令获取:
```
cd 工程根目录的绝对路径 | find out -name hisysevent.def -type f
```
- 单文件编译:
也可以只编译单个部件的yaml文件,命令如下:
```
cd 工程根目录的绝对路径 | ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list --def-path
```
**表 3**
选项名称
|
描述
|
--yaml-list
|
指定需要编译的yaml文件路径列表 多个yaml文件路径之间用空格分隔
|
--def-path
|
指定编译生成的hisysevent.def文件的生成路径
|
### 打点验证
1. 通过[hdc工具](subsys-toolchain-hdc-guide.md)将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下;
2. 触发HiSysEvent事件打点,通过[hisysevent工具](subsys-dfx-hisysevent-tool.md)查询历史HiSysEvent事件,确认触发的HiSysEvent事件是否打点成功。