新增事件异常检测配置
更新时间:2023-06-26
接口描述
添加原始消息的异常检测规则。默认情况,与异常检测规则匹配的原始消息,会保存其对应的图片和存证视频。原始消息、匹配异常检测配置的消息对应的图片和视频,默认保存1小时,过期会清理,也可以通过部署事件中心时修改环境变量,调整保存时长(单位小时)。
请求结构
POST /msg/config/add
请求头域
无特殊请求头。
请求参数
参数 | 类型 | 是否必选 | 描述 | 示例 |
---|---|---|---|---|
name | String | 是 | 异常检测配置的名称,要求全局唯一。长度1-64位的英文字母、数字或下划线。 | ab_3sd |
desc | String | 否 | 异常检测配置的自定义描述。最长输入128个汉字或字符。 | abcd配置xxx |
topic | String | 是 | 消息大类,通常官网的AI识别结果,都是使用lucky-ai | lucky-ai |
schema | String | 是 | topic下的具体消息类型。当前官网的AI识别结果,对应的schema就是算法英文唯一名称 | face |
exceptionDetect | Map | 是 | 异常检测规则配置信息 | |
+rawJson | String | 是 | 原始AI识别消息格式说明。通常为json字符串形式。具体需要参考AI识别结果的文档 | {"objects":[{"text": "未戴安全帽", "w": 100, "h": 100, "x": 33, "y": 44}, {"text": "未戴安全帽", "w": 123, "h": 134, "x": 300, "y": 440}], "objects_count ":2} |
+logicAnd | Boolean | 否 | 多条规则之间的逻辑关系,如果仅有一条则可以忽略该项。true: 多条规则必须都匹配才算匹配;false: 多条规则有一条匹配即可 | true |
+algs | Array | 是 | 多条规则的详细配置信息。每条规则是一个Map结构 | |
++algName | String | 是 | 规则类型。可选值:arithmetic和regexp, 分别表示算术表达式和正则表达式 | arithmetic |
++param | Map | 是 | 规则的具体设置,不同algName的要求的字段不同 | |
+++expr | String | 是 | 检测表达式的内容。对于arithmetic,是由原始消息中部分字段的别名构成的四则运算。对于regexp,是原始消息中指定字段的正则匹配表达式。算术表达式内部必须以空格为间隔符,参考请求示例。 | |
+++alias | String | 是 | 对于regexp类型,该字段必填(对于arithmetic则无须设置该字段),指明expr是哪个别名字段对应的正则匹配。正则表达式规则可以参考:https://github.com/google/re2/wiki/Syntax | a |
alarmDetect | Map | 是 | 将相同异常检测配置匹配的多条连续原始消息聚合为单条异常的配置。 | |
+mergeInterval | int32 | 是 | 聚合原始消息的起止时间间隔,单位秒 | 30 |
+isPostMerge | int32 | 否 | 是否为后聚合。true: 后聚合, false: 预聚合。 | 30 |
+errorTimes | int32 | 是 | 如果为后聚合,该字段必填,否则该字段被忽略。表示mergeInterval秒内发生errorTimes次异常匹配时,开始生成后聚合的记录信息。 | 5 |
+receivers | Array | 是 | 目前需要固定设置为[{}],暂无特殊用途 | [{}] |
说明
聚合报警是指对指定时间窗口内的来着相同设备的多条异常消息进行聚合。新的异常消息距离当前报警记录首条异常超过阈值时,则该消息会生成新的聚合报警记录。 预聚合是指:时间窗口内的异常消息无论多少条都聚合为同一个报警记录,并且该窗口内首条异常消息即生成报警记录,后续消息会更新该报记录的结束时间。 后聚合是指:时间窗口内的异常消息达到指定条数时生成报警记录,该时间窗口内此后的消息会更新报警记录的结束时间。后聚合主要是避免误报的情况,比如5秒内3次发现火焰才生成报警记录,那么偶尔一次的火警误识别不会生成报警记录。
响应头域
无特殊响应头。
响应参数
参数 | 类型 | 描述 |
---|---|---|
status | Int32 | 接口返回状态, 0表示成功,其他表示失败 |
message | String | 成功或错误提示 |
data | JSON | 忽略该字段 |
请求示例
POST /msg/config/add HTTP/1.1
Content-Type: application/json
Content-Length: 1254
{
"name": "your_config_name2",
"desc": "your_description2",
"topic": "lucky-ai",
"schema": "calling_detect",
"exceptionDetect": {
"rawJson": "{\"objects\":[{\"text\": \"未戴安全帽\", \"w\": 100, \"h\": 100, \"x\": 33, \"y\": 44}, {\"text\": \"未戴安全帽\", \"w\": 123, \"h\": 134, \"x\": 300, \"y\": 440}], \"objects_count\":2}",
"logicAnd": true,
"algs": [
{
"algName": "arithmetic",
"param": {
"expr": "f * 2 + 1 > 5"
}
},
{
"algName": "arithmetic",
"param": {
"expr": "f * 2 + 1 > 5"
}
},
{
"algName": "regexp",
"param": {
"alias": "b",
"expr": "未戴.全"
}
}
]
},
"alarmDetect": {
"mergeInterval":30,
"isPostMerge":true,
"errorTimes":2,
"receivers": [{}]
}
}
响应示例
HTTP/1.1 200 OK
cache-control: no-cache
content-length: 484
content-type: application/json; charset=utf-8
date: Thu, 17 Nov 2022 00:45:02 GMT
server: nginx/1.21.6
{
"status":0,
"message": "success",
"data": null
}
获取原始消息别名字段接口
请求结构
GET /msg/config/list-fields
请求头域
无特殊请求头。
请求参数
参数 | 类型 | 是否必选 | 描述 | 示例 |
---|---|---|---|---|
rawJson | String | 是 | 原始消息中message字段格式,也就是AI算法识别返回的识别结构,具体需要参考对应的AI算法描述。 | {"rawJson":"{"objects":[{"text":"未戴安全帽","w":100,"h":100,"x":33,"y":44},{"text":"未戴安全帽","w":123,"h":134,"x":300,"y":440}],"objects_count":2}"} |
响应头域
无特殊响应头。
响应参数
参数 | 类型 | 描述 |
---|---|---|
status | Int32 | 接口返回状态, 0表示成功,其他表示失败 |
message | String | 成功或错误提示 |
data | Map | key是别名名称,value是对应原始消息字段名称和类型的描述 |
+keyName | String | 别名对应的原始消息字段名称 |
+type | String | 原始消息该字段从rawJson解析出来的类型。目前有string和number两种。number表示整数或浮点数。 |
请求示例
POST /msg/config/add HTTP/1.1
Content-Type: application/json
Content-Length: 1254
{
"rawJson": "{\"objects\":[{\"text\":\"未戴安全帽\",\"w\":100,\"h\":100,\"x\":33,\"y\":44},{\"text\":\"未戴安全帽\",\"w\":123,\"h\":134,\"x\":300,\"y\":440}],\"objects_count\":2}"
}
响应示例
HTTP/1.1 200 OK
cache-control: no-cache
content-length: 484
content-type: application/json; charset=utf-8
date: Thu, 17 Nov 2022 00:45:02 GMT
server: nginx/1.21.6
{
"data": {
"a": {
"keyName": "message.objects.h",
"type": "number"
},
"b": {
"keyName": "message.objects.text",
"type": "string"
},
"c": {
"keyName": "message.objects.w",
"type": "number"
},
"d": {
"keyName": "message.objects.x",
"type": "number"
},
"e": {
"keyName": "message.objects.y",
"type": "number"
},
"f": {
"keyName": "message.objects_count",
"type": "number"
}
},
"message": "success",
"status": 0
}