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. 开工前必读与现状核对
- 设置 PowerShell UTF-8,阅读仓库门禁、需求 V2.0 第 6.1/6.2 节、数据库设计第 5/8/9.6/10/12 节和调度 DDL/种子。
- 阅读 SchedulingPage、types、api/http、PageFeedback、权限处理。
- 阅读 scheduling Controller/Service/Mapper/XML、OperationsService、ActorContext 和调度相关测试。
- 用 rg 查找七个 jobCode、scheduleInstances、runJob、stopInstance、retryInstance 的全部调用方。
- 当前读写接口均已存在;逐项验证语义,不另建通用 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. 后端实施
- 所有调度接口统一 ROLE_ADMIN,参数和资源不存在使用明确 400/403/404/409。
- 实例列表支持 jobCode、status、triggerType、时间范围、page/size/白名单排序,列表/count 条件一致并稳定排序。
- jobs 返回七任务及上次/当前实例、nextFireAt 和配置状态;查询不能用 N+1 无界扫描。
- inputs 直读 tb_schedule_instance_input 的实际批次、发布运行或上游实例;scope 直读 tb_schedule_run_scope。
- setEnabled、run、stop、retry 使用同一 traceId 幂等,锁定目标状态并在事务内写业务状态和审计。
- retry 创建新实例,不修改旧实例;stop 只写请求字段。
- 中文日志写明业务目的、任务/实例、触发条件、状态和结果,不泄露敏感配置。
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. 最小验证门禁
- 后端测试覆盖七任务、权限、并发运行冲突、幂等、停止状态、合法/非法重试、logicalRunNo/attemptNo、输入血缘和稳定分页。
- 只读 EXPLAIN jobs 当前实例、instances/count、inputs 和 scope。
- 写操作使用隔离测试库或事务回滚;不得在客户库插测试实例。
- 真实 HTTP 核对手工运行/停止/重试的请求头、响应、日志、实例 trace_id 和审计 request_id。
- 运行相关 Maven 测试、Mapper XML 检查、注解 SQL 禁止扫描和 cd frontend; npm run build。
10. 交付报告
列出修改文件、七任务和依赖核对、接口、状态迁移、测试/HTTP/EXPLAIN/build 实际结果。明确本任务是否仅完成控制面,以及哪些实际任务执行器尚未存在或未验证。