未验证 提交 de831a04 编写于 作者: O openharmony_ci 提交者: Gitee

!1287 HiSysEvent Tag订阅相关API更新

Merge pull request !1287 from honghecun/master
# HiSysEvent订阅指导<a name="ZH-CN_TOPIC_0000001185655868"></a>
- [概述](#section315316685112)
- [接口说明](#section0342191810519)
- [开发实例](#section123181432175110)
- [C++接口实例](#section2016116181902)
- [功能简介](#section123181433335224)
- [约束与限制](#section123181433375224)
- [开发指导](#section315316685113)
- [接口说明](#section0342191810519)
- [开发实例](#section123181432175110)
## 概述<a name="section315316685112"></a>
### 功能简介<a name="section123181433335224"></a>
HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接口实时获取关注的事件,例如电池模块侦听功耗相关的事件,用于分析耗电情况。
## 接口说明<a name="section0342191810519"></a>
### 约束与限制<a name="section123181433375224"></a>
**HiSysEvent事件订阅条件约束:**
- 在订阅HiSysEvent事件之前,需要先完成HiSysEvent打点配置,具体配置方法请参考[《HiSysEvent打点配置指导》](subsys-dfx-hisysevent-write-config.md)
## 开发指导<a name="section315316685113"></a>
### 接口说明<a name="section0342191810519"></a>
**表 1** HiSysEvent订阅接口
<a name="table1844019587496"></a>
<table><thead align="left"><tr id="row1440058184916"><th class="cellrowborder" valign="top" width="48.120000000000005%" id="mcps1.2.3.1.1"><p id="p19441135844915"><a name="p19441135844915"></a><a name="p19441135844915"></a>接口名</p>
<table><thead align="left"><tr id="row1440058184916"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p19441135844915"><a name="p19441135844915"></a><a name="p19441135844915"></a>接口名称</p>
</th>
<th class="cellrowborder" valign="top" width="51.88%" id="mcps1.2.3.1.2"><p id="p13441195815491"><a name="p13441195815491"></a><a name="p13441195815491"></a>描述</p>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p13441195815491"><a name="p13441195815491"></a><a name="p13441195815491"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row16441155818499"><td class="cellrowborder" valign="top" width="48.120000000000005%" headers="mcps1.2.3.1.1 "><p id="p877916438211"><a name="p877916438211"></a><a name="p877916438211"></a>int HiSysEventManager::AddEventListener(std::shared_ptr&lt;HiSysEventSubscribeCallBackBase&gt; listener, std::vector&lt;struct ListenerRule&gt;&amp; rules)</p>
<tbody><tr id="row16441155818499"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p877916438211"><a name="p877916438211"></a><a name="p877916438211"></a>int HiSysEventManager::AddEventListener(std::shared_ptr&lt;HiSysEventSubscribeCallBackBase&gt; listener, std::vector&lt;ListenerRule&gt;&amp; rules)</p>
</td>
<td class="cellrowborder" valign="top" width="51.88%" headers="mcps1.2.3.1.2 "><p id="p14727325133216"><a name="p14727325133216"></a><a name="p14727325133216"></a>接口功能:注册订阅HiSysEvent系统事件侦听对象,可设置规则订阅某些事件。</p>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p14727325133216"><a name="p14727325133216"></a><a name="p14727325133216"></a>接口功能:<br>&emsp;&emsp;注册订阅HiSysEvent系统事件侦听对象,可设置规则订阅某些事件。</p>
<p id="p167271525203213"><a name="p167271525203213"></a><a name="p167271525203213"></a>输入参数:</p>
<a name="ul6717142214919"></a><a name="ul6717142214919"></a><ul id="ul6717142214919"><li>listener:订阅回调对象。</li><li>rules:事件订阅规则。</li></ul>
<p id="p83591223153818"><a name="p83591223153818"></a><a name="p83591223153818"></a>返回值:</p>
<a name="ul12105842111913"></a><a name="ul12105842111913"></a><ul id="ul12105842111913"><li>0:订阅成功,重复订阅。</li><li>1:订阅成功,初次订阅。</li><li>其他返回值:订阅失败。</li></ul>
</td>
</tr>
<tr id="row910319443242"><td class="cellrowborder" valign="top" width="48.120000000000005%" headers="mcps1.2.3.1.1 "><p id="p15104154411248"><a name="p15104154411248"></a><a name="p15104154411248"></a>void HiSysEventManager::RemoveListener(std::shared_ptr&lt;HiSysEventSubscribeCallBackBase&gt; listener)</p>
<tr id="row910319443242"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p15104154411248"><a name="p15104154411248"></a><a name="p15104154411248"></a>void HiSysEventManager::RemoveListener(std::shared_ptr&lt;HiSysEventSubscribeCallBackBase&gt; listener)</p>
</td>
<td class="cellrowborder" valign="top" width="51.88%" headers="mcps1.2.3.1.2 "><p id="p1104194420248"><a name="p1104194420248"></a><a name="p1104194420248"></a>接口功能:移除订阅hisysevent系统事件侦听对象。</p>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p1104194420248"><a name="p1104194420248"></a><a name="p1104194420248"></a>接口功能:<br>&emsp;&emsp;移除订阅hisysevent系统事件侦听对象。</p>
<p id="p7943171095411"><a name="p7943171095411"></a><a name="p7943171095411"></a>输入参数:</p>
<a name="ul894321075411"></a><a name="ul894321075411"></a><ul id="ul894321075411"><li>listener:订阅回调对象。</li></ul>
<p id="p9744631162515"><a name="p9744631162515"></a><a name="p9744631162515"></a>返回值:无。</p>
<p id="p9744631162515"><a name="p9744631162515"></a><a name="p9744631162515"></a>返回值:<br>&emsp;&emsp;无。</p>
</td>
</tr>
</tbody>
......@@ -43,110 +54,144 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
**表 2** ListenerRule订阅规则对象
<a name="table1144011610564"></a>
<table><thead align="left"><tr id="row124411716175611"><th class="cellrowborder" valign="top" width="48.11%" id="mcps1.2.3.1.1"><p id="p19441151675610"><a name="p19441151675610"></a><a name="p19441151675610"></a>属性名称</p>
<a name="table1844019587498"></a>
<table><thead align="left"><tr id="row1440058184918"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p19441135844917"><a name="p19441135844917"></a><a name="p19441135844917"></a>接口名称</p>
</th>
<th class="cellrowborder" valign="top" width="51.89%" id="mcps1.2.3.1.2"><p id="p16441171616563"><a name="p16441171616563"></a><a name="p16441171616563"></a>描述</p>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p13441195815493"><a name="p13441195815493"></a><a name="p13441195815493"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row174411216105615"><td class="cellrowborder" valign="top" width="48.11%" headers="mcps1.2.3.1.1 "><p id="p496413536613"><a name="p496413536613"></a><a name="p496413536613"></a><span>uint32_t</span> ruleType</p>
<tbody><tr id="row16441155818499"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p877916438213"><a name="p877916438213"></a><a name="p877916438213"></a>ListenerRule(const std::string&amp; tag, RuleType ruleType = RuleType::WHOLE_WORD) </p>
</td>
<td class="cellrowborder" valign="top" width="51.89%" headers="mcps1.2.3.1.2 "><p id="p94416160565"><a name="p94416160565"></a><a name="p94416160565"></a>规则类型(匹配范围包括domain以及eventName):</p>
<a name="ul1652866141814"></a><a name="ul1652866141814"></a><ul id="ul1652866141814"><li>1:全字符匹配。</li><li>2:前缀匹配。</li><li>3:正则表达式匹配。</li><li>其他值:无效的匹配方式。</li></ul>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p14727325133218"><a name="p14727325133218"></a><a name="p14727325133218"></a>接口功能:<br>&emsp;&emsp;订阅规则构造函数,创建事件标签订阅规则对象。</p>
<p id="p167271525203215"><a name="p167271525203215"></a><a name="p167271525203215"></a>输入参数:</p>
<a name="ul6717142214921"></a><a name="ul6717142214921"></a><ul id="ul6717142214921">
<li>tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。</li>
<li>ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。</li></ul>
</td>
</tr>
<tr id="row64411816125614"><td class="cellrowborder" valign="top" width="48.11%" headers="mcps1.2.3.1.1 "><p id="p1258135313712"><a name="p1258135313712"></a><a name="p1258135313712"></a>std::string domain</p>
<tr id="row910319443244"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p15104154411250"><a name="p15104154411250"></a><a name="p15104154411250"></a>ListenerRule(const std::string&amp; domain, const std::string&amp; eventName, RuleType ruleType = RuleType::WHOLE_WORD)</p>
</td>
<td class="cellrowborder" valign="top" width="51.89%" headers="mcps1.2.3.1.2 "><a name="ul14905926102311"></a><a name="ul14905926102311"></a><ul id="ul14905926102311"><li>domain:事件所属领域,如果传入的是空字符串,则默认事件领域字段匹配成功。</li></ul>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p15104154411250"><a name="p15104154411250"></a><a name="p15104154411250"></a>接口功能:<br>&emsp;&emsp;订阅规则构造函数,创建事件领域与事件名称订阅规则对象。</p>
<p id="p7943171095413"><a name="p7943171095413"></a><a name="p7943171095413"></a>输入参数:</p>
<a name="ul894321075413"></a><a name="ul894321075413"></a><ul id="ul894321075413">
<li>domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。</li>
<li>eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。</li>
<li>ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。</li></ul>
</td>
</tr>
<tr id="row244161615619"><td class="cellrowborder" valign="top" width="48.11%" headers="mcps1.2.3.1.1 "><p id="p227913101887"><a name="p227913101887"></a><a name="p227913101887"></a>std::string eventName</p>
<tr id="row910319443246"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p15104154411252"><a name="p15104154411252"></a><a name="p15104154411252"></a>ListenerRule(const std::string&amp; domain, const std::string& eventName, const std::string&amp; tag, RuleType ruleType = RuleType::WHOLE_WORD)</p>
</td>
<td class="cellrowborder" valign="top" width="51.89%" headers="mcps1.2.3.1.2 "><a name="ul248063132319"></a><a name="ul248063132319"></a><ul id="ul248063132319"><li>eventName:事件的名称,如果传入的是空字符串,则默认事件名称字段匹配成功。</li></ul>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p15104154411252"><a name="p15104154411252"></a><a name="p15104154411252"></a>接口功能:<br>&emsp;&emsp;订阅规则构造函数,创建事件领域、事件名称,事件标签订阅规则对象。</p>
<p id="p7943171095415"><a name="p7943171095415"></a><a name="p7943171095415"></a>输入参数:</p>
<a name="ul894321075415"></a><a name="ul894321075415"></a><ul id="ul894321075415">
<li>tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。</li>
<li>domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。</li>
<li>eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。</li>
<li>ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。</li></ul></ul>
</td>
</tr>
</tbody>
</table>
**表 3** HiSysEventSubscribeCallBackBase订阅对象
**表 3** RuleType类型
| 枚举值 | 描述 |
| ------------ | ------------- |
| WHOLE_WORD | 全词匹配类型 |
| PREFIX | 前缀匹配类型 |
| REGULAR | 正则匹配类型 |
**表 4** HiSysEventSubscribeCallBackBase订阅对象
<a name="table1011703742711"></a>
<table><thead align="left"><tr id="row121187375270"><th class="cellrowborder" valign="top" width="48.25%" id="mcps1.2.3.1.1"><p id="p2118143782719"><a name="p2118143782719"></a><a name="p2118143782719"></a>接口名称</p>
<table><thead align="left"><tr id="row121187375270"><th class="cellrowborder" valign="top" id="mcps1.2.3.1.1"><p id="p2118143782719"><a name="p2118143782719"></a><a name="p2118143782719"></a>接口名称</p>
</th>
<th class="cellrowborder" valign="top" width="51.74999999999999%" id="mcps1.2.3.1.2"><p id="p4118037152710"><a name="p4118037152710"></a><a name="p4118037152710"></a>描述</p>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p4118037152710"><a name="p4118037152710"></a><a name="p4118037152710"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row111823719274"><td class="cellrowborder" valign="top" width="48.25%" headers="mcps1.2.3.1.1 "><p id="p161181537112712"><a name="p161181537112712"></a><a name="p161181537112712"></a>void HiSysEventSubscribeCallBackBase::OnHandle(const std::string&amp; domain, const std::string&amp; eventName, const int eventType, const std::string&amp; eventDetail)</p>
<tbody><tr id="row111823719274"><td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 "><p id="p161181537112712"><a name="p161181537112712"></a><a name="p161181537112712"></a>void HiSysEventSubscribeCallBackBase::OnHandle(const std::string&amp; domain, const std::string&amp; eventName, const int eventType, const std::string&amp; eventDetail)</p>
</td>
<td class="cellrowborder" valign="top" width="51.74999999999999%" headers="mcps1.2.3.1.2 "><p id="p1772213111011"><a name="p1772213111011"></a><a name="p1772213111011"></a>接口功能:订阅事件的回调接口。</p>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 "><p id="p1772213111011"><a name="p1772213111011"></a><a name="p1772213111011"></a>接口功能:<br>&emsp;&emsp;订阅事件的回调接口。</p>
<p id="p182081719151016"><a name="p182081719151016"></a><a name="p182081719151016"></a>输入参数:</p>
<a name="ul02091819131015"></a><a name="ul02091819131015"></a><ul id="ul02091819131015"><li>domain:事件所属领域。</li><li>eventName:事件的名称。</li><li>eventType:事件类型。</li><li>eventDetail:包含事件相关信息的字符串,以json的形式体现。</li></ul>
<p id="p18209419201010"><a name="p18209419201010"></a><a name="p18209419201010"></a>返回值:无。</p>
<p id="p18209419201010"><a name="p18209419201010"></a><a name="p18209419201010"></a>返回值:<br>&emsp;&emsp;无。</p>
</td>
</tr>
</tbody>
</table>
## 开发实例<a name="section123181432175110"></a>
### 开发实例<a name="section123181432175110"></a>
### C++接口实例<a name="section2016116181902"></a>
订阅HiSysEvent事件C++接口实例
本实例介绍如何订阅domain=HIVIEWDFX的所有系统事件。
1. 源代码开发
1. 源代码开发
自定义订阅回调实现类头文件DemoListener.h
- 引入对应的头文件:
```
#ifndef DEMO_LISTENER_H
#define DEMO_LISTENER_H
hisysevent\_manager.h。
#include "hisysevent_subscribe_callback_native.h"
- 实现回调接口:
#include <string>
HiSysEventSubscribeCallBackBase::OnHandle\(const std::string& domain, const std::string& eventName, const int eventType, const std::string& eventDetail\)。
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();
};
#endif DEMO_LISTENER_H
```
- 注册回调对象
增加DemoListener.cpp文件,在DemoListener类中根据实际需求自定义订阅回调接口的实现逻辑
HiSysEventManager::AddEventListener\(std::shared\_ptr<HiSysEventSubscribeCallBackBase\> listener, std::vector<struct ListenerRule\>& rules\)。
```
#include "demo_listener.h"
#include <iostream>
```
// 以下是订阅domain=HIVIEWDFX的所有系统事件的应用例子
#include "hisysevent_manager.h"
#include <iostream>
namespace OHOS {
namespace HiviewDFX {
// 实现订阅回调对象的接口
void HiSysEventToolListener::OnHandle(const std::string& domain, const std::string& eventName,
const int eventType, const std::string& eventDetail)
{
std::cout << eventDetail << std::endl;
}
void HiSysEventToolListener::OnServiceDied()
{
std::cout << std::string("service disconnect, exit") << std::endl;
exit(0);
}
} // namespace HiviewDFX
} // namespace OHOS
// 调用订阅接口注册开发实现的订阅对象
auto toolListener = std::make_shared<HiSysEventToolListener>();
struct ListenerRule rule;
rule.ruleType = 1; // 1: default type
rule.domain = "HIVIEWDFX";
std::vector<struct ListenerRule> sysRules;
sysRules.push_back(rule);
HiSysEventManager::AddEventListener(toolListener, sysRules);
```
void DemoListener::OnHandle(const std::string& domain, const std::string& eventName,
const int eventType, const std::string& eventDetail)
{
std::cout << eventDetail << std::endl;
}
2. 编译设置:
void DemoListener::OnServiceDied()
{
std::cout << std::string("service disconnect, exit") << std::endl;
exit(0);
}
```
在BUILD.gn编译文件中,需要添加依赖hisysevent\_native部件的libhisyseventmanager库。
通过HiSysEventManager类提供的AddEventListener接口注册回调对象,完成对HiSysEvent的订阅:
```
external_deps = [ "hisysevent_native:libhisyseventmanager", ]
```
```
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);
```
2. 编译配置
在BUILD.gn编译文件中,需要添加依赖hisysevent\_native组件的libhisyseventmanager库:
```
external_deps = [ "hisysevent_native:libhisyseventmanager", ]
```
# HiSysEvent查询指导<a name="ZH-CN_TOPIC_0000001231455461"></a>
- [概述](#section279684125212)
- [接口说明](#section03869128521)
- [开发实例](#section14286111855212)
- [C++接口实例](#section162045551743)
- [开发指导](#section315316761113)
- [接口说明](#section03869128521)
- [开发实例](#section14286111855212)
## 概述<a name="section279684125212"></a>
HiSysEvent提供了查询接口,支持开发者设置条件查询HiSysEvent事件,例如功耗部件可以通过该接口获取所需的系统事件进行业务分析。
## 接口说明<a name="section03869128521"></a>
## 开发指导<a name="section315316761113"></a>
### 接口说明<a name="section03869128521"></a>
**表 1** HiSysEvent查询接口
......@@ -115,11 +116,9 @@ HiSysEvent提供了查询接口,支持开发者设置条件查询HiSysEvent事
</tbody>
</table>
## 开发实例<a name="section14286111855212"></a>
### C++接口实例<a name="section162045551743"></a>
### 开发实例<a name="section14286111855212"></a>
本实例介绍如何查询所有系统事件
C++接口实例
1. 源代码开发:
......
# HiSysEvent工具使用指导<a name="ZH-CN_TOPIC_0000001231614021"></a>
- [概述](#section1886702718521)
- [使用指导](#section1210623418527)
- [实时订阅HiSysEvent事件相关命令](#section1210623418527)
- [查询历史HiSysEvent事件相关命令](#section1210623418539)
## 概述<a name="section1886702718521"></a>
目前系统预制了HiSysEvent小工具,可以通过命令行参数,设置查询条件,查询满足要求的HiSysEvent系统事件,支撑开发者在开发过程中是否打点成功,以及故障定位时系统所发生的事件等研发场景
目前在系统的/system/bin目录下预置了hisysevent工具,开发者可以通过此工具实时订阅HiSysEvent事件及查询历史HiSysEvent事件
## 使用指导<a name="section1210623418527"></a>
## 实时订阅HiSysEvent事件相关命令<a name="section1210623418527"></a>
1. HiSysEvent工具的参数
- 实时订阅HiSysEvent事件的基础命令
工具预置在/system/bin目录下,命令可以在任意目录执行。
```
hisysevent -r
```
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -r&nbsp; | 以缺省设置实时订阅HiSysEvent事件,在此种订阅方式下有任何实时HiSysEvent事件产生,都会在控制台上打印此HiSysEvent事件 |
- 打开调试模式:
```
hisysevent [-r | -l [-s <time> -e <time> -m <count>]]
-r get real hisysevent log.
-l -s <begin time> -e <end time> -m <max hisysevent count>
get history hisysevent log, begin time should not be earlier than end time.
hisysevent -r -d
```
2. 查询实时HiSysEvent事件的命令:
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -d | 在调试模式下实时订阅HiSysEvent事件 |
- 通过事件标签方式实时订阅HiSysEvent事件:
```
hisysevent -r
hisysevnet -r -t <tag> [-c [WHOLE_WORD|PREFIX|REGULAR]]
```
当实时HiSysEvent事件过来的时候,会在控制台上打印一条HiSysEvent事件。
选项说明:
3. 查询历史HiSysEvent事件的命令:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -t&nbsp; | 设置实时订阅的HiSysEvent事件标签,用来过滤订阅的HiSysEvent事件 |
| -c&nbsp; | 设置实时订阅的HiSysEvent事件标签匹配规则,有“WHOLE_WORD”、“PREFIX”、“REGULAR”三种匹配规则|
- 通过事件领域及事件名称的方式实时订阅HiSysEvent事件:
```
hisysevent -l -s <begin time> -e <end time> -m <max hisysevent count>
hisysevent -r -o <domain> -n <eventName> [-c [WHOLE_WORD|PREFIX|REGULAR]]
```
其中-s和-e分别指定了事件生成的开始时间和结束时间,如果没有-s或者-e,代表查询时间无下限/无上限。
| 选项名称 | 功能说明 |
| -------- | --------- |
| -o | 设置实时订阅的HiSysEvent事件领域,用来过滤订阅的HiSysEvent事件 |
| -n | 设置实时订阅的HiSysEvent事件名称,用来过滤订阅的HiSysEvent事件|
| -c | 设置实时订阅的HiSysEvent事件领域及事件名称的匹配规则,有“WHOLE_WORD”、“PREFIX”、“REGULAR”三种匹配规则|
>![](../public_sys-resources/icon-note.gif) **说明:**
>当同时通过-t、-o及-n指定了相关订阅规则参数设置,则判断设置的事件标签是否为空,若不为空,则使用事件标签规则进行订阅,否则使用事件领域及事件名称订阅规则进行订阅。
-m参数制定了本次查询最多返回的时间条数。
## 查询历史HiSysEvent事件相关命令<a name="section1210623418539"></a>
- 查询历史HiSysEvent事件的基础命令:
```
hisysevent -l
```
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -l | 以缺省设置查询历史HiSysEvent事件,此次查询会返回最近不多于1000条的HiSysEvent事件 |
- 通过设置开始/结束时间,过滤查询历史HiSysEvent事件的结果的命令:
```
hisysevent -l -s <begin time> -e <end time>
```
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -s | 设置查询历史HiSysEvent事件的开始时间,此次查询只会返回不早于该时间点的HiSysEvent事件 |
| -e | 设置查询历史HiSysEvent事件的结束时间,此次查询只会返回不晚于该时间点的HiSysEvent事件 |
- 通过设置最大数量值,限制查询历史HiSysEvent事件的数量:
```
hisysevent -l -m <max hisysevent count>
```
选项说明:
| 选项名称 | 功能说明 |
| -------- | --------- |
| -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 |
# HiSysEvent打点配置指导<a name="ZH-CN_TOPIC_0000001080478132"></a>
- [概述](#section315316685115)
- [基本概念](#section123181432175143)
- [约束与限制](#section123181432175114)
- [编写yaml文件](#section123181432175113)
- [yaml文件编写规则](#section123181432175133)
- [yaml文件编写样例](#section123181432175123)
- [验证yaml文件](#section123181432175115)
- [配置yaml文件路径](#section123181432175135)
- [编译yaml文件](#section123181432175137)
- [打点及查询定义的事件](#section123181432175139)
## 概述<a name="section315316685115"></a>
组件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.js文件中[配置yaml文件的路径](#section123181432175135)。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.js文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.def的json文件。最后,将此json文件打包到系统指定路径下,用作HiSysEvent事件落盘的判断依据。
### 基本概念<a name="section123181432175143"></a>
在配置HiSysEvent打点之前,开发者应了解以下基本概念:
- 事件领域
用于标识事件所属的领域,在yaml文件中以domain为键值指定,可参考yaml文件样例中的[domain](#section123181432175123)
- 事件名称
用于指定事件领域包含的所有事件,可参考yaml文件样例中的[EVENT_NAMEA/EVENT_NAMEB](#section123181432175123)
- 参数
用于定义某个事件名称包含的所有键值,可参考yaml文件样例中的[__BASE/NAME1/NAME2](#section123181432175123)
### 约束与限制<a name="section123181432175114"></a>
**定义事件领域、事件名称及参数的约束与限制:**
- 每个yaml文件只能有一个事件领域,且不能与其他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>
</th>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p13441195865593"><a name="p13441195865593"></a><a name="p13441195865593"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row16441155868499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916438213"><a name="p877916438613"></a><a name="p877916438613"></a>type</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727325136218"><a name="p14727325136218"></a><a name="p14727325136218"></a>字段说明:<br>&emsp;&emsp;必选字段,用来标识该事件名称的类型。</p>
<p id="p167271525203615"><a name="p167271525203615"></a><a name="p167271525203615"></a>取值范围:</p>
<a name="ul6717142214621"></a><a name="ul6717142214621"></a>
<ul id="ul6717142214621">
<li>FAULT:错误类型。</li>
<li>STATISTIC:统计类型。</li>
<li>SECURITY:安全性。</li>
<li>BEHAVIOR:用户行为。</li>
</ul>
</td>
</tr>
<tr id="row16441155818699">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916438616"><a name="p877916438616"></a><a name="p877916438616"></a>level</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727325153218"><a name="p14727325153218"></a><a name="p14727325153218"></a>字段作用:<br>&emsp;&emsp;必选字段,用来标识该事件名称的级别。</p>
<p id="p167271525213215"><a name="p167271525213215"></a><a name="p167271525213215"></a>取值范围:</p>
<a name="ul6717142215021"></a><a name="ul6717142215021"></a>
<ul id="ul6717142215021">
<li>CRITICAL:严重。</li>
<li>MINOR:一般。</li>
</ul>
</td>
</tr>
<tr id="row16441155818519">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916458213"><a name="p877916458213"></a><a name="p877916458213"></a>tag</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727327733218"><a name="p14727327733218"></a><a name="p14727327733218"></a>字段作用:<br>&emsp;&emsp;可选字段,用来标识该事件名称的标签。</p>
<p id="p167271395203215"><a name="p167271395203215"></a><a name="p167271395203215"></a>定义规则:</p>
<a name="ul6717143414921"></a><a name="ul6717143414921"></a>
<ul id="ul6717143414921">
<li>最多可同时定义5个标签,标签之间使用空格来分隔。</li>
<li>单个标签最多包含16个字符,字符范围[a-zA-Z0-9]。</li>
</ul>
</td>
</tr>
<tr id="row16441155817799">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916477213"><a name="p877916477213"></a><a name="p877916477213"></a>desc</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727725133218"><a name="p14727725133218"></a><a name="p14727725133218"></a>字段作用:<br>&emsp;&emsp;必选字段,用来对该事件名称进行描述。</p>
<p id="p167277525203215"><a name="p167277525203215"></a><a name="p167277525203215"></a>定义规则:</p>
<a name="ul6777142214921"></a><a name="ul6777142214921"></a>
<ul id="ul6777142214921">
<li>至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]</li>
</ul>
</td>
</tr>
</tbody>
</table>
**表 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>
</th>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p13331195815593"><a name="p13331195815593"></a><a name="p13331195815593"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row16441232818499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<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="p167271372203215"><a name="p167271372203215"></a><a name="p167271372203215"></a>取值范围:</p>
<a name="ul6717342214921"></a><a name="ul6717342214921"></a>
<ul id="ul6717134514921">
<li>BOOL</li>
<li>INT8</li>
<li>UINT8</li>
<li>INT16</li>
<li>UINT16</li>
<li>INT32</li>
<li>UINT32</li>
<li>INT64</li>
<li>UINT64</li>
<li>FLOAT</li>
<li>DOUBLE</li>
<li>STRING</li>
</ul>
</td>
</tr>
<tr id="row16326155818499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877567438213"><a name="p877567438213"></a><a name="p877567438213"></a>arrsize</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727324893218"><a name="p14727324893218"></a><a name="p14727324893218"></a>字段作用:<br>&emsp;&emsp;可选字段,用来标识数组类型参数的长度。</p>
<p id="p1672715498703215"><a name="p1672715498703215"></a><a name="p1672715498703215"></a>取值范围:<br>&emsp;&emsp; 1~100</p>
</ul>
</td>
</tr>
<tr id="row16556155818499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p845916438213"><a name="p845916438213"></a><a name="p845916438213"></a>desc</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727343133218"><a name="p14727343133218"></a><a name="p14727343133218"></a>字段作用:<br>&emsp;&emsp;必选字段,用来对该参数进行描述。</p>
<p id="p167271524323215"><a name="p167271524323215"></a><a name="p167271524323215"></a>定义规则:</p>
<a name="ul6717142111921"></a><a name="ul6717142111921"></a>
<ul id="ul6717156714921">
<li>至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]</li>
</ul>
</td>
</tr>
</tbody>
</table>
## 编写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)
```
##########################################
# the hisysevent definition for module a #
##########################################
domain: MODULEA
EVENT_NAMEA:
__BASE: {type: FAULT, level: CRITICAL, 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: MINOR, tag: tag1 tag2, desc: event name b}
NAME1: {type: UINT16, desc: name1}
NAME2: {type: INT32, desc: name2}
```
## 验证yaml文件<a name="section123181432175115"></a>
### 配置yaml文件路径<a name="section123181432175135"></a>
在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文件<a name="section123181432175137"></a>
- 全量编译:
- 全量编译整个系统,会将所有组件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。
```
cd 工程根目录的绝对路径
./build --product-name <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 <yaml file list> --def-path <file store directory>
```
**表 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>
</th>
<th class="cellrowborder" valign="top" id="mcps1.2.3.1.2"><p id="p13441196715593"><a name="p13441196715593"></a><a name="p13441196715593"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row16441155854499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916558213"><a name="p877916558213"></a><a name="p877916558213"></a>--yaml-list</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727325133218"><a name="p14727325133218"></a><a name="p14727325133218"></a>指定需要编译的yaml文件路径列表,多个yaml文件路径之间用空格分隔。</p>
</td><tr id="row16441155832499">
<td class="cellrowborder" width="60%" valign="top" headers="mcps1.2.3.1.1 ">
<p id="p877916421213"><a name="p877916421213"></a><a name="p877916421213"></a>--def-path</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.3.1.2 ">
<p id="p14727323533218"><a name="p14727323533218"></a><a name="p14727323533218"></a>指定编译生成的hisysevent.def文件的生成路径。</p>
</td>
</tr>
</tbody>
</table>
### 打点及查询定义的事件<a name="section123181432175139"></a>
1. 通过[hdc_std工具](subsys-toolchain-hdc-guide.md)将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下;
2. 触发yaml文件自定义的HiSysEvent事件完成打点,通过[hisysevent -l](subsys-dfx-hisysevent-tool.md)命令查询历史HiSysEvent事件,确认触发的自定义HiSysEvent事件是否打点成功。
# HiSysEvent打点指导<a name="ZH-CN_TOPIC_0000001231373947"></a>
- [概述](#section77571101789)
- [接口说明](#section13480315886)
- [开发实例](#section112771171317)
- [功能简介](#section123133332175224)
- [约束与限制](#section123181432175224)
- [开发指导](#section314416685113)
- [接口说明](#section13480315886)
- [开发实例](#section112771171317)
## 概述<a name="section77571101789"></a>
### 功能简介<a name="section123133332175224"></a>
HiSysEvent提供OpenHarmony打点接口,通过在关键路径打点记录系统在运行过程中的重要信息,辅助开发者定位问题,此外还支持开发者将数据上传到云进行大数据质量度量。
## 接口说明<a name="section13480315886"></a>
### 约束与限制<a name="section123181432175224"></a>
**HiSysEvent事件打点条件约束:**
- 在进行HiSysEvent事件打点之前,需要先完成HiSysEvent打点配置,具体配置方法请参考[《HiSysEvent打点配置指导》](subsys-dfx-hisysevent-write-config.md)
## 开发指导<a name="section314416685113"></a>
### 接口说明<a name="section13480315886"></a>
C++打点接口如下:
......@@ -258,7 +271,7 @@ HiSysEvent类,具体的API详见接口文档 。
</tbody>
</table>
## 开发实例<a name="section112771171317"></a>
### 开发实例<a name="section112771171317"></a>
C++接口实例
......@@ -281,5 +294,3 @@ C++接口实例
```
external_deps = [ "hisysevent_native:libhisysevent" ]
```
# HiSysEvent开发指导<a name="ZH-CN_TOPIC_0000001195021448"></a>
- **[HiSysEvent打点指导](subsys-dfx-hisysevent-write.md)**
- **[HiSysEvent打点配置指导](subsys-dfx-hisysevent-write-config.md)**
- **[HiSysEvent订阅指导](subsys-dfx-hisysevent-read.md)**
- **[HiSysEvent打点指导](subsys-dfx-hisysevent-write.md)**
- **[HiSysEvent查询指导](subsys-dfx-hisysevent-select.md)**
- **[HiSysEvent工具使用指导](subsys-dfx-hisysevent-tool.md)**
- **[HiSysEvent订阅指导](subsys-dfx-hisysevent-read.md)**
- **[HiSysEvent查询指导](subsys-dfx-hisysevent-select.md)**
- **[HiSysEvent工具使用指导](subsys-dfx-hisysevent-tool.md)**
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册