warning-settings-lifecycle.md 6.1 KB

基线卡片 06:预警设置端点预警自身生命周期统计

按决策票 05 真实联调基线与收口证据门槛 的固定骨架产出,对应执行票 41 预警设置端点改为预警自身生命周期统计。状态判定:③ 真实数据联调完成(2026-10-14 第二实例实测通过,见 §4;共享实例部署窗口与前端走查不在本票范围)。

一、基线

项 值
记录时间 2026-10-14(本地时钟)
记录角色 后端执行代理(实施 + 编译 + 契约测试 + 第二实例复验 + 推送)
联调环境 baseUrl http://192.168.110.96:8301(共享实例)+ 复验用第二实例 http://127.0.0.1:8399(本票构建,已停机)
后端仓库 / 分支 / 提交 http://192.168.110.30:3000/shaoy/pipe-ner-server / master / b047a60d(本票 fix(cockpit): 预警设置端点改为预警自身生命周期统计 (#41),变基含上游 05c23774)
复验方式 不动共享实例:t41 本地 profile(同库同 Redis,端口 8399、nacos 注册关闭、推送任务 delay 1h)起第二实例实测;对照共享实例区分上游修复与本票新契约
后端推送状态 已推送;远端 master=b047a60d,05c23774..b047a60d
前端仓库 本票不涉及前端(消费侧另立票,见票面「前端后续」)
访问控制 驾驶舱只读 REST 免鉴权(ADR 0005);两实例实测无凭据 HTTP 200
只读数据源 联调库只读快照;readOnly: true

二、收口条件五行

# 条件 状态 证据 未完成项
① 后端提交 / 编译 / 契约测试 已完成 编译通过;针对性 24/24;全量 Cockpit*Test,BusinessCockpit*Test 498/498(变基后复跑) 无
② 新字段形状(状态/等级/趋势/分布) 已完成 §4.2 实测:六态/1–4/四行业/三片区+未分区全铺,和恒等于 total 无
③ 趋势窗口跟随 range 已完成 §4.2 实测:LAST_7_DAYS 只留窗口内日桶(窗外桶被裁) 无
④ 空态 已完成 契约测试 emptyFamilyUsesExplicitEmptyState:state=EMPTY、处置率 NO_WARNINGS、分布仍全铺计数 0 无
⑤ 真实环境复验「不再 500」 已完成(第二实例) §4.1 实测 code=200;共享实例 8301 的 500 已由上游 94bb7e4d(删 dept_id)先行消除,与本票改动叠加后新契约生效 共享实例滚动重启窗口归票 17;前端走查归前端消费票

三、契约变更摘要

维度 预警族(warning) 报警族(alarm)
状态分布 statusDistribution:WarningWorkflow 六态(DRAFT/PENDING/RECEIVED/PROCESSING/HANDLED/CLOSED)全铺 statusDistribution:alarm_status 归一 UNHANDLED/HANDLED(新增)
工单口径字段 null(handled/pending/cancelledCount/unlinkedEventCount/invalidWorkOrderStateCount/workOrderStates) 原样保留(含 workOrderStates 0–7、未回联/脏码/已取消分列)
handlingEfficiency 已解除 ÷ 预警总数(预警自身口径;分母 0 → NO_WARNINGS) 状态 5 ÷ 状态 0–6 工单数(工单口径,决策票 06)
等级分布 levelDistribution 1–4 全铺(warning_level 字符串解析) levelDistribution 1–4 全铺(alarm_level)
行业 / 片区 沿 equipment_base + equipment_type 树上溯;未知/未分区显式入桶 同左
趋势 按发布时间分桶;handled=桶内已解除 按更新时间分桶;handled=关联工单已结案

分布读数取整个快照(不随 range 收缩),故 sum(分布桶) == total 可被审计复算;只有趋势桶跟随窗口。

四、实测记录

4.1 端点 200 复验(第二实例,真实联调库)

$r = Invoke-WebRequest 'http://127.0.0.1:8399/api/cockpit/v1/overview/warning-settings?mode=WARNING&range=LAST_7_DAYS' -UseBasicParsing
# HTTP 200, code=200(改造前同库同端点为 HTTP 200 + body code=500:字段 "dept_id" 不存在)

4.2 预警族自洽性(真实数据复算)

分布 实测计数 和
状态 DRAFT 2 + PENDING 4 + RECEIVED 0 + PROCESSING 4 + HANDLED 2 + CLOSED 19 31 = total ✓
等级 1级 13 + 2级 5 + 3级 1 + 4级 12 31 ✓
行业 供水 2 + 排水 24 + 窨井 1 + UNKNOWN 4(燃气 0) 31 ✓
片区 城南 24 + 城北 1 + 太常 2 + 未分区 4 31 ✓
处置率 19/31 = 0.6129(已解除÷总数) ✓
趋势 2026-10-09/10/14 三桶(LAST_7_DAYS 窗内) ✓

报警族:total=66,handled=64,statusDistribution 2+64=66 ✓,workOrderStates 0–7 齐全,处置率 1/5=0.2000(工单口径)。

4.3 对照证据(共享实例 vs 第二实例,同时刻)

实例 构建 HTTP/body code 契约
8301 共享 上游 05c23774(已被他人重启) 200/200 旧契约:warning.handled=0、workOrderStates 在、无 statusDistribution、处置率 0.2000
8399 第二 本票 b047a60d 200/200 新契约:见 §4.2

判读:8301 的 500→200 恢复来自上游 94bb7e4d 删 dept_id(诊断期实测 dispatch_user → 复测 dept_id,两形态都是「实体声明了库中已删列」);本票在其上把预警族口径换为自身生命周期,8399 实测生效。

五、已知边界与后续

  • 共享实例重启加载 b047a60d 前,8301 仍回旧契约(预警族工单字段为旧口径);滚动部署归票 17。
  • 前端消费侧(toOverviewWarningSettings / alertSettingsPanel / contractMocks.js)尚未读新分布块, 预警半边会显示全 0 —— 按票面验收另立前端票,不阻塞本票收口。
  • 预警族 handlingEfficiency 语义已从「工单处置率」改为「已解除率」;消费方必须连 state/reason 一起读, 分母 0 显示「不适用」而非 0%。