Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
f7edea18
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
You need to sign in or sign up before continuing.
提交
f7edea18
编写于
8月 10, 2023
作者:
X
xuyong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update description for SysEventManager-Listening&Query
Signed-off-by:
N
xuyong
<
xuyong59@huawei.com
>
上级
9c642c4f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
509 addition
and
340 deletion
+509
-340
zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-listening.md
.../device-dev/subsystems/subsys-dfx-hisysevent-listening.md
+260
-97
zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-query.md
zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-query.md
+249
-243
未找到文件。
zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-listening.md
浏览文件 @
f7edea18
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
### 功能简介
### 功能简介
HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接口实时获取关注的事件,例如电池模块
侦听
功耗相关的事件,用于分析耗电情况。
HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接口实时获取关注的事件,例如电池模块
订阅
功耗相关的事件,用于分析耗电情况。
### 约束与限制
### 约束与限制
...
@@ -16,40 +16,39 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
...
@@ -16,40 +16,39 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
## 开发指导
## 开发指导
### 接口说明
### 接口说明
#### C++接口说明
C++ HiSysEvent订阅开发能力如下:HiSysEventManager类,具体API详见接口目录(/base/hiviewdfx/hisysevent/interfaces/native/innerkits/hisysevent_manager/include/)。
>  **说明:**
>
> ListenerRule订阅规则对象构造函数形参类型RuleType请参考[HiSysEvent查询](subsys-dfx-hisysevent-query.md)中的“表4 RuleType匹配规则类型枚举”说明。
**表1**
HiSysEvent订阅接口
**表1**
HiSysEvent订阅接口
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
| int32_t
HiSysEventManager::AddListener(std::shared_ptr
<
HiSysEventListener
>
listener,
<br/>
std::vector
<
ListenerRule
>&
rules) | 接口功能:
注册订阅HiSysEvent系统事件侦听对象,可设置规则订阅某些事件。
<br/>
输入参数:
<br/>
-
listener:订阅回调对象。
<br/>
-
rules:事件订阅规则。
<br/>
返回值:
<br/>
-
0:订阅成功。
<br/>
-
负值:订阅
失败。 |
| int32_t
HiSysEventManager::AddListener(std::shared_ptr
<
HiSysEventListener
>
listener,
<br/>
std::vector
<
ListenerRule
>&
rules) | 接口功能:
添加对系统事件的订阅,通过设置规则订阅某些特定的事件。
<br/>
输入参数:
<br/>
-
listener:订阅回调对象。
<br/>
-
rules:事件订阅规则。
<br/>
返回值:
<br/>
-
0:订阅添加成功。
<br/>
-
负值:订阅添加
失败。 |
| int32_t
HiSysEventManager::RemoveListener(std::shared_ptr
<
HiSysEventListener
>
listener) | 接口功能:移除
订阅hisysevent系统事件侦听对象。
<br/>
输入参数:
<br/>
-
listener:订阅回调对象。
<br/>
返回值:
<br/>
-
0:取消订阅成功。
<br/>
-
负值:取消订阅
失败。 |
| int32_t
HiSysEventManager::RemoveListener(std::shared_ptr
<
HiSysEventListener
>
listener) | 接口功能:移除
对系统事件的订阅。
<br/>
输入参数:
<br/>
-
listener:订阅回调对象。
<br/>
返回值:
<br/>
-
0:订阅移除成功。
<br/>
-
负值:订阅移除
失败。 |
**表2**
ListenerRule订阅规则对象
**表2**
ListenerRule订阅规则对象
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
| ListenerRule(const
std::string
&
tag,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件标签订阅规则对象。
<br/>
输入参数:
<br/>
-
tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。 |
| ListenerRule(const
std::string
&
tag,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件标签订阅规则对象。
<br/>
输入参数:
<br/>
-
tag:订阅规则中指定的系统事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。 |
| ListenerRule(const
std::string
&
domain,
<br/>
const
std::string
&
eventName,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件领域与事件名称订阅规则对象。
<br/>
输入参数:
<br/>
-
domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。 |
| ListenerRule(const
std::string
&
domain,
<br/>
const
std::string
&
eventName,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件领域与事件名称订阅规则对象。
<br/>
输入参数:
<br/>
-
domain:订阅规则中指定的系统事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
eventName:订阅规则中指定的系统事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。 |
| ListenerRule(const
std::string
&
domain,
<br/>
const
std::string
&
eventName,
<br/>
const
std::string
&
tag,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件领域、事件名称,事件标签订阅规则对象。
<br/>
输入参数:
<br/>
-
tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
<br/>
-
domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。 |
| ListenerRule(const
std::string
&
domain,
<br/>
const
std::string
&
eventName,
<br/>
const
std::string
&
tag,
<br/>
RuleType
ruleType
=
RuleType::WHOLE_WORD) | 接口功能:订阅规则构造函数,创建事件领域、事件名称,事件标签订阅规则对象。
<br/>
输入参数:
<br/>
-
tag:订阅规则中指定的系统事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
<br/>
-
domain:订阅规则中指定的系统事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
eventName:订阅规则中指定的系统事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
<br/>
-
ruleType:订阅规则的规则类型,RuleType枚举类型。 |
**表3**
RuleType类型
| 枚举值 | 描述 |
**表3**
HiSysEventListener订阅对象
| -------- | -------- |
| WHOLE_WORD | 全词匹配类型 |
| PREFIX | 前缀匹配类型 |
| REGULAR | 正则匹配类型 |
**表4**
HiSysEventListener订阅对象
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
| void
HiSysEventListener::OnEvent(std::shared_ptr
<
HiSysEventRecord
>
sysEvent) | 接口功能:订阅事件的回调接口。
<br/>
输入参数:
<br/>
-
sysEvent:
监听到的实时HiSysEvent
事件。
<br/>
返回值:
<br/>
无。 |
| void
HiSysEventListener::OnEvent(std::shared_ptr
<
HiSysEventRecord
>
sysEvent) | 接口功能:订阅事件的回调接口。
<br/>
输入参数:
<br/>
-
sysEvent:
订阅到的实时系统
事件。
<br/>
返回值:
<br/>
无。 |
| void
HiSysEventListener::OnServiceDied() | 接口功能:服务异常回调。
<br/>
输入参数:
<br/>
无。
<br/>
返回值:
<br/>
无。 |
| void
HiSysEventListener::OnServiceDied() | 接口功能:服务异常回调。
<br/>
输入参数:
<br/>
无。
<br/>
返回值:
<br/>
无。 |
**表5
**
HiSysEventRecord系统事件对象
**表4
**
HiSysEventRecord系统事件对象
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
|std::string
HiSysEventRecord::AsJson()|接口功能:获取该系统事件的内容。
<br/>
输入参数:
<br/>
无。
<br/>
返回值:
<br/>
该系统事件的内容。|
|std::string
HiSysEventRecord::AsJson()|接口功能:获取该系统事件的内容。
<br/>
输入参数:
<br/>
无。
<br/>
返回值:
<br/>
该系统事件的内容。|
...
@@ -77,83 +76,247 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
...
@@ -77,83 +76,247 @@ HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接
|int
HiSysEventRecord::GetParamValue(const std::string
&
param,
std::vector
<
double
>&
value)|接口功能:将该系统事件键名为param的值解析为double类型的数组。
<br/>
输入参数:
<br/>
-
param:键名。
<br/>
-
value:ouble类型数组引用。
<br/>
返回值:
<br/>
-
0:解析成功。
<br/>
-
-1:该系统事件初始化失败,无法解析。
<br/>
-
-2:不存在的键名。
<br/>
-
-3:类型不匹配,无法转换成double类型的数组。|
|int
HiSysEventRecord::GetParamValue(const std::string
&
param,
std::vector
<
double
>&
value)|接口功能:将该系统事件键名为param的值解析为double类型的数组。
<br/>
输入参数:
<br/>
-
param:键名。
<br/>
-
value:ouble类型数组引用。
<br/>
返回值:
<br/>
-
0:解析成功。
<br/>
-
-1:该系统事件初始化失败,无法解析。
<br/>
-
-2:不存在的键名。
<br/>
-
-3:类型不匹配,无法转换成double类型的数组。|
|int
HiSysEventRecord::GetParamValue(const std::string
&
param,
std::vector
<
std::string
>&
value)|接口功能:将该系统事件键名为param的值解析为string类型的数组。
<br/>
输入参数:
<br/>
-
param:键名。
<br/>
-
value:std::string类型数组引用。
<br/>
返回值:
<br/>
-
0:解析成功。
<br/>
-
-1:该系统事件初始化失败,无法解析。
<br/>
-
-2:不存在的键名。
<br/>
-
-3:类型不匹配,无法转换成std::string类型的数组。|
|int
HiSysEventRecord::GetParamValue(const std::string
&
param,
std::vector
<
std::string
>&
value)|接口功能:将该系统事件键名为param的值解析为string类型的数组。
<br/>
输入参数:
<br/>
-
param:键名。
<br/>
-
value:std::string类型数组引用。
<br/>
返回值:
<br/>
-
0:解析成功。
<br/>
-
-1:该系统事件初始化失败,无法解析。
<br/>
-
-2:不存在的键名。
<br/>
-
-3:类型不匹配,无法转换成std::string类型的数组。|
#### C接口说明
## 开发实例
C HiSysEvent订阅开发能力如下:具体API详见接口目录(/base/hiviewdfx/hisysevent/interfaces/native/innerkits/hisysevent_manager/include/)。
### C++接口实例
>  **说明:**
>
订阅HiSysEvent事件C++接口实例。
> HiSysEventWatcher订阅回调结构体OnEvent回调方法形参类型HiSysEventRecord请参考[HiSysEvent查询](subsys-dfx-hisysevent-query.md)中的“表11 HiSysEventRecord事件结构体”及“表12 HiSysEventRecord解析接口”说明。
1.
源代码开发
**表5**
HiSysEvent订阅接口
自定义订阅回调实现类头文件DemoListener.h:
| 接口名称 | 描述 |
```
| ------------------------------------------------------------ | ------------------------------------------------------------ |
#ifndef DEMO_LISTENER_H
| int OH_HiSysEvent_Add_Watcher(HiSysEventWatcher
*
watcher,
<br/>
HiSysEventWatchRule rules[],
<br/>
size_t ruleSize); | 接口功能:添加对系统事件的订阅,通过设置规则订阅某些特定的事件。
<br/>
输入参数:
<br/>
-
watcher:订阅回调对象。
<br/>
-
rules:事件订阅规则数组。
<br/>
-
ruleSize:事件订阅规则数组长度。
<br/>
返回值:
<br/>
-
0:订阅添加成功。
<br/>
-
负值:订阅添加失败。 |
#define DEMO_LISTENER_H
| int OH_HiSysEvent_Remove_Watcher(HiSysEventWatcher
*
watcher); | 接口功能:移除对系统事件的订阅。
<br/>
输入参数:
<br/>
-
watcher:订阅回调对象。
<br/>
返回值:
<br/>
-
0:订阅移除成功。
<br/>
-
负值:订阅移除失败。 |
#include "hisysevent_listener.h"
**表6**
HiSysEventWatcher订阅回调结构体
#include <string>
| 属性名称 | 属性类型 | 描述 |
| ------------- | -------------------------------------------------- | ------------------------------------------------------------ |
class DemoListener : public OHOS::HiviewDFX::HiSysEventListener {
| OnEvent | void (
*
)(HiSysEventRecord record); | 接口功能:订阅事件的回调接口。
<br/>
输入参数:
<br/>
-
record:订阅到的实时系统事件。
<br/>
返回值:
<br/>
无。 |
public:
| OnServiceDied | void (
*
)(); | 接口功能:服务异常回调。
<br/>
输入参数:
<br/>
无。
<br/>
返回值:
<br/>
无。 |
explicit DemoListener() : HiSysEventListener() {}
virtual ~DemoListener() {}
**表7**
HiSysEventWatchRule订阅规则结构体
| 属性名称 | 属性类型 | 描述 |
public:
| ------------- | --------- | ---------------------------------- |
void OnEvent(std::shared_ptr<HiSysEventRecord> sysEvent);
| domain | char[] | 用来指定订阅的系统事件领域。 |
void OnServiceDied();
| name | char[] | 用来指定订阅的系统事件名称。 |
};
| tag | char[] | 用来指定订阅的系统事件标签。 |
| ruleType | int | 用于指定订阅事件的匹配规则,取值请参考
[
HiSysEvent查询
](
subsys-dfx-hisysevent-query.md
)
中的“表4 RuleType匹配规则类型枚举”。 |
#endif // DEMO_LISTENER_H
| eventType | int | 用于指定订阅事件的事件类型,取值请参考
[
HiSysEvent查询
](
subsys-dfx-hisysevent-query.md
)
中的“表3 EventType事件类型枚举”,当取值0,表示订阅所有的事件类型。 |
```
### 开发步骤
增加DemoListener.cpp文件,在DemoListener类中根据实际需求自定义订阅回调接口的实现逻辑:
#### C++ HiSysEvent订阅开发步骤
```
#include "demo_listener.h"
1.
引入对应的头文件。
#include <iostream>
```c++
#include "hisysevent_manager.h"
void DemoListener::OnEvent(std::shared_ptr<HiSysEventRecord> sysEvent)
```
{
if (sysEvent == nullptr) {
2.
业务领域实现对应的订阅回调接口。
return;
```c++
class TestListener : public OHOS::HiviewDFX::HiSysEventListener {
public:
void OnEvent(std::shared_ptr<HiSysEventRecord> record)
{
if (record == nullptr) {
return;
}
std::cout << record->AsJson() << std::endl;
}
void OnServiceDied()
{
std::cout << std::string("service disconnect, exit") << std::endl;
exit(0);
}
};
```
3.
在订阅事件的地方调用订阅接口,并传入相应的订阅回调参数、订阅规则列表,在业务结束,注销此次订阅。
```c++
auto testListener = std::make_shared<TestListener>();
// 事件标签规则订阅,规则类型为默认的全词匹配类型
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);
// 开始系统事件订阅
auto ret = HiSysEventManager::AddEventListener(testListener, sysRules);
// 订阅结束,移除订阅回调参数。
if (ret == 0) {
HiSysEventManager::RemoveListener(testListener);
}
```
#### C HiSysEvent订阅开发步骤
1.
引入对应的头文件。
```c++
#include "hisysevent_manager_c.h"
```
2.
业务领域实现对应的订阅回调接口。
```c++
void OnEventTest(HiSysEventRecord record)
{
printf("OnEventTest: event=%s", record.jsonStr);
}
void OnServiceDiedTest()
{
printf("OnServiceDied");
}
```
3.
在订阅事件的地方调用订阅接口,并传入相应的订阅回调参数、订阅规则列表,在业务结束,注销此次订阅。
```c++
HiSysEventWatcher watcher;
watcher.OnEvent = OnEventTest;
watcher.OnServiceDied = OnServiceDiedTest;
// 事件标签规则订阅,规则类型为默认的全词匹配类型
constexpr char DFX_TAG[] = "dfx";
HiSysEventWatchRule tagRule;
(void)strcpy_s(tagRule.tag, strlen(DFX_TAG) + 1, DFX_TAG);
tagRule.ruleType = 1;
tagRule.eventType = 0;
// 事件标签规则订阅,规则类型为正则匹配类型
constexpr char DFX_PATTERN_TAG[] = "dfx.*";
HiSysEventWatchRule regRule;
(void)strcpy_s(regRule.tag, strlen(DFX_PATTERN_TAG) + 1, DFX_PATTERN_TAG);
regRule.ruleType = 3;
regRule.eventType = 0;
// 事件领域及事件名称规则订阅,规则类型为前缀匹配类型
constexpr char DOMAIN[] = "HIVIEWDFX";
constexpr char NAME[] = "APP_USAGE";
HiSysEventWatchRule domainNameRule;
(void)strcpy_s(domainNameRule.domain, strlen(DOMAIN) + 1, DOMAIN);
(void)strcpy_s(domainNameRule.name, strlen(NAME) + 1, NAME);
domainNameRule.ruleType = 2;
domainNameRule.eventType = 0;
// 开始系统事件订阅
HiSysEventWatchRule rules[] = {tagRule, regRule, domainNameRule};
int ret = OH_HiSysEvent_Add_Watcher(&watcher, rules, sizeof(rules) / sizeof(HiSysEventWatchRule));
// 订阅结束,移除订阅回调参数。
if (ret == 0) {
ret = OH_HiSysEvent_Remove_Watcher(&watcher);
}
```
### 开发实例
#### C++ HiSysEvent订阅开发实例
假设业务模块需要订阅事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
1.
在业务模块的在BUILD.gn里增加hisysevent部件的libhisysevent及libhisyseventmanager依赖。
```c++
external_deps = [
"hisysevent:libhisysevent",
"hisysevent:libhisyseventmanager",
]
```
2.
在业务模块的TestEventListening()函数中,调用订阅接口去订阅事件,业务结束时移除事件订阅。
```c++
#include <iostream>
#include "hisysevent_manager.h"
using namespace OHOS::HiviewDFX;
class TestListener : public HiSysEventQueryCallback {
public:
void OnEvent(std::shared_ptr<HiSysEventRecord> record)
{
if (record == nullptr) {
return;
}
std::cout << record->AsJson() << std::endl;
}
void OnServiceDied()
{
std::cout << std::string("service disconnect, exit") << std::endl;
exit(0);
}
};
void TestEventListening()
{
auto testListener = std::make_shared<TestListener>();
ListenerRule domainNameRule("HIVIEWDFX", "PLUGIN_LOAD", RuleType::WHOLE_WORD);
std::vector<ListenerRule> sysRules;
sysRules.push_back(domainNameRule);
auto ret = HiSysEventManager::AddEventListener(testListener, sysRules);
if (ret == 0) {
HiSysEventManager::RemoveListener(testListener);
}
}
```
#### C HiSysEvent订阅开发实例
假设业务模块需要订阅事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
1.
在业务模块的在BUILD.gn里增加hisysevent部件的libhisysevent及libhisyseventmanager依赖。
```c++
external_deps = [ "hisysevent:libhisyseventmanager" ]
// for strcpy_s
deps = [ "//third_party/bounds_checking_function:libsec_shared" ]
```
2.
在业务模块的TestEventListening()函数中,调用订阅接口去订阅事件,业务结束时移除事件订阅。
```c++
#include <securec.h>
#include "hisysevent_manager_c.h"
void OnEventTest(HiSysEventRecord record)
{
printf("OnEventTest: event=%s", record.jsonStr);
}
void OnServiceDiedTest()
{
printf("OnServiceDied");
}
void TestEventListening()
{
HiSysEventWatcher watcher;
watcher.OnEvent = OnEventTest;
watcher.OnServiceDied = OnServiceDiedTest;
constexpr char DOMAIN[] = "HIVIEWDFX";
constexpr char NAME[] = "PLUGIN_LOAD";
HiSysEventWatchRule domainNameRule;
(void)strcpy_s(domainNameRule.domain, strlen(DOMAIN) + 1, DOMAIN);
(void)strcpy_s(domainNameRule.name, strlen(NAME) + 1, NAME);
domainNameRule.ruleType = 1;
domainNameRule.eventType = 0;
HiSysEventWatchRule rules[] = {domainNameRule};
int ret = OH_HiSysEvent_Add_Watcher(&watcher, rules, sizeof(rules) / sizeof(HiSysEventWatchRule));
if (ret == 0) {
ret = OH_HiSysEvent_Remove_Watcher(&watcher);
}
}
std::cout << sysEvent.AsJson() << std::endl;
}
}
```
\ No newline at end of file
void DemoListener::OnServiceDied()
{
std::cout << std::string("service disconnect, exit") << std::endl;
exit(0);
}
```
通过HiSysEventManager类提供的AddEventListener接口注册回调对象,完成对HiSysEvent的订阅:
```
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组件的libhisysevent及libhisyseventmanager库:
```
external_deps = [
"hisysevent:libhisysevent",
"hisysevent:libhisyseventmanager",
]
```
zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-query.md
浏览文件 @
f7edea18
...
@@ -16,7 +16,7 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
...
@@ -16,7 +16,7 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
>  **说明:**
>  **说明:**
>
>
> HiSysEventQueryCallback查询回调对象OnQuery方法中的形参类型HiSysEventRecord请参考[HiSysEvent订阅](subsys-dfx-hisysevent-listening.md)中的“表
5
HiSysEventRecord系统事件对象”说明。
> HiSysEventQueryCallback查询回调对象OnQuery方法中的形参类型HiSysEventRecord请参考[HiSysEvent订阅](subsys-dfx-hisysevent-listening.md)中的“表
4
HiSysEventRecord系统事件对象”说明。
**表1**
HiSysEvent查询接口
**表1**
HiSysEvent查询接口
...
@@ -32,13 +32,54 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
...
@@ -32,13 +32,54 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
| endTime | long long | 用于指定查询事件的结束时间,格式为Unix毫秒级时间戳。 |
| endTime | long long | 用于指定查询事件的结束时间,格式为Unix毫秒级时间戳。 |
| maxEvents | int | 用于指定查询返回事件的最多条数。 |
| maxEvents | int | 用于指定查询返回事件的最多条数。 |
**表3**
QueryRule查询规则对象
**表3**
EventType事件类型枚举
| 事件类型 | 值 | 描述 |
| ------------ | ---- | ------------------ |
| FAULT | 1 | 故障类型。 |
| STATISTIC | 2 | 统计类型。 |
| SECURITY | 3 | 安全类型。 |
| BEHAVIOR | 4 | 用户行为类型。 |
**表4**
RuleType匹配规则类型枚举
| 查询规则类型 | 值 | 描述 |
| ------------ | ---- | ------------------ |
| WHOLE_WORD | 1 | 全词匹配类型。 |
| PREFIX | 2 | 前缀匹配类型。 |
| REGULAR | 3 | 正则匹配类型。 |
**表5**
QueryRule查询规则对象
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
| QueryRule(const
std::string
&
domain,
<br/>
const
std::vector
<
std::string
>&
eventList
) | 接口功能:查询规则构造函数,创建查询规则对象。
<br/>
输入参数:
<br/>
-
domain:string类型,用来标识查询规则对象的事件所属领域,如果传入的是空字符串,则默认事件领域字段匹配成功。
<br/>
-
eventList:std::vector
<
std::string
>
类型,事件名称的列表,如果传入的是空字符串,则默认事件名称字段匹配成功
。 |
| QueryRule(const
std::string
&
domain,
<br/>
const
std::vector
<
std::string
>&
eventList
,
<br/>
RuleType
ruleType,
<br/>
uint32_t
eventType,
<br/>
const
std::string
&
cond) | 接口功能:查询规则构造函数,创建查询规则对象。
<br/>
输入参数:
<br/>
-
domain:string类型,用来标识查询规则对象的事件所属领域,如果传入的是空字符串,则默认事件领域字段匹配成功。
<br/>
-
eventList:std::vector
<
std::string
>
类型,事件名称的列表,如果传入的是空字符串,则默认事件名称字段匹配成功。
<br/>
-
ruleType:RuleType类型,请参考表4。
<br/>
-
eventType:uint32_t类型,查询的系统事件类型,系统事件类型请参考表3,当eventType取值为0时,表示查询所有事件类型。
<br/>
-
cond:string类型,设置的系统事件查询条件
。 |
**表4**
HiSysEventQueryCallback查询回调对象
对于condition参数需要按照指定的JSON字符串格式传入,使用实例如下:
```json
{
"version":"V1",
"condition":{
"and":[
{"param":"type_","op":">","value":0},
{"param":"uid_","op":"=","value":1201}
]
}
}
```
-
version字段是必选字段,表示传入条件的支持版本,当前只支持V1版本。
-
condition字段是必选字段,表示传入条件的具体内容。
-
and字段是可选字段,表示条件之间是与的关系。
-
param字段是必选字段,表示条件匹配的参数名称,必须为字符串类型。
-
op字段是必选字段,表示条件匹配的参数比较符,必须为字符串类型,支持的比较符包括=、>、
<
、
>
=、<=。
-
value字段是必选字段,表示条件匹配的参数值,必须为字符串类型或整型。
**表6**
HiSysEventQueryCallback查询回调对象
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| -------- | -------- |
| -------- | -------- |
...
@@ -49,13 +90,13 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
...
@@ -49,13 +90,13 @@ C++ HiSysEvent查询开发能力如下:HiSysEventManager类,具体API详见
C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hiviewdfx/hisysevent/interfaces/native/innerkits/hisysevent_manager/include/)。
C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hiviewdfx/hisysevent/interfaces/native/innerkits/hisysevent_manager/include/)。
**表5
**
HiSysEvent查询接口
**表7
**
HiSysEvent查询接口
| 接口名称 | 描述 |
| 接口名称 | 描述 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| int OH_HiSysEvent_Query(const HiSysEventQueryArg& arg, HiSysEventQueryRule rules[], size_t ruleSize, HiSysEventQueryCallback& callback); | 接口功能:支持根据时间段、事件领域、事件名称、事件参数等条件,查询满足条件的HiSysEvent事件。
<br/>
输入参数:
<br/>
-
arg:查询参数。
<br/>
-
rules:事件过滤规则。
<br/>
- ruleSize:事件过滤规则数量。
<br/>
-
callback:查询接口回调。
<br/>
返回值:
<br/>
-
0:查询成功。
<br/>
-
负值:查询失败。 |
| int OH_HiSysEvent_Query(const HiSysEventQueryArg& arg, HiSysEventQueryRule rules[], size_t ruleSize, HiSysEventQueryCallback& callback); | 接口功能:支持根据时间段、事件领域、事件名称、事件参数等条件,查询满足条件的HiSysEvent事件。
<br/>
输入参数:
<br/>
-
arg:查询参数。
<br/>
-
rules:事件过滤规则。
<br/>
- ruleSize:事件过滤规则数量。
<br/>
-
callback:查询接口回调。
<br/>
返回值:
<br/>
-
0:查询成功。
<br/>
-
负值:查询失败。 |
**表6
**
HiSysEventQueryArg查询参数结构体
**表8
**
HiSysEventQueryArg查询参数结构体
| 属性名称 | 属性类型 | 描述 |
| 属性名称 | 属性类型 | 描述 |
| --------- | -------- | ---------------------------------------------------- |
| --------- | -------- | ---------------------------------------------------- |
...
@@ -63,7 +104,7 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
...
@@ -63,7 +104,7 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
| endTime | int64_t | 用于指定查询事件的结束时间,格式为Unix毫秒级时间戳。 |
| endTime | int64_t | 用于指定查询事件的结束时间,格式为Unix毫秒级时间戳。 |
| maxEvents | int32_t | 用于指定查询返回事件的最多条数。 |
| maxEvents | int32_t | 用于指定查询返回事件的最多条数。 |
**表7
**
HiSysEventQueryRule查询规则结构体
**表9
**
HiSysEventQueryRule查询规则结构体
| 属性名称 | 属性类型 | 描述 |
| 属性名称 | 属性类型 | 描述 |
| ------------- | --------- | ---------------------------------- |
| ------------- | --------- | ---------------------------------- |
...
@@ -72,35 +113,14 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
...
@@ -72,35 +113,14 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
| eventListSize | size_t | 用于指定查询的事件名称列表大小。 |
| eventListSize | size_t | 用于指定查询的事件名称列表大小。 |
| condition | char
*
| 用于指定查询的自定义事件参数条件。 |
| condition | char
*
| 用于指定查询的自定义事件参数条件。 |
对于condition参数需要按照指定的JSON字符串格式传入,使用实例如下:
**表10**
HiSysEventQueryCallback查询回调结构体
```
json
{
"version"
:
"V1"
,
"condition"
:{
"and"
:[
{
"param"
:
"type_"
,
"op"
:
">"
,
"value"
:
0
},
{
"param"
:
"uid_"
,
"op"
:
"="
,
"value"
:
1201
}
]
}
}
```
-
version字段是必选字段,表示传入条件的支持版本,当前只支持V1版本。
-
condition字段是必选字段,表示传入条件的具体内容。
-
and字段是可选字段,表示条件之间是与的关系。
-
param字段是必选字段,表示条件匹配的参数名称,必须为字符串类型。
-
op字段是必选字段,表示条件匹配的参数比较符,必须为字符串类型,支持的比较符包括=、>、
<
、
>
=、<=。
-
value字段是必选字段,表示条件匹配的参数值,必须为字符串类型或整型。
**表8**
HiSysEventQueryCallback查询回调结构体
| 属性名称 | 属性类型 | 描述 |
| 属性名称 | 属性类型 | 描述 |
| ---------- | -------------------------------------------------- | ------------------------------------------------------------ |
| ---------- | -------------------------------------------------- | ------------------------------------------------------------ |
| OnQuery | void (
*
)(HiSysEventRecord records[], size_t size); | 接口功能:事件查询的回调。
<br/>
输入参数:
<br/>
-
records:返回的事件集合。
<br/>
- size:返回的事件集合大小。 |
| OnQuery | void (
*
)(HiSysEventRecord records[], size_t size); | 接口功能:事件查询的回调。
<br/>
输入参数:
<br/>
-
records:返回的事件集合。
<br/>
- size:返回的事件集合大小。 |
| OnComplete | void (
*
)(int32_t reason, int32_t total); | 接口功能:事件查询完成的回调。
<br/>
输入参数:
<br/>
-
reason:查询结束的返回原因,0表示查询正常结束,其他值表示查询异常结束。
<br/>
-
total:本次查询返回的事件的总数量。 |
| OnComplete | void (
*
)(int32_t reason, int32_t total); | 接口功能:事件查询完成的回调。
<br/>
输入参数:
<br/>
-
reason:查询结束的返回原因,0表示查询正常结束,其他值表示查询异常结束。
<br/>
-
total:本次查询返回的事件的总数量。 |
**表9
**
HiSysEventRecord事件结构体
**表11
**
HiSysEventRecord事件结构体
| 属性名称 | 属性类型 | 描述 |
| 属性名称 | 属性类型 | 描述 |
| --------- | ------------------- | -------------------------- |
| --------- | ------------------- | -------------------------- |
...
@@ -120,7 +140,7 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
...
@@ -120,7 +140,7 @@ C HiSysEvent查询开发能力如下:具体API详见接口目录(/base/hivie
| tag | char
*
| 事件的标签。 |
| tag | char
*
| 事件的标签。 |
| jsonStr | char
*
| 事件的内容。 |
| jsonStr | char
*
| 事件的内容。 |
**表10
**
HiSysEventRecord解析接口
**表12
**
HiSysEventRecord解析接口
| 接口名称 | |
| 接口名称 | |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
...
@@ -145,106 +165,106 @@ HiSysEventRecord解析接口的返回值说明如下:
...
@@ -145,106 +165,106 @@ HiSysEventRecord解析接口的返回值说明如下:
#### C++ HiSysEvent查询开发步骤
#### C++ HiSysEvent查询开发步骤
1.
首先,需要
引入对应的头文件。
1.
引入对应的头文件。
```
c++
```c++
#include "hisysevent_manager.h"
#include "hisysevent_manager.h"
```
```
2.
然后,业务领域需要
实现对应的查询回调接口。
2.
业务领域
实现对应的查询回调接口。
```
c++
```c++
class
TestQueryCallback
:
public
HiSysEventQueryCallback
{
class TestQueryCallback : public HiSysEventQueryCallback {
public:
public:
void
OnQuery
(
std
::
shared_ptr
<
std
::
vector
<
HiSysEventRecord
>>
sysEvents
)
override
void OnQuery(std::shared_ptr<std::vector<HiSysEventRecord>> sysEvents) override
{
{
if
(
sysEvents
==
nullptr
)
{
if (sysEvents == nullptr) {
return
;
return;
}
}
for_each
((
*
sysEvents
).
cbegin
(),
(
*
sysEvents
).
cend
(),
[](
const
HiSysEventRecord
&
event
)
{
for_each((*sysEvents).cbegin(), (*sysEvents).cend(), [](const HiSysEventRecord& event) {
std
::
cout
<<
event
.
AsJson
()
<<
std
::
endl
;
std::cout << event.AsJson() << std::endl;
});
});
}
}
void
OnComplete
(
int32_t
reason
,
int32_t
total
)
override
void OnComplete(int32_t reason, int32_t total) override
{
{
std
::
cout
<<
"Query completed"
<<
std
::
endl
;
std::cout << "Query completed" << std::endl;
return
;
return;
}
}
};
};
```
```
3.
最后,在需要
查询的地方调用查询接口,并传入相应的查询参数、查询规则、查询回调参数。
3.
在
查询的地方调用查询接口,并传入相应的查询参数、查询规则、查询回调参数。
```
c++
```c++
// 创建查询参数对象
// 创建查询参数对象
long
long
startTime
=
0
;
long long startTime = 0;
long
long
endTime
=
1668245644000
;
//2022-11-12 09:34:04
long long endTime = 1668245644000; //2022-11-12 09:34:04
int
queryCount
=
10
;
int queryCount = 10;
QueryArg
arg
(
startTime
,
endTime
,
queryCount
);
QueryArg arg(startTime, endTime, queryCount);
// 创建查询规则对象
// 创建查询规则对象
QueryRule
rule
(
"HIVIEWDFX"
,
{
"PLUGIN_LOAD"
});
QueryRule rule("HIVIEWDFX", { "PLUGIN_LOAD" });
std
::
vector
<
QueryRule
>
queryRules
=
{
rule
};
std::vector<QueryRule> queryRules = { rule };
// 创建查询回调对象
// 创建查询回调对象
auto
queryCallback
=
std
::
make_shared
<
TestQueryCallback
>
();
auto queryCallback = std::make_shared<TestQueryCallback>();
// 调用查询接口
// 调用查询接口
HiSysEventManager
::
Query
(
arg
,
queryRules
,
queryCallback
);
HiSysEventManager::Query(arg, queryRules, queryCallback);
```
```
#### C HiSysEvent查询开发步骤
#### C HiSysEvent查询开发步骤
1.
首先,需要
引入对应的头文件。
1.
引入对应的头文件。
```
c++
```c++
#include "hisysevent_manager_c.h"
#include "hisysevent_manager_c.h"
```
```
2.
然后,业务领域需要
实现对应的查询回调接口。
2.
业务领域
实现对应的查询回调接口。
```
c++
```c++
void
OnQueryTest
(
HiSysEventRecord
records
[],
size_t
size
)
void OnQueryTest(HiSysEventRecord records[], size_t size)
{
{
for
(
size_t
i
=
0
;
i
<
size
;
i
++
)
{
for (size_t i = 0; i < size; i++) {
printf
(
"OnQuery: event=%s"
,
records
[
i
].
jsonStr
);
printf("OnQuery: event=%s", records[i].jsonStr);
}
}
}
}
void
OnCompleteTest
(
int32_t
reason
,
int32_t
total
)
void OnCompleteTest(int32_t reason, int32_t total)
{
{
printf
(
"OnCompleted, res=%d, total=%d
\n
"
,
reason
,
total
);
printf("OnCompleted, res=%d, total=%d\n", reason, total);
}
}
```
```
3.
最后,在需要
查询的地方调用查询接口,并传入相应的查询参数、查询规则、查询回调参数。
3.
在
查询的地方调用查询接口,并传入相应的查询参数、查询规则、查询回调参数。
```
c++
```c++
// 创建查询参数对象
// 创建查询参数对象
HiSysEventQueryArg
arg
;
HiSysEventQueryArg arg;
arg
.
beginTime
=
0
;
arg.beginTime = 0;
arg
.
endTime
=
1668245644000
;
//2022-11-12 09:34:04
arg.endTime = 1668245644000; //2022-11-12 09:34:04
arg
.
maxEvents
=
10
;
arg.maxEvents = 10;
// 创建查询规则对象
// 创建查询规则对象
constexpr
char
TEST_DOMAIN
[]
=
"HIVIEWDFX"
;
constexpr char TEST_DOMAIN[] = "HIVIEWDFX";
constexpr
char
TEST_NAME
[]
=
"PLUGIN_LOAD"
;
constexpr char TEST_NAME[] = "PLUGIN_LOAD";
HiSysEventQueryRule
rule
;
HiSysEventQueryRule rule;
(
void
)
strcpy_s
(
rule
.
domain
,
strlen
(
TEST_DOMAIN
)
+
1
,
TEST_DOMAIN
);
(void)strcpy_s(rule.domain, strlen(TEST_DOMAIN) + 1, TEST_DOMAIN);
(
void
)
strcpy_s
(
rule
.
eventList
[
0
],
strlen
(
TEST_NAME
)
+
1
,
TEST_NAME
);
(void)strcpy_s(rule.eventList[0], strlen(TEST_NAME) + 1, TEST_NAME);
rule
.
eventListSize
=
1
;
rule.eventListSize = 1;
rule
.
condition
=
nullptr
;
rule.condition = nullptr;
HiSysEventQueryRule
rules
[]
=
{
rule
};
HiSysEventQueryRule rules[] = { rule };
// 创建查询回调对象
// 创建查询回调对象
HiSysEventQueryCallback
callback
;
HiSysEventQueryCallback callback;
callback
.
OnQuery
=
OnQueryTest
;
callback.OnQuery = OnQueryTest;
callback
.
OnComplete
=
OnCompleteTest
;
callback.OnComplete = OnCompleteTest;
// 调用查询接口
// 调用查询接口
OH_HiSysEvent_Query
(
arg
,
rules
,
sizeof
(
rules
)
/
sizeof
(
HiSysEventQueryRule
),
callback
);
OH_HiSysEvent_Query(arg, rules, sizeof(rules) / sizeof(HiSysEventQueryRule), callback);
```
```
### 开发实例
### 开发实例
...
@@ -252,131 +272,117 @@ HiSysEventRecord解析接口的返回值说明如下:
...
@@ -252,131 +272,117 @@ HiSysEventRecord解析接口的返回值说明如下:
假设业务模块需要查询截止至当前时间、事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
假设业务模块需要查询截止至当前时间、事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
1.
首先,需要
在业务模块的在BUILD.gn里增加hisysevent部件的libhisysevent及libhisyseventmanager依赖。
1.
在业务模块的在BUILD.gn里增加hisysevent部件的libhisysevent及libhisyseventmanager依赖。
```
c++
```c++
external_deps
=
[
external_deps = [
"hisysevent:libhisysevent"
,
"hisysevent:libhisysevent",
"hisysevent:libhisyseventmanager"
,
"hisysevent:libhisyseventmanager",
]
]
```
```
2.
在业务模块的TestQuery()函数中,调用查询接口去查询事件。
2.
在业务模块的TestQuery()函数中,调用查询接口去查询事件。
```
c++
```c++
#include "hisysevent_manager.h"
#include "hisysevent_manager.h"
#include <iostream>
#include <iostream>
#include <unistd.h>
#include <unistd.h>
using
namespace
OHOS
::
HiviewDFX
;
using namespace OHOS::HiviewDFX;
class
TestQueryCallback
:
public
HiSysEventQueryCallback
{
class TestQueryCallback : public HiSysEventQueryCallback {
public:
public:
void
OnQuery
(
std
::
shared_ptr
<
std
::
vector
<
HiSysEventRecord
>>
sysEvents
)
override
void OnQuery(std::shared_ptr<std::vector<HiSysEventRecord>> sysEvents) override
{
{
if
(
sysEvents
==
nullptr
)
{
if (sysEvents == nullptr) {
return
;
return;
}
}
for_each
((
*
sysEvents
).
cbegin
(),
(
*
sysEvents
).
cend
(),
[](
const
HiSysEventRecord
&
event
)
{
for_each((*sysEvents).cbegin(), (*sysEvents).cend(), [](const HiSysEventRecord& event) {
std
::
cout
<<
event
.
AsJson
()
<<
std
::
endl
;
std::cout << event.AsJson() << std::endl;
});
});
}
}
void
OnComplete
(
int32_t
reason
,
int32_t
total
)
override
void OnComplete(int32_t reason, int32_t total) override
{
{
std
::
cout
<<
"Query completed"
<<
std
::
endl
;
std::cout << "Query completed" << std::endl;
return
;
return;
}
}
};
};
int64_t
GetMilliseconds
()
int64_t GetMilliseconds()
{
{
auto
now
=
std
::
chrono
::
system_clock
::
now
();
auto now = std::chrono::system_clock::now();
auto
millisecs
=
std
::
chrono
::
duration_cast
<
std
::
chrono
::
milliseconds
>
(
now
.
time_since_epoch
());
auto millisecs = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
return
millisecs
.
count
();
return millisecs.count();
}
}
void
TestQuery
()
void TestQuery()
{
{
// 创建查询参数对象
long long startTime = 0;
long
long
startTime
=
0
;
long long endTime = GetMilliseconds();
long
long
endTime
=
GetMilliseconds
();
int maxEvents = 100;
int
maxEvents
=
100
;
QueryArg arg(startTime, endTime, maxEvents);
QueryArg
arg
(
startTime
,
endTime
,
maxEvents
);
QueryRule rule("HIVIEWDFX", { "PLUGIN_LOAD" });
std::vector<QueryRule> queryRules = { rule };
// 创建查询规则对象
auto queryCallback = std::make_shared<TestQueryCallback>();
QueryRule
rule
(
"HIVIEWDFX"
,
{
"PLUGIN_LOAD"
});
int ret = HiSysEventManager::Query(arg, queryRules, queryCallback);
std
::
vector
<
QueryRule
>
queryRules
=
{
rule
};
}
```
// 创建查询回调对象
auto
queryCallback
=
std
::
make_shared
<
TestQueryCallback
>
();
// 调用查询接口
int
ret
=
HiSysEventManager
::
Query
(
arg
,
queryRules
,
queryCallback
);
}
```
#### C HiSysEvent查询开发实例
#### C HiSysEvent查询开发实例
假设业务模块需要查询截止至当前时间、事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
假设业务模块需要查询截止至当前时间、事件领域为HIVIEWDFX、事件名称为PLUGIN_LOAD的所有事件,其完整使用示例如下所示:
1.
首先,需要
在业务模块的在BUILD.gn里增加hisysevent部件的libhisyseventmanager依赖。
1.
在业务模块的在BUILD.gn里增加hisysevent部件的libhisyseventmanager依赖。
```
c++
```
c++
external_deps
=
[
"hisysevent:libhisyseventmanager"
]
external_deps
=
[
"hisysevent:libhisyseventmanager"
]
// for strcpy_s
// for strcpy_s
deps
=
[
"//third_party/bounds_checking_function:libsec_shared"
]
deps
=
[
"//third_party/bounds_checking_function:libsec_shared"
]
```
```
2.
在业务模块的TestQuery()函数中,调用查询接口去查询事件。
2.
在业务模块的TestQuery()函数中,调用查询接口去查询事件。
```
c++
```c++
#include "hisysevent_manager_c.h"
#include "hisysevent_manager_c.h"
#include <securec.h>
#include <securec.h>
#include <time.h>
#include <time.h>
void
OnQueryTest
(
HiSysEventRecord
records
[],
size_t
size
)
void OnQueryTest(HiSysEventRecord records[], size_t size)
{
{
for
(
size_t
i
=
0
;
i
<
size
;
i
++
)
{
for (size_t i = 0; i < size; i++) {
printf
(
"OnQuery: event=%s"
,
records
[
i
].
jsonStr
);
printf("OnQuery: event=%s", records[i].jsonStr);
}
}
}
}
void
OnCompleteTest
(
int32_t
reason
,
int32_t
total
)
void OnCompleteTest(int32_t reason, int32_t total)
{
{
printf
(
"OnCompleted, res=%d, total=%d
\n
"
,
reason
,
total
);
printf("OnCompleted, res=%d, total=%d\n", reason, total);
}
}
int64_t
GetMilliseconds
()
int64_t GetMilliseconds()
{
{
return
time
(
NULL
);
return time(NULL);
}
}
void
TestQuery
()
void TestQuery()
{
{
// 创建查询参数对象
HiSysEventQueryArg arg;
HiSysEventQueryArg
arg
;
arg.beginTime = 0;
arg
.
beginTime
=
0
;
arg.endTime = GetMilliseconds();
arg
.
endTime
=
GetMilliseconds
();
arg.maxEvents = 100;
arg
.
maxEvents
=
100
;
constexpr char TEST_DOMAIN[] = "HIVIEWDFX";
constexpr char TEST_NAME[] = "PLUGIN_LOAD";
// 创建查询规则对象
HiSysEventQueryRule rule;
constexpr
char
TEST_DOMAIN
[]
=
"HIVIEWDFX"
;
(void)strcpy_s(rule.domain, strlen(TEST_DOMAIN) + 1, TEST_DOMAIN);
constexpr
char
TEST_NAME
[]
=
"PLUGIN_LOAD"
;
(void)strcpy_s(rule.eventList[0], strlen(TEST_NAME) + 1, TEST_NAME);
HiSysEventQueryRule
rule
;
rule.eventListSize = 1;
(
void
)
strcpy_s
(
rule
.
domain
,
strlen
(
TEST_DOMAIN
)
+
1
,
TEST_DOMAIN
);
rule.condition = nullptr;
(
void
)
strcpy_s
(
rule
.
eventList
[
0
],
strlen
(
TEST_NAME
)
+
1
,
TEST_NAME
);
HiSysEventQueryRule rules[] = { rule };
rule
.
eventListSize
=
1
;
HiSysEventQueryCallback callback;
rule
.
condition
=
nullptr
;
callback.OnQuery = OnQueryTest;
HiSysEventQueryRule
rules
[]
=
{
rule
};
callback.OnComplete = OnCompleteTest;
int ret = OH_HiSysEvent_Query(arg, rules, sizeof(rules) / sizeof(HiSysEventQueryRule), callback);
// 创建查询回调对象
}
HiSysEventQueryCallback
callback
;
```
callback
.
OnQuery
=
OnQueryTest
;
callback
.
OnComplete
=
OnCompleteTest
;
// 调用查询接口
int
ret
=
OH_HiSysEvent_Query
(
arg
,
rules
,
sizeof
(
rules
)
/
sizeof
(
HiSysEventQueryRule
),
callback
);
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录