Commit Graph

998 Commits

Author SHA1 Message Date
709797b53a docs: Shell规则去除具体版本号,区分Windows开发机与Ubuntu测试盒
- 不写 pwsh 具体版本号/WindowsApps路径,升级后不过时
- Windows 开发机用 pwsh(PATH 中的 PowerShell 7)
- Ubuntu 测试盒子用 bash
2026-08-02 20:38:23 +08:00
23bfdecbb8 docs: 更新过时的 PowerShell 版本/路径引用
- edge/AGENTS.md:硬编码的 WindowsApps MSIX 路径 Microsoft.PowerShell_7.6.0.0
  已过时,改为用 PATH 中的 pwsh(当前 7.6.4,位于 C:\Program Files\PowerShell\7)
- control/AGENTS.md:版本号 v7.6.1 → v7.6.4
2026-08-02 20:36:31 +08:00
e9c2de53cd style(control): 看板视频源名字改为无背景白字+黑色描边
按视频 OSD 行业标准:无背景(遮盖最少) + 白色文字 + 多向
text-shadow 黑色描边,浅色视频画面也不被同化。字号 9→10px。
2026-08-02 14:18:19 +08:00
7e6cf1b054 style(control): 看板视频源名字标签改为浅灰半透明
原 preview-label 背景 rgba(0,0,0,0.7) 深色不透明遮住视频。
改为 rgba(255,255,255,0.35) 浅灰半透明 + 深色文字 + 轻微
backdrop-blur:视频透出可见,名字仍清晰可读。
2026-08-02 14:14:07 +08:00
b57fef13d4 refactor(control): 视频监控页数据与运行看板统一(服务端渲染)
问题: monitor 页前端 fetch /api/monitor/channels 拿残缺数据
(仅通道名),再打补丁关联视频源名——数据源不统一。
修复: 提取 consolePageData() 共用,monitor 页服务端渲染
ConsoleDevices.Channels(含 SourceName/Display),显示
'设备名 · 视频源名',与看板完全同源。
撤销 channelMetaMap 补丁(不再需要);monitor JS 直接用
data-channel 构造 HLS URL。
2026-08-02 14:10:08 +08:00
8663f8cee4 fix(control): streaming=true 即隐藏覆盖层(去掉 input_fps 判断)
input_rtsp 节点 input_fps 可能为 0 但实际在出帧(HLS 正常播放),
导致'连接中'覆盖层盖在画面上。streaming=true 已是 media 实时
拉流状态,直接隐藏。
2026-08-02 14:03:11 +08:00
d437fbdc49 fix(control): dev-env.ps1 移除本地 safesightd 启动
管理端运行在 81 设备上,本地测试环境不再启动 safesightd。
修正编号(4/4 MinIO),停止逻辑保留(Stop-ByName safesightd 无害)。
2026-08-02 14:02:41 +08:00
2468f37502 fix(control): dev-env.ps1 适配单仓库路径(safesight-edge→edge) 2026-08-02 14:01:22 +08:00
9e473871ce fix(control): 看板/监控 HLS 错误回调丢失状态导致原因不显示
HLS fatal 错误回调把 status 传 null,hlsError 分支拿不到
last_error,落入'请检查视频源'兜底文案。
修复: tile/card 记住最近状态(_sourceStatus),错误回调复用它;
监控页 hlsError 也显示实际原因(有数据时)。
2026-08-02 13:40:17 +08:00
565e4bb3d6 feat(control): 看板页视频源原因简化显示
看板窗口小,原因改为类型级摘要(去掉 URL/细节):
  '视频源异常:RTSP 打开失败' (由 last_error 提取错误类型前缀)
hlsError 兜底也显示具体原因(有数据时),不再模糊提示
'请检查视频源'。监控页保留完整原因。
2026-08-02 13:10:59 +08:00
7fe93b58d0 feat(control): 监控页视频源提示改用输出层面措辞
监控页看的是 HLS 输出,原显示'离线+RTSP打开失败'会误导
为'在看RTSP源'。改为:
  标题: 无视频输出(输出层面事实)
  原因: 视频源异常:RTSP打开失败(...)(标注根因,不丢细节)
看板页保持'离线'(设备运维视角,用户认可)。
2026-08-02 13:04:08 +08:00
b19c0392f7 style(control): 视频源状态覆盖层颜色统一用 scheme 变量
- 字体 20px→14px(不刻意放大,与整体 UI 协调)
- 颜色改用 --green/--red/--amber/--muted(随 scheme 主题切换)
- 详情页视频源错误提示改用 --danger-soft/--danger-soft-text
  (此前用了未定义的 --danger 和硬编码 rgba)
2026-08-02 12:54:58 +08:00
2bb8ed1cdb feat(control): 运行看板/视频监控页视频源状态覆盖层
- 新增 /api/monitor/video-status 接口(复用 FetchVideoSourceStatus)
- console.html: 设备视图+视频视图视频窗口正中显示状态覆盖层
  离线(红字+原因)/连接中/在线(隐藏)/状态未知
- monitor.html: 视频监控页同样处理,HLS 播放失败显示'无视频输出'
- HLS fatal 错误兜底提示(即使状态接口不可用)
2026-08-02 12:49:22 +08:00
c75228c88d fix(control): 视频源轮询不依赖 Online 标志 + 移除调试
根因: offline_after_ms(10s) < discovery 轮询间隔(30s),
设备被 pruning 误标离线导致 graph 轮询空转。
修复: 轮询遍历所有设备尝试拉取(agent 请求失败自然跳过),
同时修正 81 配置 offline_after_ms=90s。
UpdateDevice 复用对象保留动态字段(上轮)。
2026-08-02 12:40:36 +08:00
452d49b8bc debug: gp 日志2 2026-08-02 12:37:53 +08:00
497343aac6 debug: 列表页 VS 调试 2026-08-02 12:36:30 +08:00
5773b6acd2 fix(control): UpdateDevice 复用已有设备对象,保留视频源统计
discovery 每轮用新 Device 替换 map 指针,graph 轮询(30s)更新的
VideoSourceDown 被 discovery(33s) 的指针替换覆盖,列表警告恒不显示。
改为 UpdateDevice 在设备已存在时合并字段到已有对象,
保留 VideoSource*/Graphs/alias,仅更新发现数据。
2026-08-02 12:35:08 +08:00
12414b4c33 debug: 轮询 tick 日志 2026-08-02 12:30:06 +08:00
b267e7e9e8 debug: registry graph 轮询日志(临时) 2026-08-02 12:28:40 +08:00
a906113221 fix(control): 视频源统计更新到 registry 当前设备对象
discovery 每轮会替换设备指针,graph 轮询更新旧指针导致
UI 拿到新指针(统计恒 0)。改为按 device_id 更新 registry
中当前对象。
2026-08-02 12:26:05 +08:00
db7284d2e5 feat(control): 设备列表视频源离线警告
- models.Device 增加视频源统计字段(内存/UI用)
- registry graph 轮询(30s)顺带解析 input_rtsp 在线/离线数
- 设备列表状态列: 视频源 N/M 离线 红色警告 pill(悬停显示明细)
2026-08-02 12:21:38 +08:00
c92ad41bd1 feat(control): 视频源状态检测与展示
- 新增 service.FetchVideoSourceStatus: 调 agent /v1/graphs 解析
  input_rtsp 节点 (custom_metrics: streaming/last_error/fail_count)
- 设备详情页运行与服务区块展示每个视频源:
  在线/离线 + 失败原因(如 RTSP 打开失败: 404) + 帧率 + 历史失败次数
- 视频源离线时红色提示,与媒体服务状态区分
2026-08-02 12:20:13 +08:00
dca065e6cc feat(media): /api/graphs 列表返回完整节点快照(含 custom_metrics)
之前列表接口手写简化输出(仅 name/running/fps),无节点信息;
改为 GraphSnapshotJson 完整输出,一次请求即可获取全部节点状态
(供管理端视频源在线/离线检测)
2026-08-02 12:18:41 +08:00
d80a62aabf feat(media): input_rtsp 视频源状态检测与上报
- 节点维护 streaming/fail_count/last_error/last_error_at/ok_at 状态
- 拉流失败分类上报具体原因:
  RTSP 打开失败(带 av_strerror 文本)/无视频流/编码不支持/解码器失败/读取中断
- 实现 GetCustomMetrics,经 /api/graphs 节点快照暴露
  (custom_metrics: type/url/streaming/online/fail_count/last_error/时间戳)
2026-08-02 12:17:17 +08:00
aae5bc36de fix(agent): systemctl 模式 Status 补充失败原因(LastError)
enable=false 时走 NewSystemCtlController,其 Status() 在服务未运行时
只返回 Running:false 无原因。现通过 systemctl show 获取
ActiveState/SubState/Result/ExecMainStatus/NRestarts,
给出可读提示: '启动失败(退出码 X, 已重启 N 次)' 或 '未运行(systemctl: x/y)'
2026-08-02 12:10:44 +08:00
6a995db6e2 fix(ui): 服务状态提示优化 - 区分故障原因,透传媒体错误
- agent: procctl.Status 增加 LastError(未检测到进程/进程已退出原因),
  config/status 透传 media.last_error
- control: ConfigStatusMediaServer 增加 LastError 字段
- control: loadConfigStatus 错误分类(agent 未响应 vs HTTP 错误,含 IP:端口)
- UI 文案: '待确认/未确认' -> '状态未知',媒体服务行显示具体错误
  用户可区分: 服务故障(带原因) vs 配置未取到 vs 视频源问题
2026-08-02 12:06:52 +08:00
80c1e63c95 docs: 新增根级 AGENTS.md 仓库总规范
pi 从 cwd 向上加载 AGENTS.md 并拼接: 根目录工作时不会加载子目录规范,
补根级总览(仓库结构/两端关系/工作流),指向 edge/control 各自细则
2026-08-02 11:45:49 +08:00
cefc155614 chore: 统一 CHANGELOG 到根目录,更新 control/AGENTS.md 过时内容
- 根目录新增 CHANGELOG.md(Keep a Changelog 风格):
  v1.0.0 里程碑(单仓库合并/断电保护/产品镜像/版本机制)+ 早期历史迁移
- 删除 edge/CHANGELOG.md(内容并入根)
- VERSION 保持 edge/ + control/ 两端独立(构建机制依赖,发布节奏不同)
- control/AGENTS.md: managerd→safesightd、旧路径→新单仓库路径、文档引用更新
2026-08-02 11:43:21 +08:00
29d9ef5d0d refactor: 项目结构梳理 - 设备端/管理端对称布局
仓库结构:
  edge/     设备端(原根目录设备端代码整体移入)
  control/  管理端(清理后)
  docs/     文档(PRD 移入 design/)
  README.md 根导航(新增)

清理:
- control/.brainstorm 临时草稿删除
- control 根级重复文档(API表/PRD_04)并入 docs/design/
- control/plan.md -> docs/implementation/control-plan.md
- control/safesightd-linux-arm64 二进制取消版本控制(.gitignore)
- edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore)
- Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突)

更新:
- 根 README.md 导航、docs/README.md 文档索引
- deployment.md/检查表路径加 edge/ 前缀
- .gitignore 重写(edge/control 分区规则)
2026-08-02 11:39:54 +08:00
02be9ddd47 docs: 删除过时命令草稿 命令.md
- 该文档为旧项目(Rk3588Sys/rk3588-agent/managerd)时代命令备忘,
  引用的项目名/路径/二进制名全部过时,比已删的 guide.md 更旧
- 唯一仍有效的模型转换命令(pt2rknn_yolov8.py)已迁移至 guides/models.md
2026-08-02 11:34:46 +08:00
06eab42403 docs: 清理过时文档,简化目录结构
删除(过时/重复/未采用):
- archive/ 源码片段 dump(2)
- workshop_ai/ 合成数据标注临时工作(6, 2026-04 阶段已过)
- design/theme-preview-*.html UI主题预览(3)
- design/PRD_02 React前端PRD(实际UI用Go模板, 未采用)
- requirements/guide.md 过时命令笔记(与guides/命令.md重复)

合并: architecture/ 2个文档并入 design/
目录由 10 个子目录简化为 7 个:
deployment requirements design implementation bugfix testing guides
2026-08-02 11:32:22 +08:00
910febe703 docs: 部署文档归入 docs/deployment/ 子目录
- deployment/control-deployment/检查表/离线部署 4 个部署文档统一移入
- 更新 README 导航、部署手册互引、检查表、deploy.sh 提示中的路径
2026-08-02 11:30:03 +08:00
007a996c37 docs: 规范化文档目录结构
- 根 docs/ 保留产品入口文档(README/部署手册/检查表/离线部署)
- 按内容归类到子目录:
  requirements/(需求) design/(设计/接口/方案/UI) architecture/(架构)
  implementation/(实施/计划/跟踪) bugfix/(缺陷记录) testing/(测试)
  guides/(操作指南:配置/模型/命令/依赖/调试) archive/(源码片段归档)
- 删除 superpowers 目录(edge 与 control 两处, 含历史设计草稿)
- 更新 docs/README.md 导航与新结构一致
2026-08-02 11:28:51 +08:00
dc62cf066c fix: 恢复被覆盖的 Readme.md(PRD),导航文档移至 docs/README.md
- Windows 大小写不敏感导致新 README.md 覆盖了原有 Readme.md(PRD 1305行)
- 从 git 历史恢复 PRD,导航内容另存为 docs/README.md
2026-08-02 11:15:33 +08:00
8d8ba65eef docs: 单仓库整理 - 文档统一到根 docs/ + README
- 检查表/离线部署文档/管理端部署指南移入根 docs/
- control/docs/deployment.md 更名为 control-deployment.md(避免与设备端部署手册混淆)
- 新增 README.md:仓库结构、版本机制、快速开始、合并历史说明
- control-deployment.md 适配新仓库路径(cd control)
2026-08-02 11:14:52 +08:00
98e375dc36 chore: 合并 safesight-control 仓库为 control/ 子目录
项目合并为单仓库:设备端(根) + 管理端(control/)。
两端 git 历史完整保留(git subtree 合并)。

git-subtree-dir: control
git-subtree-mainline: 923ab10d5c
git-subtree-split: 70738edb31
2026-08-02 11:13:26 +08:00
70738edb31 feat(control): 双层版本模型 - 语义化主版本显示
- 新增 VERSION 文件(1.0.0)作为 control 主版本号来源
- UI 版本展示分层: 列表页/详情页/footer 显示 V1.0.0, 构建号悬停可见
- init() 兜底: 未注入时 0.0.0
2026-08-01 17:16:13 +08:00
923ab10d5c feat(edge): 双层版本模型 - 语义化主版本 + 构建号
- 新增 VERSION 文件(1.0.0)作为主版本号来源,发版改文件即可,不依赖 git tag
- agent: Version=主版本(VERSION 文件), BuildID=构建号(时间戳), GitSHA 保留
- media: 版本输出 v1.0.0 (build YYYYMMDD.HHMMSS, git xxxxxxx)
- init() 兜底: 主版本 0.0.0 / 构建号自动生成,产品上无占位值
2026-08-01 17:16:09 +08:00
2a6e2ea707 fix(control): 消除 dev 占位版本号,init() 兜底为构建时间
即使构建时忘记注入 ldflags,footer 也不会显示占位版本
2026-08-01 17:01:03 +08:00
140018ac4d fix(edge): 消除 0.0.0-dev 占位版本号,init() 兜底为构建时间
- agent Version/BuildID/GitSHA 默认值改为空+init() 自动填充构建时间
  即使构建时忘记注入 ldflags,产品上也不会出现占位版本号
- version.h 默认值改为 unknown
2026-08-01 17:01:00 +08:00
a4e179f30d fix(control): 版本号改为构建日期时间,不依赖 git tag
- control Version = YYYYMMDD.HHMMSS(构建时间)
- 大量小版本迭代场景:无需打 tag,UI footer 版本号直接可读新旧
2026-08-01 16:59:07 +08:00
75098ce81e fix(edge): 版本号改为构建日期时间,不依赖 git tag
- agent Version/BuildID = YYYYMMDD.HHMMSS(构建时间),GitSHA 保留短 sha
- media(C++) 版本同样注入构建时间(CMake 支持 -DRK_PROJECT_VERSION 覆盖)
- 适应大量小版本迭代:不再依赖 git tag,UI 版本号直接可读新旧
2026-08-01 16:59:03 +08:00
c6da0a6c6d feat(control): 版本机制打通,UI 展示 agent/引擎/control 真实版本
- ui.go: 版本号由硬编码常量改为可注入变量( -X ...web.Version )
- 新增 service.FetchDeviceVersions: 调用 edge /v1/versions 采集
  agent 版本/build_id/git_sha + media 引擎版本 + 设备模型数
- 设备详情页: 新增引擎版本/构建信息/模型数量展示
- 设备列表页: 新增版本列(含 build/git 悬停提示)
- 构建脚本(3处): 注入 control 版本号(git describe)
- 新增模板语法测试(43个模板防回归)
2026-08-01 16:54:10 +08:00
201ad65164 fix(edge): 构建时注入版本信息,修复设备版本恒为 0.0.0-dev
- build.sh / package-offline.sh: agent 编译注入 main.Version/BuildID/BuildType/GitSHA
  (版本号取 git describe, build_id 取构建时间)
- build.sh: media(C++) 编译注入 RK_GIT_SHA
- 修复后 control 设备详情/列表可显示真实版本,不再是占位的 0.0.0-dev
2026-08-01 16:54:07 +08:00
a1064961cc docs: 客户现场部署检查表移入 control 仓库
- 新增 docs/客户现场部署检查表.md
- 更新为产品镜像批量生产流程(16G 母卡 -> Etcher 批量烧录 -> init-device.sh 初始化)
- 新增断电保护(overlayroot)维护备忘章节
2026-08-01 16:46:44 +08:00
227dc04004 feat(edge): 断电保护(overlayroot+/data)与产品镜像批量生产流程
- 新增 setup-overlayroot.sh: 一键断电保护
  - overlayroot(tmpfs) 保护根分区, 断电不再损坏文件系统
  - 自动建 /data 独立分区 + fstab bind 挂载运行数据
  - 迁移存量数据, journald 内存日志限容
  - disable/enable 一键切换维护模式(适配香橙派 U-Boot/extlinux, 无 GRUB)
- 新增 prepare-image.sh: 母卡出厂化清理
  - 清 machine-id/SSH 密钥/device_id/hostname/日志
  - 防误: 检测 overlayroot 启用状态, 保证镜像为可写出厂状态
- 新增 init-device.sh: 每台初始化
  - 主机名/静态IP(netplan)/身份验证
  - /data 自动 growpart 扩容到整卡剩余空间(64G 产品卡)
  - 统一启用断电保护
- deploy.sh/ops.sh/package-offline.sh: 集成新脚本
  - ops.sh 新增 overlay-status/disable/enable/verify
- docs/deployment.md: 重写为主流程文档
  - 产品镜像批量生产(16G 母卡->小镜像->Etcher 批量烧录->每台初始化)
  - 移除废弃的克隆卡流程
2026-08-01 16:45:47 +08:00
e931e4d95b feat: mock alarm server logs full JSON body 2026-07-31 15:18:46 +08:00
0c52d01c0b fix: channelNo defaults to video source name, cleanup orphan units, disable date prefix in template 2026-07-31 15:18:27 +08:00
decc980665 docs: add third-party alarm API spec from customer 2026-07-30 12:43:40 +08:00
eaee750443 docs: add rule - deploy must check systemctl is-active after stop, no fixed sleep 2026-07-30 11:31:04 +08:00