Skip to content

[PRD] OTA 批次进度实时推送与批次监控闭环 #10

@ronger-x

Description

@ronger-x

[PRD] OTA 批次进度实时推送与批次监控闭环

子仓库实现 Issue

仓库 Issue 说明
rymcu/mortise-ota #2 进度事件发布、SSE 端点、聚合进度查询
rymcu/admin-ota #1 批次页、任务 Slideover 的实时订阅与 UI 更新

问题陈述

当前 Mortise OTA 模块已经具备升级批次、升级任务、设备进度上报和后台批次管理能力,但运维侧仍然缺少实时观察升级过程的能力。

从用户视角看,主要问题有:

  1. 管理员打开批次页或任务监控侧边栏后,只能依赖静态查询或手动刷新,无法持续看到任务进度变化。
  2. 即使设备已经持续上报升级进度,后台也没有把这些变化实时推送给前端,导致“后端有数据、前端看不到过程”。
  3. 批次执行中的失败原因、最近步骤和聚合统计无法第一时间暴露,影响运维排障效率。

这使得 OTA 批次虽然“能执行”,但还没有形成“可实时观察、可快速排障”的运维闭环。

解决方案

基于现有 OTA 批次、任务和进度上报链路,补齐一轮“实时推送 + 监控闭环”能力:

  1. 后端在任务进度变化后发布统一的 OTA 进度事件。
  2. 提供批次维度和任务维度的实时推送端点,首期优先采用 SSE
  3. 管理端在现有批次页和任务 Slideover 中接入实时订阅能力,不重写页面。
  4. 推送载荷中带上聚合进度、任务进度、最近步骤和失败原因,缩短排障路径。

本期目标不是重做 OTA 策略系统,而是先把“执行中看得见”补齐。

用户故事

  1. 作为 OTA 运维管理员,我希望打开批次详情后能实时看到每个升级任务的进度和状态,而不必手动刷新页面。
  2. 作为 OTA 运维管理员,我希望批次列表中的成功数、失败数、进行中数量和整体进度能实时更新,以便快速判断升级是否健康推进。
  3. 作为 OTA 运维管理员,我希望任务失败时能立刻看到最近步骤和失败原因,以便尽快排障。
  4. 作为前端开发者,我希望有统一的实时订阅封装,负责连接、断线重连和页面卸载处理,以便降低页面复杂度。
  5. 作为后端开发者,我希望设备进度上报后只需发布统一事件,再由推送层消费,以便保持业务层和传输层解耦。
  6. 作为产品经理,我希望先补齐实时监控闭环,再在后续 PRD 中叠加灰度/分组和 MQTT 协同能力。

实现决策

一、模块范围

  • mortise-ota-domain:沿用现有批次、任务、进度日志模型。
  • mortise-ota-application:新增进度事件发布与聚合推送服务。
  • mortise-ota-admin:新增或扩展面向管理端的实时推送端点。
  • admin-ota:扩展现有批次页和任务监控侧边栏。

二、推送协议选择

本期首选 SSE,原因如下:

  • 与当前“服务端单向推送进度”场景更匹配。
  • 前端接入成本较低,易于在现有页面中落地。
  • 相比 WebSocket,首期不需要额外引入双向会话语义和更复杂的连接治理。

WebSocket 保留为后续增强选项,但不作为本期必交付项。

三、事件与推送边界

  • 设备通过现有 OTA API 上报进度后,应用层发布统一进度事件。
  • 推送层消费进度事件,生成批次级和任务级的实时消息。
  • 前端只消费标准化推送载荷,不直接依赖数据库轮询或页面级刷新策略。

四、前端改造策略

  • 保持现有 batches 页面和任务 Slideover,不新增独立入口。
  • 在当前 UI 基础上补充实时进度、最新步骤、失败原因和连接状态提示。
  • 页面关闭或切换时自动释放订阅资源。

五、范围控制

本期聚焦“实时可见性”,不把策略配置、灰度编排、MQTT 指令协同混入同一轮交付。

测试决策

  • 后端覆盖进度上报后事件发布、SSE 推送和聚合统计更新。
  • 前端覆盖实时订阅建立、断线重连、页面卸载和 UI 状态同步。
  • 至少保留一条端到端链路:设备上报进度 → 后端发布事件 → 前端实时看到更新。
  • 失败路径需覆盖:任务失败、连接中断、空批次和已结束批次。

垂直切片拆分

切片 1:OTA 进度事件与 SSE 端点

覆盖的用户故事:1、2、5

验收标准

  • 设备进度上报后,后端发布统一进度事件。
  • 提供批次维度的 SSE 端点。
  • SSE 输出包含批次聚合统计和任务变化摘要。

切片 2:任务 Slideover 实时订阅

覆盖的用户故事:1、3、4

验收标准

  • 打开任务 Slideover 后自动建立实时订阅。
  • 任务进度、步骤和失败原因可实时更新。
  • 页面关闭后自动断开连接。

切片 3:批次列表聚合进度实时更新

覆盖的用户故事:2、4

验收标准

  • 批次列表中的整体进度和统计实时变化。
  • 不需要整页刷新即可看到最新状态。

切片 4:失败可观测性补强

覆盖的用户故事:3

验收标准

  • 推送消息带上最近步骤、错误码或失败消息。
  • 前端清晰区分进行中、成功、失败和终止状态。

范围外

  • 升级策略的灰度/分组细化
  • MQTT 直接下发升级指令
  • OTA 与自动化联动
  • 通用实时推送平台化改造
  • 新建独立 OTA 监控入口

补充说明

这是跨仓库需求,提交后请保留本 PRD Issue 作为 Parent PRD,子仓库实现 Issue 统一引用本 Issue。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions