7.4 KiB
7.4 KiB
SafeSight Control 产品化改进计划
目标
将后台管理从"工程师界面"改造为"安全管理员界面",让非技术用户能够独立完成:
- 添加摄像头并部署检测场景
- 日常查看安全违规情况
- 处理和跟踪告警事件
优先级说明
- P0 — 不做就不可交付给普通用户
- P1 — 严重影响日常体验
- P2 — 锦上添花,提升满意度
P0:必须立即完成(交付底线)
1. 告警中心增强
现状:告警已持久化到 SQLite、有日期筛选分页、仪表盘有今日统计。缺的是工作流和等级。
改什么:
- DB 迁移:
alarm_records表增加status,severity,acknowledged_at,acknowledged_by,resolved_at,resolved_by列 - 告警状态流转:未处理 → 已确认 → 已关闭,记录操作人和时间
- 严重等级:
info / warning / critical,默认值warning - 筛选增强:加设备下拉筛选、规则类型下拉筛选(现有日期筛选保留)
- SSE 实时推送:新告警到达时推送浏览器
实现要点:
- migration 用
hasColumn检查列存在,ALTER TABLE ADD COLUMN增量添加 AlarmRecord结构体扩展字段,saveAlarm设置默认值- API:
POST /ui/alarms/{id}/acknowledge、/resolve、/severity - 模板:加严重等级列(蓝/橙/红 pill)、状态列、操作按钮列
- SSE:
GET /api/alarms/stream,浏览器 EventSource 连接,为 P0-2 仪表盘打基础
2. 仪表盘重做
现状问题:4 个数字 + 离线列表,看不到任何安全违规信息
改什么:
- 顶部统计卡片改为:今日告警总数、未处理告警数、在线设备数、运行中检测路数
- 中部新增"最近告警"实时流(SSE 推送),卡片式展示:抓拍图 + 规则名 + 设备名 + 时间
- 底部新增"设备状态概览":在线/离线/异常卡片网格
- 点击任意告警卡片跳转到告警中心对应详情
实现要点:
- 新增 SSE 端点
/api/alarms/stream,AlarmCollector收到告警时广播 - 仪表盘页面 JS 连接 SSE,追加告警卡片到 DOM
- 告警卡片带抓拍缩略图(/ui/hls 代理或 snapshot 直连)
3. 一键配置向导(场景化部署)
现状问题:配置一台摄像头需要跨 5 个页面 9 个步骤
改什么:
- 新增页面
/ui/wizard,标准模式下直接可见 - 步骤1/3:选择设备 — 列出在线设备,每个设备显示当前已加载的摄像头
- 步骤2/3:配置检测 — 显示该设备上所有视频源,每个视频源可以:
- 勾选要启用的检测项(安全帽、工鞋、人脸等)
- 设置告警灵敏度(高/中/低)
- 预览视频画面
- 步骤3/3:确认并下发 — 展示配置摘要,确认后自动生成模板+Profile+识别单元→下发到设备
实现要点:
- 后端新增
/api/wizard/preview和/api/wizard/apply端点 - 内部调用现有的
AutoConfigService和任务系统 - 前端用步骤条(stepper)展示进度,每步一个卡片
- "检测项"从设备
/v1/capabilities获取,用直观的图标+描述展示
4. 基础登录鉴权
现状问题:任何人都能访问 18080 端口做任何操作
改什么:
- 内置单管理员账号,密码在
safesightd.json配置 - 登录页
/ui/login,成功后设 session cookie - 所有
/api/和/ui/路由(除 login 和静态资源)需要鉴权 - 半小时无操作自动退出
实现要点:
- 新建
internal/auth/包,提供Login(password) bool+SessionMiddleware - 用
crypto/bcrypt存密码哈希(配置中存password_hash) - 用随机 token + 内存 map 做 session(不需要 Redis)
5. 监控页 HLS.js 本地化
现状问题:monitor.html 从 CDN 加载 hls.js,断网部署下无法使用
改什么:
- 将 hls.js 引用改为本地
/ui/assets/vendor/hls.min.js - 与管控台页面保持一致
实现要点:
- 1 行 templat 修改
P1:短期必须完成(严重影响体验)
6. 告警浏览器通知
现状问题:告警要手动刷新页面才能看到
改什么:
- 告警产生时,浏览器标签页标题闪烁
[N] SafeSight(N 为新告警数) - 有未处理告警时,顶栏通知铃图标显示红点+数量
- 可选:支持桌面通知(
Notification API),用户授权后弹窗
实现要点:
- 复用 P0 的 SSE 端点
/api/alarms/stream - JS 监听 SSE 事件,更新顶栏通知铃和页面标题
7. 设备列表服务健康指示
现状问题:设备列表只显示在线/离线,看不到内部服务状态
改什么:
- 设备列表每行增加媒体服务状态指示灯(运行中/已停止/异常)
- 在线但媒体服务异常的设备,行背景变淡橙色警告
- 悬停显示详细状态:CPU 使用率、内存、最后心跳时间
实现要点:
- 后端在设备列表查询时附带最近一次 metrics 摘要
- CSS 新增
.device-row.warn样式
8. 操作结果提示优化
现状问题:成功/失败用 URL 参数传递消息,粗暴且易丢失
改什么:
- 改用 session flash message:操作完成后在 HTTP header 设 cookie,下次页面渲染时展示
- 页面顶部显示 toast 式消息条,3 秒自动消失,绿色成功/红色失败
- 替代现有的 URL query 参数消息机制
实现要点:
- middleware 层面处理 flash cookie
- 模板 layout.html 顶部增加 toast 组件
9. 术语统一
现状问题:同一概念在多个页面叫法不同
改什么:
- 全局统一:
- "视频通道" → "检测通道"(与视频源区分)
- "场景模板" → "检测模板"(与场景管理区分)
- "识别单元" → "检测通道"(与设备赋值对齐)
- 菜单项和页面标题同步修改
实现要点:
- 批量替换模板中的中文标签
- 路由不变,只改显示文本
P2:长期优化(提升满意度)
10. 时序图表
- 告警趋势图(按天/周/月,按规则类型分组)
- 设备资源使用趋势图(CPU/内存/NPU)
- 检测统计图(今日/本周识别次数、各设备负载)
实现:使用轻量 Canvas 图表库(如 Chart.js 或 uPlot),数据从聚合查询获取
11. 设备分组与标签
- 支持按车间/区域分组设备
- 设备列表增加分组筛选
- 批量操作支持按组选择
12. 配置版本对比
- 查看历史配置版本列表
- 选择两个版本做 diff 对比(JSON diff)
- 回滚前预览变更内容
13. 报告导出
- 告警报告导出为 PDF/CSV
- 设备状态报告
- 支持选择时间范围和过滤条件
14. 模型管理简化
- 模型上传后自动分发到所有兼容设备
- 增加模型版本管理和兼容性检查
- 一键"更新全部设备模型"
15. 人脸库优化
- 支持搜索和过滤
- 人脸质量评分反馈
- 同步状态可视化
实施时序
已完成:P0-5(HLS 修复)
↓
进行中:P0-1(告警增强) → P0-2(仪表盘重做)
↓
待开始:P0-3(配置向导) → P1(体验打磨) → P0-4(登录) → P2(长期优化)
技术债务同步处理
在实现上述功能时,顺手清理:
- 提取模板函数到独立文件(当前约 300 行挤在一个函数里)
- 统一设备健康检查的 timeout 策略
- 为所有新增 API 建立测试用例
.gitignore覆盖所有构建产物