覆盖包库回传、任务下发、CDM 任务同步与报警采集,并为包/任务 ID 与上传文件名加上路径安全校验。 Co-authored-by: Cursor <cursoragent@cursor.com>
118 lines
4.9 KiB
Markdown
118 lines
4.9 KiB
Markdown
# 迷榖 OTA(WatchDog)实现计划
|
||
|
||
> **状态:** 核心任务已落地(后端 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` | Tab:overview \| ota;重定向旧 tab |
|
||
|
||
---
|
||
|
||
## 任务
|
||
|
||
### 任务 1:后端基础(Options / Models / Store / Hash)
|
||
|
||
1. 创建 `OtaOptions`、`OtaModels`、`OtaPathMap`、`OtaHash`、`OtaStore`。
|
||
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` 通过。
|
||
|
||
### 任务 2:WatchDogClient + 车辆源 + Receive
|
||
|
||
1. `WatchDogClient`:MDCInfo、组件上传(multipart)、JSON get/put、触发 getmdcsexe、TCP/HTTP RTT。
|
||
2. `OtaVehicleSource`:HttpClient 调 SimpleLite `http://127.0.0.1:8222/api/agv/list` 或 projection cars(与现有一致优先 projection)。
|
||
3. `OtaReceiveController`:接收 upload-mdcs* 写入当前 pull 会话目录。
|
||
4. 验证:build 通过。
|
||
|
||
### 任务 3:JobRunner + OtaController API
|
||
|
||
实现规格 §4.2 全部端点;JobRunner 支持 sync/custom/config 三类 job;审计写入 `OpsAuditStore` 或 `data/ota/audit.json`。
|
||
验证:build 通过;手动 curl GET settings/packages。
|
||
|
||
### 任务 4:前端 API + 类型 + Hub Tab 切换
|
||
|
||
1. `types/ota.ts`、`api/ota.ts`。
|
||
2. `VehicleHubView` 仅 overview/ota;挂载 `OtaWorkbenchView`。
|
||
3. 验证:前端 typecheck/dev 可加载。
|
||
|
||
### 任务 5:OTA 工作台 UI(六子页)
|
||
|
||
按规格 §5 实现各 Pane;延迟检测开关在车辆升级工具条。
|
||
验证:页面可切换、设置可保存、无目标时下发被拦截。
|
||
|
||
### 任务 6:联调与验收
|
||
|
||
对照规格 §9 验收清单;修明显 bug。
|
||
|
||
---
|
||
|
||
## 关键实现约定
|
||
|
||
- MD5:`Convert.ToBase64String(MD5.HashData(bytes)).Replace("-", "")`(与参考工具一致则对照其实现)。
|
||
- 组件键:`M.exe` `M.dll` `M.pdb` `D.exe` `C.exe` `C.dll` `C.pdb`。
|
||
- Job kind:`sync` | `customFile` | `configPush`。
|
||
- 进度字段:`doneSteps` / `totalSteps`;每车每组件 `status`:pending|running|succeeded|failed|skipped。
|
||
- 拉取包:平台记录 `pendingPullId` + 本机可达 URL,调车 `getmdcsexe?time=`;车推到 `/api/ota/receive/...`。
|
||
|
||
---
|
||
|
||
## 规格覆盖自检
|
||
|
||
| 规格项 | 任务 |
|
||
|--------|------|
|
||
| IA / 删维护策略与生命周期 | 4 |
|
||
| WatchDog 编排 | 2–3 |
|
||
| 包库/目标/任务/设置/延迟 | 3、5 |
|
||
| 配置同步/自定义文件 | 3、5 |
|
||
| 审计 | 3 |
|
||
| 验收 §9 | 6 |
|