Skip to content

fix: system /workers/{type} 分类 filter 端点#6428

Merged
Kaoruha merged 1 commit into
masterfrom
6431-fix/system-workers-by-type
Jun 28, 2026
Merged

fix: system /workers/{type} 分类 filter 端点#6428
Kaoruha merged 1 commit into
masterfrom
6431-fix/system-workers-by-type

Conversation

@Kaoruha

@Kaoruha Kaoruha commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Summary

推进 #5878(WebUI 面板调用的后端端点大面积缺失)的 Worker Management 切片

问题

#5878 body 列举前端调 5 个分类端点均 404:

  • GET /api/v1/system/workers/backtest
  • GET /api/v1/system/workers/data
  • GET /api/v1/system/workers/execution
  • GET /api/v1/system/workers/scheduler
  • GET /api/v1/system/workers/timer

后端仅有聚合 GET /workerssystem_service.get_workers_status 已返回带 type 字段(backtest_worker/data_worker/execution_node/scheduler/task_timer)的 worker 列表,但无按 type filter 的子端点。

修复

新增 GET /workers/{worker_type},复用聚合按 worker.type filter:

  • WORKER_TYPE_MAP:前端路径 → 后端 worker.type(system_service._format_workers
  • 未知 type → HTTPException 404(前端能区分「type 拼错」vs「真无运行实例」)
  • service 异常 → 降级 count=0(与聚合 /workers 一致,端点不崩)

不关闭 #5878(重要)

#5878 涉及 22+ 端点跨 7 模块(Auth/Trading/Portfolio/Worker/Backtest/Alert/DI),本 PR 仅 Worker Management 1 模块(AC 第 5 条)。后续切片:

各切片最小独立,零 hunk 重叠,便于分别 review。

Test plan

三层冒烟(对齐 .github/workflows/ci.yml #6015)全绿:

  • L1 py_compile:system.py + test 文件 ✅
  • L2 启动路径:test_user_crud_mock + test_containers + test_user_cli + system_service 回归(53 passed)✅
  • L3 api:test_system_workers_by_type(9 passed)— 未知 type 404 / 5 type 参数化映射 / 空匹配 / 异常降级 ✅

🤖 Generated with Claude Code

@Kaoruha

Kaoruha commented Jun 24, 2026

Copy link
Copy Markdown
Owner Author

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

Verified(#5878 Worker Management 切片:GET /workers/{worker_type} 分类 filter,不关闭 #5878):

  • 切片定位准确bug(api): WebUI 前端期望 22+ 个不存在的 API 端点,大量页面空白 #5878 涉及 22+ 端点跨 7 模块,本 PR 仅 Worker Management 1 模块(AC 第 5 条 5 个前端端点)。PR body 明确不关闭 bug(api): WebUI 前端期望 22+ 个不存在的 API 端点,大量页面空白 #5878,范围界定正确
  • 【linchpin】worker.type 字符串逐字匹配:亲验 system_service._format_workers 产生的 type(data_worker L111 / backtest_worker L121 / execution_node L132 / scheduler L142 / task_timer L153)与 WORKER_TYPE_MAP 5 个 value 完全一致。filter 不会空集(规避 [[arch_stockinfo_entity_code_name_field]] 式字段错配静默失效)。git log -S 确认这些字符串自 commit 5c5b6e9 引入后从未改名,无漂移风险
  • 路由无冲突/workers(字面量)先注册、/workers/{worker_type}(路径参数)后注册,FastAPI 按注册顺序精确匹配,两者路径段数不同互不截胡
  • HTTPException 404 位置安全 [[arch_httpexception_caught_by_except]]:raise HTTPException(404) 在 try 块外(try 从 service 调用开始),不会被 except Exception 吞。try 内仅 svc.get_workers_status()(不 raise HTTPException)
  • 测试真实性:404 测试在 service 调用前 raise(无需 mock service,真实测未知 type);filter 测试 mock _get_system_service 后端点 filter 逻辑真实执行;5 type 参数化映射 + 空匹配 + 异常降级 4 类覆盖。mock 路径 api.system._get_system_service 对齐 [[arch_api_test_import_collapse]]
  • service 返回类型匹配get_workers_status 返回原生 dict(非 ServiceResult),端点 result.get("data",[]) if isinstance(result,dict) else [] 安全
  • CLAUDE.md 合规:分层架构不违规(端点经 _get_system_service() 调 service,无直调 CRUD);未触碰 Base 类;测试放 tests/api/

观察附注(非 PR 缺陷,跨层契约缝隙):前端 web-ui/src/api/modules/system.ts:74-103 的 5 个类型化访问器签名 Promise<WorkerInfo[]>(裸数组)与本端点返回 {type,workers,count}(对象包裹)契约错配。但亲验全仓 grep 这 5 个访问器当前零调用方(前端实际消费 workers 只用聚合 systemApi.getWorkers(),stores/system.ts:150),未触达运行时。属 #5878 前后端契约先天缝隙 + web-ui 整体重构待定([[project_webui_refactor_issues]]),建议 #5878 下一切片或 web-ui 重构时统一(改前端签名或后端返裸数组),不阻塞本 PR。

🤖 Generated with Claude Code

- If this code review was useful, please react with 👍. Otherwise, react with 👎.

Worker Management 切片:前端 5 个分类端点 GET /workers/{backtest|data|
execution|scheduler|timer} 此前 404(后端仅有聚合 GET /workers)。
get_workers_status 已返回带 type 字段的 worker 列表,但无按 type
filter 的子端点。

新增 GET /workers/{worker_type},复用聚合按 worker.type 归类:
- WORKER_TYPE_MAP: 前端路径 → 后端 worker.type(system_service _format_workers)
- 未知 type → 404(前端可区分 type 错误 vs 真无 worker)
- service 异常 → 降级 count=0(与聚合 /workers 一致)

测试:未知 type 404 / 5 type 参数化映射 / 空匹配 / 异常降级(9 passed)

不关闭原 issue(22+ 端点跨 7 模块,本切片仅 Worker Management 1 模块)。
@Kaoruha
Kaoruha force-pushed the 6431-fix/system-workers-by-type branch from da7b6d1 to b41c3b8 Compare June 27, 2026 17:16
@Kaoruha
Kaoruha merged commit 945e64e into master Jun 28, 2026
2 checks passed
@Kaoruha
Kaoruha deleted the 6431-fix/system-workers-by-type branch June 28, 2026 02:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant