[SEN] 实现设备运维告警与业务预警隔离 #79

Closed
opened 2026-08-14 10:29:14 +08:00 by ila · 5 comments
Owner

状态

已完成(用户于 2026-08-28 验收通过)

基本信息

  • 类型:需求 / Sense 单项目独立任务
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#80
  • 前置工单:#74、#76
  • 是否允许与前置工单并行:否;必须先冻结前置领域接口
  • 独立运行:Brain、Bell 均不启动时完成实现和验收
  • 需求编号:SEN-015

原始需求与追溯

  • 来源:用户于 2026-08-14 要求建立 Sense 全部独立任务;Product-Requirements、Requirements-Migration-Matrix 和 Sense/AGENTS.md。
  • 摘要:Sense 单产品能够独立完成的后续能力全部建单;跨项目正式契约、Brain 控制和 Bell connector 留给协调工单。
  • 旧 explore 只用于需求、行为与测试对照,不复制自研基础框架。

目标

对离线、认证、时间漂移、对账、分片和隧道异常生成 Sense 内部运维告警,并与 Bell 业务预警严格隔离。

范围

实现运维告警规则、去重、状态、确认/恢复、审计和运维中心入口。

非目标

不创建 Bell Alert;不投递跨项目事件;不把设备健康异常混入学校安全业务预警;不实现通知升级。

GoAdmin 复用要求

复用 #61/#64 建立的 GoAdmin/go-admin-ui 认证、RBAC、审计、Router、Store、Axios、Layout、表格、表单、分页、Dialog、Tag 和权限按钮;实施前读取相关冻结 go-admin-doc 并在评论记录采用方式。业务专用组件必须说明复用缺口并保持整体风格。

写路径

  • Sense/server/app/sense/ops_alert/**
  • Sense/server/database/migrations/*ops_alert*
  • Sense/ui/src/views/sense/ops-alert/**
  • Sense/ui/src/api/sense/ops-alert*
  • Sense/tests/ops_alert/**

禁止写入:Brain/**、Bell/**、contracts/**、根级构建/部署、docs/**、wiki-docs.json。需要共享路径时停止并转协调工单。

文档影响

更新对应 Sense Wiki 业务规则、配置、运行、排错和验收页面;本地镜像由单一协调工单同步。

验收标准

  • 六类运维异常可生成、去重、确认和恢复
  • 运维告警与本地安全事件/未来 Bell Alert 数据模型和入口隔离
  • 状态变化有权限、并发保护和审计
  • 故障恢复不会生成重复活动告警
  • Brain/Bell 不启动时独立验收

验证方式

  • 规则、去重、状态机、并发和审计测试
  • 设备/MediaMTX/节点故障注入 smoke
  • 前端列表、筛选、确认、恢复和权限测试

风险与回退

误报可能造成告警疲劳。规则含抑制和恢复窗口;回退规则配置不删除历史审计。

协同需求摘要

本工单只实现 Sense 内部端口和夹具。涉及 Sense→Brain、Brain→Sense、Sense/Brain→Bell 的正式 schema、机器身份、部署或 E2E 时另建协调工单。

## 状态 已完成(用户于 2026-08-28 验收通过) ## 基本信息 - 类型:需求 / Sense 单项目独立任务 - 任务类型:单项目 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP / 版本:#80 - 前置工单:#74、#76 - 是否允许与前置工单并行:否;必须先冻结前置领域接口 - 独立运行:Brain、Bell 均不启动时完成实现和验收 - 需求编号:SEN-015 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求建立 Sense 全部独立任务;Product-Requirements、Requirements-Migration-Matrix 和 Sense/AGENTS.md。 - 摘要:Sense 单产品能够独立完成的后续能力全部建单;跨项目正式契约、Brain 控制和 Bell connector 留给协调工单。 - 旧 `explore` 只用于需求、行为与测试对照,不复制自研基础框架。 ## 目标 对离线、认证、时间漂移、对账、分片和隧道异常生成 Sense 内部运维告警,并与 Bell 业务预警严格隔离。 ## 范围 实现运维告警规则、去重、状态、确认/恢复、审计和运维中心入口。 ## 非目标 不创建 Bell Alert;不投递跨项目事件;不把设备健康异常混入学校安全业务预警;不实现通知升级。 ## GoAdmin 复用要求 复用 #61/#64 建立的 GoAdmin/go-admin-ui 认证、RBAC、审计、Router、Store、Axios、Layout、表格、表单、分页、Dialog、Tag 和权限按钮;实施前读取相关冻结 go-admin-doc 并在评论记录采用方式。业务专用组件必须说明复用缺口并保持整体风格。 ## 写路径 - `Sense/server/app/sense/ops_alert/**` - `Sense/server/database/migrations/*ops_alert*` - `Sense/ui/src/views/sense/ops-alert/**` - `Sense/ui/src/api/sense/ops-alert*` - `Sense/tests/ops_alert/**` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级构建/部署、`docs/**`、`wiki-docs.json`。需要共享路径时停止并转协调工单。 ## 文档影响 更新对应 Sense Wiki 业务规则、配置、运行、排错和验收页面;本地镜像由单一协调工单同步。 ## 验收标准 - [x] 六类运维异常可生成、去重、确认和恢复 - [x] 运维告警与本地安全事件/未来 Bell Alert 数据模型和入口隔离 - [x] 状态变化有权限、并发保护和审计 - [x] 故障恢复不会生成重复活动告警 - [x] Brain/Bell 不启动时独立验收 ## 验证方式 - 规则、去重、状态机、并发和审计测试 - 设备/MediaMTX/节点故障注入 smoke - 前端列表、筛选、确认、恢复和权限测试 ## 风险与回退 误报可能造成告警疲劳。规则含抑制和恢复窗口;回退规则配置不删除历史审计。 ## 协同需求摘要 本工单只实现 Sense 内部端口和夹具。涉及 Sense→Brain、Brain→Sense、Sense/Brain→Bell 的正式 schema、机器身份、部署或 E2E 时另建协调工单。
ila added the kind/taskproject/sensescope/independent labels 2026-08-14 10:29:14 +08:00
Author
Owner

原型 v0.1 待审核

  • 形成时间:2026-08-28
  • 审核载体:当前 Codex 会话内的交互式可视化
  • 版本识别:#79 / Sense 运维告警 / v0.1
  • 原型源文件(仓库外):D:\OPC\yovision-visualizations\issue-79\sense-ops-alerts.html
  • 状态:等待用户确认
  • 确认人/确认时间:待用户审核后补录
  • 未导出到 prototypes/:用户未触发“导出原型 #79”,符合原型导出门禁

覆盖范围

  • 沿用 GoAdmin/go-admin-ui 的侧栏、顶部导航、TagsView、页面容器、搜索栏、表格、分页、Dialog、Tag 和权限操作形态。
  • 覆盖设备离线、认证失败、时间漂移、状态对账失败、媒体分片异常、控制隧道异常六类运维异常。
  • 覆盖待确认、已确认、恢复观察、已恢复四类状态,活动告警概览、关键词/类型/状态筛选、详情、确认与确认恢复。
  • 明确“确认”只表示运维人员知晓,不等于故障恢复;只有健康来源已恢复并经过稳定观察窗口后才允许确认恢复。
  • 展示同一活动异常的去重次数;确认和恢复都要求填写至少 6 个字符的处理说明,并保留历史与审计。
  • 页面持续提示:运维告警只属于 Sense,不创建本地安全事件或 Bell Alert,也不触发业务通知升级。

非目标与边界

  • 不定义或创建 Bell Alert,不投递跨项目事件,不修改 contracts/**、Brain/Bell 或根级编排。
  • 本版本仅为审核原型,尚未创建任务分支、修改生产代码或执行数据库迁移。

设计与验证证据

  • UI/UX 规范检查聚焦状态不能只靠颜色、确认/恢复语义、错误就地提示、键盘操作和窄屏布局。
  • 保留项目现有 GoAdmin/Element Plus 视觉与字体;没有采用设计搜索建议中与现有产品不一致的独立暗色、夸张字体或营销落地页结构。
  • 浏览器验证通过:六类异常呈现、筛选、详情、确认、恢复、空原因校验、成功反馈和汇总更新;390px 下侧栏收起、摘要与筛选纵向排列,表格仅在自身容器横向滚动。
## 原型 v0.1 待审核 - 形成时间:2026-08-28 - 审核载体:当前 Codex 会话内的交互式可视化 - 版本识别:#79 / Sense 运维告警 / v0.1 - 原型源文件(仓库外):`D:\OPC\yovision-visualizations\issue-79\sense-ops-alerts.html` - 状态:等待用户确认 - 确认人/确认时间:待用户审核后补录 - 未导出到 `prototypes/`:用户未触发“导出原型 #79”,符合原型导出门禁 ### 覆盖范围 - 沿用 GoAdmin/go-admin-ui 的侧栏、顶部导航、TagsView、页面容器、搜索栏、表格、分页、Dialog、Tag 和权限操作形态。 - 覆盖设备离线、认证失败、时间漂移、状态对账失败、媒体分片异常、控制隧道异常六类运维异常。 - 覆盖待确认、已确认、恢复观察、已恢复四类状态,活动告警概览、关键词/类型/状态筛选、详情、确认与确认恢复。 - 明确“确认”只表示运维人员知晓,不等于故障恢复;只有健康来源已恢复并经过稳定观察窗口后才允许确认恢复。 - 展示同一活动异常的去重次数;确认和恢复都要求填写至少 6 个字符的处理说明,并保留历史与审计。 - 页面持续提示:运维告警只属于 Sense,不创建本地安全事件或 Bell Alert,也不触发业务通知升级。 ### 非目标与边界 - 不定义或创建 Bell Alert,不投递跨项目事件,不修改 `contracts/**`、Brain/Bell 或根级编排。 - 本版本仅为审核原型,尚未创建任务分支、修改生产代码或执行数据库迁移。 ### 设计与验证证据 - UI/UX 规范检查聚焦状态不能只靠颜色、确认/恢复语义、错误就地提示、键盘操作和窄屏布局。 - 保留项目现有 GoAdmin/Element Plus 视觉与字体;没有采用设计搜索建议中与现有产品不一致的独立暗色、夸张字体或营销落地页结构。 - 浏览器验证通过:六类异常呈现、筛选、详情、确认、恢复、空原因校验、成功反馈和汇总更新;390px 下侧栏收起、摘要与筛选纵向排列,表格仅在自身容器横向滚动。
Author
Owner

原型审核结论

  • 审核版本:原型 v0.1
  • 确认人:用户 ila
  • 确认时间:2026-08-28
  • 结论:通过审核
  • 覆盖范围:GoAdmin 外壳、六类运维异常、概览与筛选、详情、去重次数、确认、恢复观察、确认恢复、错误/成功反馈及与本地安全事件/Bell Alert 的隔离提示。
  • 后续:按已确认文字需求和原型进入生产实现;若页面结构、主要流程、权限、状态或异常处理发生实质变化,将重新进入确认门禁。
## 原型审核结论 - 审核版本:原型 v0.1 - 确认人:用户 ila - 确认时间:2026-08-28 - 结论:通过审核 - 覆盖范围:GoAdmin 外壳、六类运维异常、概览与筛选、详情、去重次数、确认、恢复观察、确认恢复、错误/成功反馈及与本地安全事件/Bell Alert 的隔离提示。 - 后续:按已确认文字需求和原型进入生产实现;若页面结构、主要流程、权限、状态或异常处理发生实质变化,将重新进入确认门禁。
Author
Owner

实施前路径与上游参考核对(2026-08-28)

原型 v0.1 已由用户审核通过,生产实现继续按已确认范围推进。

  • 冻结基线:go-admin@f06540883b41d03782bb6b2c4150f298f328c6b6、go-admin-ui@67d393d...、go-admin-doc@424855aacf6905f3fde860c3331385cb25529a0d(以 goadmin-baseline.json 为准)。
  • 本次已阅读冻结 go-admin-doc 主题:docs/intro/advanced/router.md、api.md、models.md、pro-gen-code.md。
  • 继承路径:后端沿用 Sense/server/app/sense/operations 的 GoAdmin API/Service/审计模式,路由沿用 Sense/server/app/admin/router/sense_*.go;前端沿用 Sense/ui/src/views/sense/operations 与现有请求封装、BasicLayout、Element Plus;迁移沿用 Sense/server/cmd/migrate/migration/version。
  • 默认模块策略:不启用或暴露任何新的 GoAdmin 演示模块,只新增“视频感知 / 运维告警”菜单及最小读取、确认、恢复权限。
  • 路径校正:工单草稿中的 Sense/server/database/migrations/*ops_alert* 按当前冻结 GoAdmin 实际迁移入口校正为 Sense/server/cmd/migrate/migration/version/*ops_alert*;为完成已声明的路由/RBAC验收,补充精确写路径 Sense/server/app/admin/router/sense_ops_alert.go 及其测试。该校正不改变用户已确认功能、交互和验收范围。

边界保持不变:运维告警只消费 Sense 已有设备、媒体路由、媒体分片和边缘节点健康事实;不创建本地安全事件,不创建 Bell 告警,不增加通知升级。

## 实施前路径与上游参考核对(2026-08-28) 原型 v0.1 已由用户审核通过,生产实现继续按已确认范围推进。 - 冻结基线:`go-admin@f06540883b41d03782bb6b2c4150f298f328c6b6`、`go-admin-ui@67d393d...`、`go-admin-doc@424855aacf6905f3fde860c3331385cb25529a0d`(以 `goadmin-baseline.json` 为准)。 - 本次已阅读冻结 `go-admin-doc` 主题:`docs/intro/advanced/router.md`、`api.md`、`models.md`、`pro-gen-code.md`。 - 继承路径:后端沿用 `Sense/server/app/sense/operations` 的 GoAdmin API/Service/审计模式,路由沿用 `Sense/server/app/admin/router/sense_*.go`;前端沿用 `Sense/ui/src/views/sense/operations` 与现有请求封装、BasicLayout、Element Plus;迁移沿用 `Sense/server/cmd/migrate/migration/version`。 - 默认模块策略:不启用或暴露任何新的 GoAdmin 演示模块,只新增“视频感知 / 运维告警”菜单及最小读取、确认、恢复权限。 - 路径校正:工单草稿中的 `Sense/server/database/migrations/*ops_alert*` 按当前冻结 GoAdmin 实际迁移入口校正为 `Sense/server/cmd/migrate/migration/version/*ops_alert*`;为完成已声明的路由/RBAC验收,补充精确写路径 `Sense/server/app/admin/router/sense_ops_alert.go` 及其测试。该校正不改变用户已确认功能、交互和验收范围。 边界保持不变:运维告警只消费 Sense 已有设备、媒体路由、媒体分片和边缘节点健康事实;不创建本地安全事件,不创建 Bell 告警,不增加通知升级。
ila closed this issue 2026-08-28 18:25:33 +08:00
ila reopened this issue 2026-08-28 18:26:01 +08:00
Author
Owner

最终实施证据(待验收,2026-08-28)

最终差异

  • 新增六类 Sense 运维告警:设备/节点离线、认证失败、时间漂移、媒体对账失败、媒体分片异常、控制隧道异常。
  • 唯一指纹持久化去重;同源版本重复刷新不重复计数,恢复后复用同一记录开启新周期。
  • 四态流转:待确认 → 已确认 / 恢复观察 → 已恢复;健康后固定观察 5 分钟,观察期复发追加历史并回到原处理状态。
  • 确认/恢复要求 6–256 字符原因、expectedVersion 和合法当前状态;旧版本返回冲突。
  • 流转历史写入 sense_ops_alert_transitions,操作审计写入 GoAdmin sys_opera_log。
  • GoAdmin 菜单/RBAC/API 和 go-admin-ui 页面已完成;viewer 只读,implementation_operator/site_admin 可刷新、确认、恢复。
  • 数据边界已测试:运维告警只写自己的表和 GoAdmin 审计,不导入或写入本地安全事件、Outbox、Brain、Bell、contracts。

测试与运行证据

  • go test ./...:通过。
  • go test -race ./app/sense/ops_alert:通过。
  • go vet ./...:通过。
  • go build ./...:通过。
  • 后端规则测试覆盖六类故障注入、唯一指纹去重、同源防重复计数、确认、健康恢复、5 分钟观察门槛、恢复后重开、旧版本并发冲突和审计。
  • pnpm lint:通过;仅冻结上游既有 warning,无本工单错误。
  • pnpm test:unit -- --runInBand:32 suites / 77 tests 通过;新增 API 定向测试后 2 suites / 4 tests 通过。
  • pnpm build:prod:通过;仅冻结上游既有 Sass、代码生成器导入和包体积 warning。
  • python dev_scripts/harness.py check --strict:通过。
  • python -m unittest discover -s tests -v:48 tests 通过。
  • 使用当前源码在隔离端口完成真实 PostgreSQL 迁移和服务启动 smoke;2026082816000_ops_alert.go 成功应用,Brain/Bell 未启动。隔离实例、临时目录与为测试启动的 PostgreSQL 已恢复到任务前状态。
  • 已审核原型 v0.1 的桌面、390px、筛选、详情、确认和恢复交互此前已完成浏览器验证。生产页面完成 lint、单测和构建;现有浏览器登录会话已过期,本轮未重复输入用户凭据,因此认证后的生产页面浏览器复核留给人工验收。

提交与合并

  • 实现提交:d61e6d5ee1ad1e7f71be28fbb344b8269923c567
  • PR:#123
  • 合入 dev:4a605f6482d3d771d1d2e378d341aec7298e5c59
  • 当前状态:已合入 dev,等待用户验收;未合入 main。

长期文档

  • Architecture-and-Code-Map:ff1a2a0c4c7690b2197c44e2493e03d8860de0b7
  • Business-Rules-and-Glossary:27749cbf699093d997284afc277ea53e73a5876f
  • Local-Development-and-Verification:4b375aa6e8af9b3822e533ce26b9494457d0d60f
  • Deployment-and-Operations:b21bbc64f323f465b78b557537c38e334de31f45

按工单禁止写 docs/** 且本地核心镜像由单一协调工单同步;sync --check 如预期报告 Wiki revision 已领先本地镜像。本工单未创建或导出任务归档。

状态纠正

PR 描述中的关闭关键字被 Gitea 机制误识别并短暂自动关闭工单;已立即重新打开并保持“待验收”,不会把合并误当作用户验收。

## 最终实施证据(待验收,2026-08-28) ### 最终差异 - 新增六类 Sense 运维告警:设备/节点离线、认证失败、时间漂移、媒体对账失败、媒体分片异常、控制隧道异常。 - 唯一指纹持久化去重;同源版本重复刷新不重复计数,恢复后复用同一记录开启新周期。 - 四态流转:待确认 → 已确认 / 恢复观察 → 已恢复;健康后固定观察 5 分钟,观察期复发追加历史并回到原处理状态。 - 确认/恢复要求 6–256 字符原因、expectedVersion 和合法当前状态;旧版本返回冲突。 - 流转历史写入 `sense_ops_alert_transitions`,操作审计写入 GoAdmin `sys_opera_log`。 - GoAdmin 菜单/RBAC/API 和 go-admin-ui 页面已完成;viewer 只读,implementation_operator/site_admin 可刷新、确认、恢复。 - 数据边界已测试:运维告警只写自己的表和 GoAdmin 审计,不导入或写入本地安全事件、Outbox、Brain、Bell、contracts。 ### 测试与运行证据 - `go test ./...`:通过。 - `go test -race ./app/sense/ops_alert`:通过。 - `go vet ./...`:通过。 - `go build ./...`:通过。 - 后端规则测试覆盖六类故障注入、唯一指纹去重、同源防重复计数、确认、健康恢复、5 分钟观察门槛、恢复后重开、旧版本并发冲突和审计。 - `pnpm lint`:通过;仅冻结上游既有 warning,无本工单错误。 - `pnpm test:unit -- --runInBand`:32 suites / 77 tests 通过;新增 API 定向测试后 2 suites / 4 tests 通过。 - `pnpm build:prod`:通过;仅冻结上游既有 Sass、代码生成器导入和包体积 warning。 - `python dev_scripts/harness.py check --strict`:通过。 - `python -m unittest discover -s tests -v`:48 tests 通过。 - 使用当前源码在隔离端口完成真实 PostgreSQL 迁移和服务启动 smoke;`2026082816000_ops_alert.go` 成功应用,Brain/Bell 未启动。隔离实例、临时目录与为测试启动的 PostgreSQL 已恢复到任务前状态。 - 已审核原型 v0.1 的桌面、390px、筛选、详情、确认和恢复交互此前已完成浏览器验证。生产页面完成 lint、单测和构建;现有浏览器登录会话已过期,本轮未重复输入用户凭据,因此认证后的生产页面浏览器复核留给人工验收。 ### 提交与合并 - 实现提交:`d61e6d5ee1ad1e7f71be28fbb344b8269923c567` - PR:#123 - 合入 `dev`:`4a605f6482d3d771d1d2e378d341aec7298e5c59` - 当前状态:已合入 `dev`,等待用户验收;未合入 `main`。 ### 长期文档 - Architecture-and-Code-Map:`ff1a2a0c4c7690b2197c44e2493e03d8860de0b7` - Business-Rules-and-Glossary:`27749cbf699093d997284afc277ea53e73a5876f` - Local-Development-and-Verification:`4b375aa6e8af9b3822e533ce26b9494457d0d60f` - Deployment-and-Operations:`b21bbc64f323f465b78b557537c38e334de31f45` 按工单禁止写 `docs/**` 且本地核心镜像由单一协调工单同步;`sync --check` 如预期报告 Wiki revision 已领先本地镜像。本工单未创建或导出任务归档。 ### 状态纠正 PR 描述中的关闭关键字被 Gitea 机制误识别并短暂自动关闭工单;已立即重新打开并保持“待验收”,不会把合并误当作用户验收。
Author
Owner

用户验收结论

  • 结论:验收通过
  • 确认人:ila
  • 确认时间:2026-08-28 20:33:22 +08:00
  • 验收范围:工单 #79 已确认的六类运维告警、去重、确认/恢复、权限/并发/审计、业务预警隔离、GoAdmin 页面及已回写测试与 Wiki 证据。
  • 交付基线:dev 合并提交 4a605f6482d3d771d1d2e378d341aec7298e5c59(PR #123)。
  • 分支边界:本次只确认 dev 上的工单成果;未授权也未执行 dev → main。

按用户明确指令关闭本单,并同步所属 MVP #80 与 Epic #7。

## 用户验收结论 - 结论:验收通过 - 确认人:ila - 确认时间:2026-08-28 20:33:22 +08:00 - 验收范围:工单 #79 已确认的六类运维告警、去重、确认/恢复、权限/并发/审计、业务预警隔离、GoAdmin 页面及已回写测试与 Wiki 证据。 - 交付基线:`dev` 合并提交 `4a605f6482d3d771d1d2e378d341aec7298e5c59`(PR #123)。 - 分支边界:本次只确认 `dev` 上的工单成果;未授权也未执行 `dev → main`。 按用户明确指令关闭本单,并同步所属 MVP #80 与 Epic #7。
ila closed this issue 2026-08-28 20:33:37 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#79