外观
处置与归并
一条告警从发生到关闭,虹元记三样东西:任务上的处置记录,按时间拼起来的处置时间线,把一串告警归成一件事的归并组。三样都只记事实。派不派单、归不归组由智悟算,确认、拆分、合并由人在工作台做,虹元把每一步留下来。
处置记录
任务原来只有状态流转。到场、采取了什么措施、结果如何,现在都可以逐条记在任务上:
POST /api/uancore/objects/tasks/{id}/steps| 字段 | 说明 |
|---|---|
tenant_code | 必填,要和任务所属租户一致 |
kind | 必填。arrive 到场、measure 处置措施、result 处置结果、handover 交接、note 备注 |
text | 必填,一条最多 2000 字 |
at | 事情发生的时刻,不给就是现在。可以补录,不能晚于当前 5 分钟以上。带时区按 RFC3339;没写时区的按北京时间 |
by | 必填,经办人,最多 64 字 |
记录追加在任务体的 steps 数组末尾,只追加不覆盖。每条另记虹元收到的时刻与记录时任务所处的状态,补录的一眼看得出来。记录不改任务状态,写审计。一条任务最多 200 条记录。
办结结果
任务转到已完成时可带 result_code:
| 值 | 含义 |
|---|---|
eliminated | 已消除 |
controlled | 已控制 |
false_alarm | 误报 |
to_hazard | 转隐患 |
other | 其他 |
结果代码只在办结时记。带在别的流转上(取消、接手)照常流转,只是不记,回包 resultCodeIgnored=true。不认识的值回 400,任务不动。
处置留痕不许改写
任务体里的 history(流转)、steps(处置记录)、result_code(结果)、edge_notes(推给现场的说明)四项是处置留痕。建单时不能预填,POST /objects/tasks/{id}/body 也不能碰,带了就回 400。预填等于凭空写出接手、到场、办结,时间线会把它当成事实排进去。
推给现场的超时提醒(/edge_note)推完会追加进 edge_notes,送没送到现场事后查得到。
两个人同时办结
流转写库时带着读到的原状态。两个人同时点完成,先写成的那个生效,后到的回 409,history 里只多一条。调用方收到 409 或 changed=false,一律当"已经有人办了",刷新任务看结果,不要原样重发。
不是处置的任务
复盘请求(postmortem_request)是给智悟的内部待办,不是现场处置。这类任务照常流转、照常留痕,但有三处不同:
- 流转不推给现场节点,现场告警不会因为复盘写完被改成已确认。
/edge_note回 400。- 现场值守确认真警、裁定误报时会批量改事件上的任务,这类任务不在其中。
流转回包里推没推现场分三种,调用方按字段认,不用认文字:
| 情况 | pushedToEdge | pushSkipped | pushError |
|---|---|---|---|
| 推到了 | true | 空 | 空 |
| 有意不推:不是处置的任务 | false | non_disposal | 空 |
| 有意不推:任务不挂事件 | false | not_on_event | 空 |
| 该推没推到 | false | 空 | 说明文字 |
处置时间线
GET /api/uancore/events/{id}/timeline?tenant_code=<租户码>复盘要回答"这条告警从发生到关闭,每一步是什么时候、谁做的"。事实原本分散在事件、审计、任务、误报案例里,时间线按时间把它们拼成一张步骤表,只读不写。凭据同事件查询,tenant_code 必填,客户会话只能取自己租户。可选 exclude_kind,排除某几类知识,比如复盘时排除自己上一版复盘。
回包:
| 字段 | 内容 |
|---|---|
event | 事件摘要:类型、来源(视频或随手拍)、严重度、发生与收到时刻、裁定、机器判定、溯源 |
steps | 按时刻升序的步骤。每步有时刻、类型、操作者、一句中文说明、来源表与主键 |
undated | 时刻解析不出的条目,正常为空 |
moments | 发生、收到、裁定、判定、建单、接手、办结、闭环八个时刻,没有的为空 |
durations | 各段用时(秒):收到、裁定、建单、接手、办结、总时长,算不出为空 |
sla | 规则时限与是否超时 |
tasks | 挂在事件上的任务,带结果代码、接手与办结时刻、记录条数 |
truncated | 任务、审计、知识读到上限时为真,这时复盘不能当成拿全了 |
asOf | 出数时刻,判开着的任务超没超时以它为准 |
步骤类型覆盖发生、收到、机器判定、裁定、派整改、待验收、闭环、建单、通知、接手、办结、取消、处置记录、现场说明、升级、误报案例。
几条口径:
- 缺的时刻给空,不拿别的时刻顶。
- 复盘请求这类不是处置的任务列在
tasks里,不参与时刻与用时。 - 谁下的结论写清楚。模型自动确认的裁定与判定,说明里写"未经人工复核",标
basis=machine;人工裁定标basis=human。模型成文的知识标machineGenerated=true。这几类只说明模型判过、写过,不能当复盘依据引用。 - 裁定理由取裁定当时写进审计的那一句。事件行上的备注后来会被处置推进覆盖,两者不一致时另列。
- 通知只出各通道的状态,不带收件号码;模型摘要只出成败,不带正文。
归并组
值班员要处理的是一件事,进来的是一条条报警。归并组把它们归成一件,分三层:
| 层 | 含义 | 首出 |
|---|---|---|
| L1 | 同一点位同一类反复报 | 有 |
| L2 | 同一点位同时出现或连锁出现的一串 | 有 |
| L3 | 同场站不同来源(智眸、智营、随手拍等)的关联 | 不设,只标关联 |
归哪些由智悟按登记在虹元的归并口径算,回写到虹元。虹元只存结果与人工确认、拆分、合并的痕迹。归并不改事件,不碰事件裁定,不建单。
| 接口 | 作用 |
|---|---|
POST /api/uancore/incidents/upsert | 智悟回写一组。按来源键幂等,成员只增不删 |
GET /api/uancore/incidents | 列表,按最后一条的时刻倒序 |
GET /api/uancore/incidents/{id} | 详情:组、成员带事件摘要、同一批事件在别的层所属的组 |
POST /api/uancore/incidents/{id}/confirm | 人工确认 |
POST /api/uancore/incidents/{id}/split | 人工拆分,拆出去的成员另成一组 |
POST /api/uancore/incidents/{id}/merge | 人工合并,把另一组的成员并进来 |
凭据同任务接口。客户租户的门户会话只能动自己租户,看别家的组一律 404。
几条规矩
- 事实数由虹元算。 首末时刻、事件类型、来源、最高严重度、成员数都按成员事件重算,智悟报的只拿来比对,对不上的列在回包里。
- 一条事件在同一层只属一个组。 已在同层别的组里的成员跳过,回包说明在哪一组。人工拆出去的事件,智悟下次重放不会拉回原组。
- 测试与真实分开数。 成员全是测试流才算测试组。组上分开记测试成员数,统计真实件数只看真实成员。
- 人定过的首出锁住。 确认、拆分、合并以后首出由人定,智悟再提别的首出不算数。L3 组不设首出。
- 被并走的组关闭。 状态为
closed,指向并入的那组。智悟再往里加成员,顺着指向加到活着的那组。
组的状态:auto 智悟算的,confirmed 人确认过,split 人工拆出来的,closed 被并走。对已关闭的组做确认、拆分、合并回 409。
列表缺省只回活着的真实组:不回被并走的组(统计归并后件数时数进去就重了),不回测试组。要看测试组带 include_test=true,要看被并走的组显式带 state=closed。
并发与 409
几路同时写同一组撞了,虹元整个事务重来,三次都撞回 409,回包 retryable: true,原样再发一次即可。别的 409(状态已经变了)回 retryable: false,先重新读再决定。全站所有 409 回包都带这个字段。
保留期
成员随事件一起清。清完按剩下的成员重算,一条不剩的组删掉。只有人确认过的真实组留作记录;测试组确认过也删,测试数据的派生物不比测试事件活得长。