更新时间:2023-12-19 08:36:58下载pdf
健康监测主要用于监测设备的运行是否异常,定时监控设备的健康状况。当某项功能出现异常时,框架会通知应用。此时,应用采取预定的措施,这些措施可以是以告警的形式来人工干预或者是设备自动修复(如复位)等,使设备始终处于健康状态,从而提高设备的控制体验。
查询型
该类指标主要用于定时查询一些重要信息,例如内存和队列深度等。
事件型
该类指标主要监控是否触发了特别的状态,例如 HTTP 接口调用错误等。
为了统一,事件型的监测会利用框架的 事件服务 订阅一个公共的事件 ID,在触发异常的地方发布该事件,入参为监测指标索引。
#define EVENT_HEALTH_ALERT "health.alert" //健康监测公共事件 ID
框架内嵌了一些系统健康监测指标,用来监测框架是否正常运行。即只要调用健康监测初始化接口,这些指标会自动被添加至监测列表中。
宏定义 | 监测指标 | 类型 | 异常次数 (门限) |
监测周期 s | 异常 | 异常处理 |
---|---|---|---|---|---|---|
HEALTH_RULE_FREE_MEM_SIZE |
剩余内存 | 查询型 | 1 | 600 | 内存小于 8K | 设备重启 |
HEALTH_RULE_MAX_MEM_SIZE |
一次性能申请的最大内存 | 查询型 | 1 | 600 | / | / |
HEALTH_RULE_ATOP_REFUSE |
访问云端接口被拒绝 | 事件型 | 5 | / | / | / |
HEALTH_RULE_ATOP_SIGN_FAILED |
访问云端接口 sign 错误 | 事件型 | 5 | / | / | / |
HEALTH_RULE_WORKQ_DEPTH |
队列深度 | 查询型 | 1 | 600 | 队列深度超过 50 | 打印系统队列信息,帮助用户进行诊断 |
HEALTH_RULE_MSGQ_NUM |
消息队列数量 | 查询型 | 1 | 600 | 队列深度超过 50 | 打印消息队列信息,帮助用户进行诊断 |
HEALTH_RULE_TIMER_NUM |
软件定时器数量 | 查询型 | 1 | 600 | 数量超过 100 | / |
HEALTH_RULE_FEED_WATCH_DOG |
喂狗 | 查询型 | 0 | 20 | / | / |
HEALTH_RULE_RUNTIME_REPT |
向云端上报设备实时状态 时间戳,夏令时,剩余内存,信号强度 |
查询型 | 0 | 3600 | / | / |
查询型
事件型
框架在 系统服务初始化 时会调用健康监测的初始化接口。系统健康指标的查询回调以及通知回调,内部会自行注册和处理,无需您做其他处理。也就是说,您只需要调用 系统服务初始化 接口。
如果您想要增加自定义的指标,可调用相应接口,实现增加、删除和更新指标。
创建健康监测任务线程,注册系统健康指标。该接口会在 系统服务初始化 中被调用。
/**
* @brief devos health init function
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
INT_T tuya_devos_health_init_and_start();
typedef VOID (*health_notify_cb)();
typedef BOOL_T(*health_query_cb)();
/**
* @brief add health item
*
* @param[in] threshold: the threshold
* @param[in] period: the period
* @param[in] query: query cb
* @param[in] notify: notify cb
*
* @return type id, success when large than 0,others failed
*/
INT_T tuya_devos_add_health_item(UINT_T threshold,UINT_T period,health_query_cb query,health_notify_cb notify);
/**
* @brief delete health item
*
* @param[in] type: the type
*
*/
VOID tuya_devos_delete_health_item(INT_T type);
/**
* @brief update health item period
*
* @param[in] type: the type
* @param[in] period: the period
*
*/
VOID tuya_devos_update_health_item_period(INT_T type,UINT_T period);
/**
* @brief update health item threshold
*
* @param[in] type: the type
* @param[in] threshold: the threshold
*
*/
VOID tuya_devos_update_health_item_threshold(INT_T type,UINT_T threshold);
添加自定义健康指标的示例代码,可参考框架内自带的 TuyaOS 示例集合 中的 service_health_manager
。
健康监测的优先级是最高的,即 THREAD_PRIO_0
。
目前,在健康监测的任务里还添加了定时喂狗、定时上报运行时的日志序。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈