提交 2de1f829 编写于 作者: X xuyong

hisysevent tag订阅文档更新

Signed-off-by: Nxuyong <xuyong59@huawei.com>
上级 c4735d3d
......@@ -2,9 +2,9 @@
- [概述](#section315316685112)
- [接口说明](#section0342191810519)
- [开发指导](#section123181432175110)
- [C++开发](#section2016116181902)
- [订阅HiSysEvent事件](#section123181432175110)
- [编译配置](#section123181432175187)
- [源代码开发](#section123181432175165)
## 概述<a name="section315316685112"></a>
......@@ -112,76 +112,71 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
</tbody>
</table>
## 开发指导<a name="section123181432175110"></a>
### C++开发<a name="section2016116181902"></a>
1. 编译配置:
- 编译配置文件中添加对hisysevent\_native部件libhisyseventmanager库的依赖。
```
external_deps = [ "hisysevent_native:libhisyseventmanager", ]
```
## 订阅HiSysEvent事件<a name="section123181432175110"></a>
### 编译配置<a name="section123181432175187"></a>
2. 源代码开发
编译配置文件中增加对hisysevent\_native组件libhisyseventmanager库的依赖
- 自定义订阅回调实现类DemoListener:
```
external_deps = [ "hisysevent_native:libhisyseventmanager", ]
```
```
#ifndef DEMO_LISTENER_H
#define DEMO_LISTENER_H
### 源代码开发<a name="section123181432175165"></a>
#include "hisysevent_subscribe_callback_native.h"
- 自定义订阅回调实现类DemoListener:
#include <string>
```
#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 <string>
```
#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 <iostream>
- 实现订阅回调接口:
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 <iostream>
- 通过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<DemoListener>();
// 事件标签规则订阅,规则类型为默认的全词匹配类型
ListenerRule tagRule("dfx");
// 事件标签规则订阅,规则类型为正则匹配类型
ListenerRule regRule("dfx.*", RuleType::REGULAR);
// 事件领域及事件名称规则订阅,规则类型为前缀匹配类型
ListenerRule domainNameRule("HIVIEWDFX", "APP_USAGE", RuleType::PREFIX);
std::vector<ListenerRule> 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<DemoListener>();
// 事件标签规则订阅,规则类型为默认的全词匹配类型
ListenerRule tagRule("dfx");
// 事件标签规则订阅,规则类型为正则匹配类型
ListenerRule regRule("dfx.*", RuleType::REGULAR);
// 事件领域及事件名称规则订阅,规则类型为前缀匹配类型
ListenerRule domainNameRule("HIVIEWDFX", "APP_USAGE", RuleType::PREFIX);
std::vector<ListenerRule> sysRules;
sysRules.push_back(tagRule);
sysRules.push_back(regRule);
sysRules.push_back(domainNameRule);
HiSysEventManager::AddEventListener(demoListener, sysRules);
```
......@@ -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 \<tag\> \[-c \[WHOLE_WORD|PREFIX|REGULAR\]\]**
```
hisysevnet -r -t <tag> [-c [WHOLE_WORD|PREFIX|REGULAR]]
```
选项说明:
......@@ -43,7 +49,9 @@
4. 通过事件领域及事件名称的方式实时订阅HiSysEvent事件:
**hisysevent -r -o \<domain\> -n \<eventName\> \[-c \[WHOLE_WORD|PREFIX|REGULAR\]\]**
```
hisysevent -r -o <domain> -n <eventName> [-c [WHOLE_WORD|PREFIX|REGULAR]]
```
| 选项名称 | 功能说明 |
| -------- | --------- |
......@@ -58,7 +66,9 @@
查询历史HiSysEvent事件的基础命令:
**hisysevent -l**
```
hisysevent -l
```
选项说明:
......@@ -68,7 +78,9 @@
通过设置开始/结束时间,过滤查询历史HiSysEvent事件的结果的命令:
**hisysevent -l -s \<begin time\> -e \<end time\>**
```
hisysevent -l -s <begin time> -e <end time>
```
选项说明:
......@@ -79,10 +91,12 @@
通过设置最大数量值,限制查询历史HiSysEvent事件的数量:
**hisysevent -l -m \<max hisysevent count\>**
```
hisysevent -l -m <max hisysevent count>
```
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 |
\ No newline at end of file
| -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 |
# HiSysEvent打点配置指导<a name="ZH-CN_TOPIC_0000001080478132"></a>
- [概述](#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)
## 概述<a name="section315316685115"></a>
部件若有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文件的编写<a name="section123181432175113"></a>
### 基本概念<a name="section123181432175143"></a>
### yaml文件编写规则<a name="section123181432175133"></a>
在配置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**
### 约束与限制<a name="section123181432175114"></a>
**定义事件领域、事件名称及参数的约束限制:**
- 事件领域:每个yaml文件只能有一个事件领域,且不能与其他事件领域重名。
- 事件名称:每个事件领域可定义零个或多个事件名称,同一个事件领域内部的事件名称不能重名。
- 参数:每个事件名称可定义多个参数,同一个事件名称内部的参数不能重名,每个事件名称**有且只有**一个名称为__BASE的参数,此参数字段组成如表1,他自定义参数,具体字段组成如表2。
**表 1** __BASE参数字段说明
<a name="table1844019587513"></a>
<table><thead align="left"><tr id="row1440058186118"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p19441135865020"><a name="p19441135845020"></a><a name="p19441135865020"></a>字段名称</p>
......@@ -103,7 +105,7 @@
</tbody>
</table>
**表 2**
**表 2** 自定义参数字段说明
<a name="table1844019587523"></a>
<table><thead align="left"><tr id="row1440060185118"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p19442235845020"><a name="p19442235845020"></a><a name="p19442235845020"></a>字段名称</p>
......@@ -117,7 +119,7 @@
<p id="p8779163453213"><a name="p8779163453213"></a><a name="p8779163453213"></a>type</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727325235218"><a name="p14727325235218"></a><a name="p14727325235218"></a>字段说明:<br>&emsp;&emsp;必选字段,用来该参数的类型。</p>
<p id="p14727325235218"><a name="p14727325235218"></a><a name="p14727325235218"></a>字段说明:<br>&emsp;&emsp;必选字段,用来标识该参数的类型。</p>
<p id="p167271372203215"><a name="p167271372203215"></a><a name="p167271372203215"></a>取值范围:</p>
<a name="ul6717342214921"></a><a name="ul6717342214921"></a>
<ul id="ul6717134514921">
......@@ -162,7 +164,27 @@
</tbody>
</table>
### yaml文件样例及说明<a name="section123181432175123"></a>
## 编写yaml文件<a name="section123181432175113"></a>
### yaml文件编写规则<a name="section123181432175133"></a>
- 事件领域命名规则:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围为1~16。
- 事件名称命名规则:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围1~32;
- 单个事件领域内部事件名称的不能超过4096个。
- 参数命名规则:
- 字母开头,且只能由大写字母/数字/下划线组成;
- 字符串长度取值范围1~32;
- 单个事件名称内包含的参数的个数不能超过128个。
### yaml文件编写样例<a name="section123181432175123"></a>
- 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文件的验证流程<a name="section123181432175115"></a>
## 验证yaml文件<a name="section123181432175115"></a>
### yaml文件的路径配置<a name="section123181432175135"></a>
### 配置yaml文件路径<a name="section123181432175135"></a>
- 在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文件的编译<a name="section123181432175137"></a>
### 编译yaml文件<a name="section123181432175137"></a>
- 全量编译:
- 全量编译整个系统,会将所有件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。
- 全量编译整个系统,会将所有件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。
```
cd 工程根目录的绝对路径 | ./build --product-name <product name>
cd 工程根目录的绝对路径
./build --product-name <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 <yaml file list> --def-path <file store directory>
cd 工程根目录的绝对路径
./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list <yaml file list> --def-path <file store directory>
```
**表 3**
**表 3** 单文件编译参数说明
<a name="table1844019587534"></a>
<table><thead align="left"><tr id="row1440056575118"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p19432435845020"><a name="p19432435845020"></a><a name="p19432435845020"></a>选项名称</p>
......@@ -289,8 +308,8 @@ EVENT_NAMEB:
</tbody>
</table>
### 打点验证<a name="section123181432175139"></a>
### 打点及查询定义的事件<a name="section123181432175139"></a>
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事件是否打点成功。
......@@ -3,6 +3,7 @@
- [概述](#section77571101789)
- [接口说明](#section13480315886)
- [开发实例](#section112771171317)
- [打点配置指导](#section112771171321)
## 概述<a name="section77571101789"></a>
......@@ -282,4 +283,6 @@ C++接口实例
external_deps = [ "hisysevent_native:libhisysevent" ]
```
## 打点配置指导<a name="section112771171321"></a>
在进行HiSysEvent事件打点之前,需要先对HiSysEvent打点行为进行配置,具体可参考[《HiSysEvent打点配置指导》](subsys-dfx-hisysevent-write-config.md)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册