09-调度监控

article
2026年7月17日阅读约 2 分钟351 字

更新于 2026年7月17日

09 调度监控端到端实现任务

执行要求:直接完成“调度监控”七任务定义、依赖、实例、血缘、运行范围和控制操作,运行权限、幂等、冲突、审计与前端验证后交付。不要把创建 PENDING 实例描述为任务已执行成功。

共同门禁:不执行数据库草案,不修改 V1,不 DROP/清库或插入客户测试数据;g5b2-mysql 仅用于 SHOW、SELECT 和 EXPLAIN。接口统一使用 X-Trace-Id,缺失时后端生成并写响应头;同一动作的前端日志、后端日志、错误响应、调度实例和审计必须同值。

1. 目标与完成判定

  • 菜单:运维管理 / 调度监控,仅 ROLE_ADMIN。
  • 路由:/scheduling。
  • 展示七任务、依赖、上次/当前实例、执行历史、失败摘要、输入血缘和受影响 CGI/时间范围。
  • 支持启用/停用、受控手工运行、协作式停止和失败/停止实例重试。
  • 所有控制操作幂等、校验状态并写审计;任务算法本身不在 Controller 或同步请求执行。

2. 开工前必读与现状核对

  1. 设置 PowerShell UTF-8,阅读仓库门禁、需求 V2.0 第 6.1/6.2 节、数据库设计第 5/8/9.6/10/12 节和调度 DDL/种子。
  2. 阅读 SchedulingPage、types、api/http、PageFeedback、权限处理。
  3. 阅读 scheduling Controller/Service/Mapper/XML、OperationsService、ActorContext 和调度相关测试。
  4. 用 rg 查找七个 jobCode、scheduleInstances、runJob、stopInstance、retryInstance 的全部调用方。
  5. 当前读写接口均已存在;逐项验证语义,不另建通用 command 接口。

3. 七任务固定清单

顺序 jobCode 名称
1 JOB_IMPORT_PERF 性能 CSV 定时导入
2 JOB_IMPORT_INTERFERENCE 干扰 CSV 定时导入
3 JOB_METRIC_PUBLISH 无线指标结果发布
4 JOB_BASELINE 动态基线计算
5 JOB_PREDICTION 48 小时趋势预测
6 JOB_FORECAST_EVALUATION 预测回测与模型状态更新
7 JOB_RULE_ALARM 阈值/趋势异常/预测性告警与候选诊断

不得从前端 hardcode 任务状态或伪造 Cron。导入 Cron/交付频率未确认时任务保持禁用并显示“未配置/依赖触发”。

4. 现有接口基线

能力 接口
任务/实例/失败 GET /api/v1/scheduling/jobs、/instances、/failures
依赖 GET /api/v1/scheduling/jobs/{jobCode}/dependencies
输入血缘/范围 GET /api/v1/scheduling/instances/{id}/inputs、/scope
启停 POST /api/v1/scheduling/jobs/{jobCode}/enabled
手工运行 POST /api/v1/scheduling/jobs/{jobCode}/runs
停止/重试 POST /api/v1/scheduling/instances/{id}/stop、/retry

5. 业务规则

  • 下游只消费上游成功且满足 SUCCESS/PUBLISHED 条件的固化输入,不按“最新记录”临时推断。
  • 每次尝试有唯一 runNo;重试保持 logicalRunNo,attemptNo+1,并记录 retryOfInstanceId。
  • 手工运行只登记可追溯 PENDING 实例,由调度执行器消费;HTTP 不直接运行导入、基线、预测或告警计算。
  • 并发策略为 FORBID;同一任务存在 PENDING/RUNNING 时重复手工运行返回 409 或幂等原回执。
  • 停止为协作式:写 stopRequestedAt/by/traceId,由任务在安全边界转 STOPPED;不得强杀线程并立即声称已停止。
  • 只有 FAILED/STOPPED 等明确状态允许重试;成功实例不可重试。
  • 失败摘要只返回稳定错误码和中文业务摘要,不返回 SQL、路径、完整 CSV 或堆栈。
  • 无实例、无依赖、无血缘和无范围分别返回空集合,不造默认运行记录。

6. 后端实施

  1. 所有调度接口统一 ROLE_ADMIN,参数和资源不存在使用明确 400/403/404/409。
  2. 实例列表支持 jobCode、status、triggerType、时间范围、page/size/白名单排序,列表/count 条件一致并稳定排序。
  3. jobs 返回七任务及上次/当前实例、nextFireAt 和配置状态;查询不能用 N+1 无界扫描。
  4. inputs 直读 tb_schedule_instance_input 的实际批次、发布运行或上游实例;scope 直读 tb_schedule_run_scope。
  5. setEnabled、run、stop、retry 使用同一 traceId 幂等,锁定目标状态并在事务内写业务状态和审计。
  6. retry 创建新实例,不修改旧实例;stop 只写请求字段。
  7. 中文日志写明业务目的、任务/实例、触发条件、状态和结果,不泄露敏感配置。

7. 数据追溯

能力 主要来源
任务定义/开关/周期 tb_schedule_job
DAG 依赖 tb_schedule_job_dependency
实例/重试/停止/错误 tb_schedule_instance
实际输入血缘 tb_schedule_instance_input
受影响 CGI/时间 tb_schedule_run_scope
导入/发布结果引用 tb_import_batch、tb_publish_run
审计 tb_audit_log,request_id=traceId

8. 前端适配

  • 任务选项来自后端七任务,不 hardcode 数量、Cron、状态或失败。
  • 实例筛选、分页和排序真实进入请求;选择实例后才加载 inputs/scope。
  • 控制按钮按后端状态禁用,但仍处理 403/409;操作后用同一 traceId 刷新权威状态。
  • 手工运行成功提示写“已登记/待执行”,不能写“执行成功”。
  • STOPPING 与 STOPPED 分开展示;错误态显示服务端 traceId。

9. 最小验证门禁

  1. 后端测试覆盖七任务、权限、并发运行冲突、幂等、停止状态、合法/非法重试、logicalRunNo/attemptNo、输入血缘和稳定分页。
  2. 只读 EXPLAIN jobs 当前实例、instances/count、inputs 和 scope。
  3. 写操作使用隔离测试库或事务回滚;不得在客户库插测试实例。
  4. 真实 HTTP 核对手工运行/停止/重试的请求头、响应、日志、实例 trace_id 和审计 request_id。
  5. 运行相关 Maven 测试、Mapper XML 检查、注解 SQL 禁止扫描和 cd frontend; npm run build。

10. 交付报告

列出修改文件、七任务和依赖核对、接口、状态迁移、测试/HTTP/EXPLAIN/build 实际结果。明确本任务是否仅完成控制面,以及哪些实际任务执行器尚未存在或未验证。