cloud: production gaps (worker loop + true cancel, task result columns + migration, DB interface migration, metrics + backup)

This commit is contained in:
host committed 2026-10-26 01:53:33 +08:00
1 parent 07ef869267
commit 631580beab
14 files changed
+956 -29

No files matched your search

+34 -1
View File
@@ -274,4 +274,37 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳
APNs / FCM 的真实凭证与发送端仍缺;单机 SQLite 在高并发写下
仍有上限,生产量上来后需换 Postgres(接口层与骨架已就绪,
但真实部署、驱动安装与迁移脚本仍缺,见上文“数据库后端选择”);
worker 执行、云端执行、真实通知与真实模型回合均未接通。
worker 执行已接通(见下文“worker 常驻与真取消”),云端执行、
真实通知与真实模型回合仍受 key 供给与云账号卡点限制。
## worker 常驻与真取消(本轮新增)
- 单次:`python3 -m cloud.worker --db <库> --host-py ../host.py`;
常驻:`python3 -m cloud.worker --db <库> --loop --interval 300`,
每轮 run_all,SIGTERM/SIGINT 时优雅退出,正在跑的任务先标
interrupted 再退出;CLI 起 worker 前先 init_db,全新库不再因
缺表而炸,循环内一轮异常记日志后继续,不带走整个 worker。
- 真取消:子进程以进程组启动(start_new_session),取消时先
SIGTERM 给整个进程组、等 2 秒、仍活着再 SIGKILL,杀完任务
保持 interrupted,执行结果不覆盖它;取消竞态(run_one 已先
标 interrupted)时 cancel 仍返回 True,因为中断确由本次取消触发。
- 任务结果列:tasks 表新增 result_text、error_text、actual_model、
started_at、finished_at、child_pid,init_db 用 PRAGMA 检查后
ALTER TABLE 幂等迁移,老库升级不丢数据;GET /tasks/{id} 返回
它们,缺 key 任务的 error_text 含 Missing environment variable。
## 可观测性与备份(本轮新增)
- 结构化日志:cloud/logging_config.py,JSON 行日志(时间、级别、
服务、任务 id、事件),worker 的认领/完成/失败/取消/fallback/
缺 key 记事件日志,绝不写密钥与环境变量值。
- 指标:`GET /metrics`(需 X-API-Key,任意项目成员可读,只统计
调用者是成员的项目),返回任务总数、各状态计数、成功率、
平均耗时、fallback 总次数、成本合计(actual 与 estimated 分开)。
- 备份:`python3 -m cloud.backup --db <库> --out <目录> [--keep 3]`,
用 SQLite backup API 在线备份,轮转只留最近 3 份(命名含时间戳),
失败明确报错不静默;备份文件本身就是可打开的 SQLite 库。
- DB 接口迁移:server 及 auth/memory/kb/cost/oauth/push/webhooks
的 Store 连接已统一走 cloud.db 的 WAL + busy_timeout 连接
(Postgres 后端仍是骨架,驱动缺失时启动即失败、不先建 SQLite
文件,这一点迁移后未退化)。