diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-read.md b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-read.md index b4aaf98e1c28e2f7e20f82ee0b4f4ffaf4f7ad42..47b2c47a8457a9aa495546e64be3b3863322390e 100644 --- a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-read.md +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-read.md @@ -2,9 +2,9 @@ - [概述](#section315316685112) - [接口说明](#section0342191810519) -- [开发指导](#section123181432175110) - - [C++开发](#section2016116181902) - +- [订阅HiSysEvent事件](#section123181432175110) + - [编译配置](#section123181432175187) + - [源代码开发](#section123181432175165) ## 概述 @@ -112,76 +112,71 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接 -## 开发指导 - -### C++开发 - -1. 编译配置: - - - 编译配置文件中添加对hisysevent\_native部件libhisyseventmanager库的依赖。 - - ``` - external_deps = [ "hisysevent_native:libhisyseventmanager", ] - ``` +## 订阅HiSysEvent事件 +### 编译配置 -2. 源代码开发: +编译配置文件中增加对hisysevent\_native组件libhisyseventmanager库的依赖: - - 自定义订阅回调实现类DemoListener: +``` +external_deps = [ "hisysevent_native:libhisyseventmanager", ] +``` - ``` - #ifndef DEMO_LISTENER_H - #define DEMO_LISTENER_H +### 源代码开发 - #include "hisysevent_subscribe_callback_native.h" +- 自定义订阅回调实现类DemoListener: - #include +``` +#ifndef DEMO_LISTENER_H +#define DEMO_LISTENER_H - class DemoListener : public OHOS::HiviewDFX::HiSysEventSubscribeCallBackNative { - public: - explicit DemoListener() : HiSysEventSubscribeCallBackNative() {} - void OnHandle(const std::string& domain, const std::string& eventName, const int eventType, - const std::string& eventDetail); - virtual ~DemoListener() {} - void OnServiceDied(); - }; - ``` +#include "hisysevent_subscribe_callback_native.h" - - 实现订阅回调接口: +#include - ``` - #include "demo_listener.h" +class DemoListener : public OHOS::HiviewDFX::HiSysEventSubscribeCallBackNative { +public: + explicit DemoListener() : HiSysEventSubscribeCallBackNative() {} + void OnHandle(const std::string& domain, const std::string& eventName, const int eventType, + const std::string& eventDetail); + virtual ~DemoListener() {} + void OnServiceDied(); +}; +``` - #include +- 实现订阅回调接口: - void DemoListener::OnHandle(const std::string& domain, const std::string& eventName, - const int eventType, const std::string& eventDetail) - { - std::cout << eventDetail << std::endl; - } +``` +#include "demo_listener.h" - void DemoListener::OnServiceDied() - { - std::cout << std::string("service disconnect, exit") << std::endl; - exit(0); - } - ``` +#include - - 通过HiSysEventManager类提供的AddEventListener接口注册回调对象: +void DemoListener::OnHandle(const std::string& domain, const std::string& eventName, + const int eventType, const std::string& eventDetail) +{ + std::cout << eventDetail << std::endl; +} - ``` - auto demoListener = std::make_shared(); - // 事件标签规则订阅,规则类型为默认的全词匹配类型 - ListenerRule tagRule("dfx"); - // 事件标签规则订阅,规则类型为正则匹配类型 - ListenerRule regRule("dfx.*", RuleType::REGULAR); - // 事件领域及事件名称规则订阅,规则类型为前缀匹配类型 - ListenerRule domainNameRule("HIVIEWDFX", "APP_USAGE", RuleType::PREFIX); - std::vector sysRules; - sysRules.push_back(tagRule); - sysRules.push_back(regRule); - sysRules.push_back(domainNameRule); - HiSysEventManager::AddEventListener(demoListener, sysRules); - ``` +void DemoListener::OnServiceDied() +{ + std::cout << std::string("service disconnect, exit") << std::endl; + exit(0); +} +``` +- 通过HiSysEventManager类提供的AddEventListener接口注册回调对象: +``` +auto demoListener = std::make_shared(); +// 事件标签规则订阅,规则类型为默认的全词匹配类型 +ListenerRule tagRule("dfx"); +// 事件标签规则订阅,规则类型为正则匹配类型 +ListenerRule regRule("dfx.*", RuleType::REGULAR); +// 事件领域及事件名称规则订阅,规则类型为前缀匹配类型 +ListenerRule domainNameRule("HIVIEWDFX", "APP_USAGE", RuleType::PREFIX); +std::vector sysRules; +sysRules.push_back(tagRule); +sysRules.push_back(regRule); +sysRules.push_back(domainNameRule); +HiSysEventManager::AddEventListener(demoListener, sysRules); +``` diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-tool.md b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-tool.md index f693fb517519002b735f82acbead2a10e2912855..8ed1a0ec7e48c7b5cb6e5c3fdb7c97960ceb1931 100644 --- a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-tool.md +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-tool.md @@ -12,7 +12,9 @@ 实时订阅HiSysEvent事件的基础命令: -**hisysevent -r** +``` +hisysevent -r +``` 选项说明: @@ -22,7 +24,9 @@ 打开调试模式: -**hisysevent -r -d** +``` +hisysevent -r -d +``` 选项说明: @@ -32,7 +36,9 @@ 通过事件标签方式实时订阅HiSysEvent事件: -**hisysevnet -r -t \ \[-c \[WHOLE_WORD|PREFIX|REGULAR\]\]** +``` +hisysevnet -r -t [-c [WHOLE_WORD|PREFIX|REGULAR]] +``` 选项说明: @@ -43,7 +49,9 @@ 4. 通过事件领域及事件名称的方式实时订阅HiSysEvent事件: -**hisysevent -r -o \ -n \ \[-c \[WHOLE_WORD|PREFIX|REGULAR\]\]** +``` +hisysevent -r -o -n [-c [WHOLE_WORD|PREFIX|REGULAR]] +``` | 选项名称 | 功能说明 | | -------- | --------- | @@ -58,7 +66,9 @@ 查询历史HiSysEvent事件的基础命令: -**hisysevent -l** +``` +hisysevent -l +``` 选项说明: @@ -68,7 +78,9 @@ 通过设置开始/结束时间,过滤查询历史HiSysEvent事件的结果的命令: -**hisysevent -l -s \ -e \** +``` +hisysevent -l -s -e +``` 选项说明: @@ -79,10 +91,12 @@ 通过设置最大数量值,限制查询历史HiSysEvent事件的数量: -**hisysevent -l -m \** +``` +hisysevent -l -m +``` 选项说明: | 选项名称 | 功能说明 | | -------- | --------- | -| -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 | \ No newline at end of file +| -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 | diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md index f0a0f9c8aadb8b48964c6453aae784011f3beb5d..b622bc08c6974f21f8b84f349791c893d4da59bd 100644 --- a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md @@ -1,40 +1,42 @@ # HiSysEvent打点配置指导 - [概述](#section315316685115) -- [yaml文件的编写](#section123181432175113) + - [基本概念](#section123181432175143) + - [约束与限制](#section123181432175114) +- [编写yaml文件](#section123181432175113) - [yaml文件编写规则](#section123181432175133) - - [yaml文件样例](#section123181432175123) -- [yaml文件的验证流程](#section123181432175115) - - [yaml文件的路径配置](#section123181432175135) - - [yaml文件的编译](#section123181432175137) - - [打点验证](#section123181432175139) - + - [yaml文件编写样例](#section123181432175123) +- [验证yaml文件](#section123181432175115) + - [配置yaml文件路径](#section123181432175135) + - [编译yaml文件](#section123181432175137) + - [打点及查询定义的事件](#section123181432175139) + ## 概述 -部件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.js文件中配置这些文件的路径。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.js文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.def的json文件。最后,将此json文件打包到系统指定路径下。 +组件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.js文件中[配置yaml文件的路径](#section123181432175135)。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.js文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.def的json文件。最后,将此json文件打包到系统指定路径下,用作HiSysEvent事件落盘的判断依据。 -## yaml文件的编写 +### 基本概念 -### yaml文件编写规则 +在配置HiSysEvent打点之前,开发者应了解一下基本概念: -1. 每个部件可定义一个或多个yaml文件,每个yaml文件只能有一个事件领域domain,且不能与其他事件领域重名,事件领域的命名规则如下: - - 字母开头,且只能由大写字母/数字/下划线组成; - - 字符串长度取值范围为1~16。 +- 事件领域:用于标识事件所属的领域,在yaml文件中以domain为键值指定,可参考yaml文件样例中的[domain](#section123181432175123)。 -2. 每个事件领域可定义零个或多个事件名称event,同一个事件领域内部的事件名称不能重名,事件名称的命名规则如下: - - 字母开头,且只能由大写字母/数字/下划线组成; - - 字符串长度取值范围1~32; - - 单个事件领域内部事件名称的不能超过4096个。 +- 事件名称:用于指定事件领域包含的所有事件,可参考yaml文件样例中的[EVENT_NAMEA/EVENT_NAMEB](#section123181432175123)。 -3. 每个事件名称可定义多个参数param,同一个事件名称内部的参数不能重名,参数的命名规则如下: - - 字母开头,且只能由大写字母/数字/下划线组成; - - 字符串长度取值范围1~32; - - 单个事件名称内包含的参数的个数不能超过128个。 +- 参数:用于定义某个事件名称包含的所有键值,可参考yaml文件样例中的[__BASE/NAME1/NAME2](#section123181432175123)。 ->![](../public_sys-resources/icon-note.gif) **说明:** ->每个事件名称**有且只有**一个名称为```__BASE```的参数,此参数字段组成如表1,其他自定义名称的参数,具体字段组成如表2: -**表 1** +### 约束与限制 + +**定义事件领域、事件名称及参数的约束限制:** + +- 事件领域:每个yaml文件只能有一个事件领域,且不能与其他事件领域重名。 + +- 事件名称:每个事件领域可定义零个或多个事件名称,同一个事件领域内部的事件名称不能重名。 + +- 参数:每个事件名称可定义多个参数,同一个事件名称内部的参数不能重名,每个事件名称**有且只有**一个名称为__BASE的参数,此参数字段组成如表1,他自定义参数,具体字段组成如表2。 + +**表 1** __BASE参数字段说明

字段名称

@@ -103,7 +105,7 @@
-**表 2** +**表 2** 自定义参数字段说明

字段名称

@@ -117,7 +119,7 @@

type

-

字段说明:
  必选字段,用来该参数的类型。

+

字段说明:
  必选字段,用来标识该参数的类型。

取值范围:

    @@ -162,7 +164,27 @@
-### yaml文件样例及说明 +## 编写yaml文件 + +### yaml文件编写规则 + +- 事件领域命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围为1~16。 +- 事件名称命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围1~32; + - 单个事件领域内部事件名称的不能超过4096个。 +- 参数命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围1~32; + - 单个事件名称内包含的参数的个数不能超过128个。 + +### yaml文件编写样例 + +- yaml文件样例指定的事件领域名称为MODULEA,该事件领域包含两个事件,名称分别是EVENT_NAMEA和EVENT_NAMEB。 +- EVENT_NAMEA被定义成错误类型的严重事件,该事件包含类型为字符串类型的NAME1参数、字符串类型的NAME2参数及无符号短整型类型的NAME3参数,可以通过事件领域MODULEA和事件名称EVENT_NAMEA对其进行[实时订阅](subsys-dfx-hisysevent-read.md)。 +- EVENT_NAMEB被定义成统计类型的一般事件,EVENT_NAMEB包含类型为无符号短整型类型的NAME1参数及整型类型的NAME2参数。因为EVENT_NAMEB在__BASE参数中定义了名称为tag1和tag2的两个事件标签,所以不仅可以通过事件领域MODULEA和事件名称EVENT_NAMEB对其进行[实时订阅](subsys-dfx-hisysevent-read.md),,所以还可以通过事件标签对该事件进行[实时订阅](subsys-dfx-hisysevent-read.md)。 ``` ########################################## @@ -181,19 +203,13 @@ EVENT_NAMEB: __BASE: {type: STATISTIC, level: MINOR, tag: tag1 tag2, desc: event name b} NAME1: {type: UINT16, desc: name1} NAME2: {type: INT32, desc: name2} - ``` -**样例说明**: -- 该yaml文件指定的事件领域名称为MODULEA,该事件领域包含两个事件,名称分别是EVENT_NAMEA和EVENT_NAMEB。 -- EVENT_NAMEA被定义成错误类型的严重事件,该事件包含类型为字符串类型的NAME1参数、字符串类型的NAME2参数及无符号短整型类型的NAME3参数,可以通过事件领域MODULEA和事件名称EVENT_NAMEA对其进行[实时订阅](subsys-dfx-hisysevent-read.md)。 -- EVENT_NAMEB被定义成统计类型的一般事件,EVENT_NAMEB包含类型为无符号短整型类型的NAME1参数及整型类型的NAME2参数。因为EVENT_NAMEB在__BASE参数中定义了名称为tag1和tag2的两个事件标签,所以不仅可以通过事件领域MODULEA和事件名称EVENT_NAMEB对其进行[实时订阅](subsys-dfx-hisysevent-read.md),,所以还可以通过事件标签对该事件进行[实时订阅](subsys-dfx-hisysevent-read.md)。 - -## yaml文件的验证流程 +## 验证yaml文件 -### yaml文件的路径配置 +### 配置yaml文件路径 -- 在bundle.js文件中通过```hisysevent_config```属性完成yaml文件的路径指定: +在bundle.js文件中通过```hisysevent_config```属性完成yaml文件的路径指定: ``` { @@ -237,33 +253,36 @@ EVENT_NAMEB: ``` >![](../public_sys-resources/icon-note.gif) **说明:** ->yaml文件可根据实际需求置于部件工程的任意目录下,只要在bundle.js文件指定即可。 +>yaml文件可根据实际需求置于组件工程的任意目录下,只要在bundle.js文件指定即可。 -### yaml文件的编译 +### 编译yaml文件 - 全量编译: - - 全量编译整个系统,会将所有部件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。 + - 全量编译整个系统,会将所有组件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。 ``` - cd 工程根目录的绝对路径 | ./build --product-name + cd 工程根目录的绝对路径 + ./build --product-name ``` - 全量编译生成的hisysevent.def文件可以通过以下命令获取: ``` - cd 工程根目录的绝对路径 | find out -name hisysevent.def -type f + cd 工程根目录的绝对路径 + find out -name hisysevent.def -type f ``` - 单文件编译: - 也可以只编译单个部件的yaml文件,命令如下: + 也可以只编译单个组件的yaml文件,命令如下: ``` - cd 工程根目录的绝对路径 | ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list --def-path + cd 工程根目录的绝对路径 + ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list --def-path ``` -**表 3** +**表 3** 单文件编译参数说明

选项名称

@@ -289,8 +308,8 @@ EVENT_NAMEB:
-### 打点验证 +### 打点及查询定义的事件 -1. 通过[hdc工具](subsys-toolchain-hdc-guide.md)将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下; +1. 通过[hdc_std工具](subsys-toolchain-hdc-guide.md)将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下; -2. 触发HiSysEvent事件打点,通过[hisysevent工具](subsys-dfx-hisysevent-tool.md)查询历史HiSysEvent事件,确认触发的HiSysEvent事件是否打点成功。 +2. 触发yaml文件自定义的HiSysEvent事件完成打点,通过[hisysevent -l]命令(subsys-dfx-hisysevent-tool.md)查询历史HiSysEvent事件,确认触发的自定义HiSysEvent事件是否打点成功。 diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write.md b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write.md index d46861e8381372a28ef345b7859a61628e241428..8f8280935f6e8b48771f1f084b8861e4453ac9e9 100644 --- a/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write.md +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write.md @@ -3,6 +3,7 @@ - [概述](#section77571101789) - [接口说明](#section13480315886) - [开发实例](#section112771171317) +- [打点配置指导](#section112771171321) ## 概述 @@ -282,4 +283,6 @@ C++接口实例 external_deps = [ "hisysevent_native:libhisysevent" ] ``` +## 打点配置指导 +在进行HiSysEvent事件打点之前,需要先对HiSysEvent打点行为进行配置,具体可参考[《HiSysEvent打点配置指导》](subsys-dfx-hisysevent-write-config.md) \ No newline at end of file