Files
Migu2.0/docs/superpowers/plans/2026-07-19-migu-ota-watchdog.md
zhaowei.huangandCursor 4223a572c5 新增 OTA WatchDog 编排与车队健康/报警后端。
覆盖包库回传、任务下发、CDM 任务同步与报警采集,并为包/任务 ID 与上传文件名加上路径安全校验。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 11:31:51 +08:00

4.9 KiB
Raw Permalink Blame History

迷榖 OTAWatchDog)实现计划

状态: 核心任务已落地(后端 API + 前端工作台)。联调 WatchDog 实车需现场验证。
面向 AI 代理的工作者: 按任务顺序实现;每完成一大任务做一次验证。规格:docs/superpowers/specs/2026-07-19-migu-ota-watchdog-design.md

目标: 车辆运维改为「运维总览 + OTA」,平台编排 WatchDog 完成包库/下发/任务/配置/自定义文件/设置与延迟检测。
架构: MiGu.Server api/ota/* 出站调 WatchDog :9776;包与任务落盘 data/ota/;前端 OtaWorkbenchView 只调平台 API。
技术栈: ASP.NET Core 8、Vue 3、Element Plus、HttpClient、现有 JWT/RBAC。


文件结构

后端(新建)

文件 职责
MiGu.Server/Ota/OtaOptions.cs DataRoot、WatchDogPort、超时、本机接收端口
MiGu.Server/Ota/OtaModels.cs Package/Target/Job/Settings/VehicleRow DTO
MiGu.Server/Ota/OtaPathMap.cs MDC 路径与组件键
MiGu.Server/Ota/OtaHash.cs MD5 Base64 去 -
MiGu.Server/Ota/OtaStore.cs packages/target/jobs/settings/history 读写
MiGu.Server/Ota/WatchDogClient.cs getMDCInfo、update*、get*json、getmdcsexe、latency
MiGu.Server/Ota/OtaPackageReceiver.cs 供 WatchDog 回传 upload-mdcs* 的内部端点宿主或同进程路由
MiGu.Server/Ota/OtaJobRunner.cs 分批、限速、状态机、重试/取消
MiGu.Server/Ota/OtaVehicleSource.cs 从 SimpleLite projection 取车列表
MiGu.Server/Controllers/OtaController.cs /api/ota/*
MiGu.Server/Controllers/OtaReceiveController.cs WatchDog 回传 /api/ota/receive/upload-mdcs*

后端(修改)

文件 变更
MiGu.Server/Program.cs 注册 OTA 服务
MiGu.Server/appsettings.json Ota

前端(新建)

文件 职责
src/api/ota.ts API 客户端
src/types/ota.ts 类型
src/views/shared/ota/OtaWorkbenchView.vue 左导航壳 + 顶条
src/views/shared/ota/OtaVehiclesPane.vue 车辆升级
src/views/shared/ota/OtaPackagesPane.vue 版本库
src/views/shared/ota/OtaJobsPane.vue 任务中心
src/views/shared/ota/OtaConfigPane.vue 配置同步
src/views/shared/ota/OtaCustomFilePane.vue 自定义文件
src/views/shared/ota/OtaSettingsPane.vue 设置
src/composables/useOtaWorkbench.ts 目标版本、设置、刷新

前端(修改)

文件 变更
src/views/shared/VehicleHubView.vue Taboverview | ota;重定向旧 tab

任务

任务 1:后端基础(Options / Models / Store / Hash

  1. 创建 OtaOptionsOtaModelsOtaPathMapOtaHashOtaStore
  2. Settings 默认:bandwidth=0(不限)、maxCar=2、latencyEnabled=false、rttThresholdMs=200、overThreshold=skip、backupPeriodMinutes=60、backupExe=false。
  3. Program.cs + appsettings.json 注册。
  4. 验证:dotnet build MiGu.Server/MiGu.Server.csproj 通过。

任务 2WatchDogClient + 车辆源 + Receive

  1. WatchDogClientMDCInfo、组件上传(multipart)、JSON get/put、触发 getmdcsexe、TCP/HTTP RTT。
  2. OtaVehicleSourceHttpClient 调 SimpleLite http://127.0.0.1:8222/api/agv/list 或 projection cars(与现有一致优先 projection)。
  3. OtaReceiveController:接收 upload-mdcs* 写入当前 pull 会话目录。
  4. 验证:build 通过。

任务 3JobRunner + OtaController API

实现规格 §4.2 全部端点;JobRunner 支持 sync/custom/config 三类 job;审计写入 OpsAuditStoredata/ota/audit.json。 验证:build 通过;手动 curl GET settings/packages。

任务 4:前端 API + 类型 + Hub Tab 切换

  1. types/ota.tsapi/ota.ts
  2. VehicleHubView 仅 overview/ota;挂载 OtaWorkbenchView
  3. 验证:前端 typecheck/dev 可加载。

任务 5:OTA 工作台 UI(六子页)

按规格 §5 实现各 Pane;延迟检测开关在车辆升级工具条。 验证:页面可切换、设置可保存、无目标时下发被拦截。

任务 6:联调与验收

对照规格 §9 验收清单;修明显 bug。


关键实现约定

  • MD5Convert.ToBase64String(MD5.HashData(bytes)).Replace("-", "")(与参考工具一致则对照其实现)。
  • 组件键:M.exe M.dll M.pdb D.exe C.exe C.dll C.pdb
  • Job kindsync | customFile | configPush
  • 进度字段:doneSteps / totalSteps;每车每组件 statuspending|running|succeeded|failed|skipped。
  • 拉取包:平台记录 pendingPullId + 本机可达 URL,调车 getmdcsexe?time=;车推到 /api/ota/receive/...

规格覆盖自检

规格项 任务
IA / 删维护策略与生命周期 4
WatchDog 编排 23
包库/目标/任务/设置/延迟 3、5
配置同步/自定义文件 3、5
审计 3
验收 §9 6