fix flower worker query fallback and legacy authz table guards

This commit is contained in:
chengkml
2026-05-03 16:05:04 +08:00
parent 89c616df3f
commit 12a97e74a9
4 changed files with 64 additions and 3 deletions
+34
View File
@@ -343,3 +343,37 @@
- 风险与影响:
- 导入多个数据文件时,系统会选定一个“当前数据集文件”用于分析/回填(优先栅格),其余文件保留在数据集目录中。
- `usage_status` 依赖任务状态汇总,若历史任务状态异常(例如未正确收尾)可能导致状态滞后,需要运维侧修正任务状态。
## Work Log - 修复容器巡检发现的监控与鉴权兼容问题(2026-05-03)
- 背景:
- 容器巡检发现两类持续异常:
- `GET /api/v1/admin/flower/worker-tasks` 间歇 `502`
- PostgreSQL 持续报 `relation "user_role_rela" does not exist` / `relation "menu" does not exist`
- 同时发现开发 compose 默认脚本指向 `deploy/dev-deploy/.env`,但仓库缺失该文件,导致 `docker compose ...` 命令报 `invalid compose project`
- 根因:
- Flower 侧对 `/api/workers?...&workername=...` 在当前版本会返回 `404 Unknown worker`,即使 `/api/tasks?workername=...``/api/workers?status=true` 正常,后端代理将其映射为 `502`
- 鉴权服务优先走 legacy 表(`user_role_rela/menu/role_menu_rela`),在 modern-only 库(仅 `users/roles/menus/user_roles/role_menus`)下会触发缺表 SQL 错误并回滚。
- dev 部署环境文件命名缺失 `deploy/dev-deploy/.env`
- 本次改动(最小闭环):
- 文件:`api/app/services/flower_monitor_service.py`
- `build_worker_task_overview` 不再调用会 404 的 `workers?workername=...`
- 改为读取 `workers?refresh=...` 全量快照,再本地筛选 worker。
- 文件:`api/app/services/legacy_authz_service.py`
- 新增 `_legacy_table_exists`
- 在 legacy 角色、权限、菜单、菜单授权查询前先判表存在,不存在直接回退空结果,避免持续 SQL 报错。
- 文件:`deploy/dev-deploy/.env`
- 新增默认 env,补齐 `docker:up/down/logs` 脚本依赖的 compose 变量,恢复 dev compose 命令可用性。
- 验证:
- 语法验证:`python3 -m compileall api/app` 通过。
- compose 验证:`docker compose --env-file deploy/dev-deploy/.env -f deploy/dev-deploy/compose.yml config --services` 通过。
- 运行验证(当前 fquiz 容器):
- API 日志中 `/api/v1/admin/flower/worker-tasks` 已连续返回 `200`,未再出现 `502/Unknown worker`
-`get_user_authorization` 触发鉴权路径后,DB 日志窗口内未出现 `user_role_rela/menu does not exist`
- 风险与影响:
- Flower 修复仅调整查询路径,不改变响应 schema 与前端调用方式。
- legacy 鉴权改动是“缺表短路”策略:当 legacy 表不存在时更快回退 modern 逻辑,避免日志噪音和事务回滚开销。
- 新增 `deploy/dev-deploy/.env` 为默认开发口径,若团队有自定义值仍可通过本地覆盖文件管理。