cloud: production gaps (worker loop + true cancel, task result columns + migration, DB interface migration, metrics + backup)
This commit is contained in:
1 parent
07ef869267
commit
631580beab
14 files changed
+956
-29
No files matched your search
+34
-1
@@ -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
|
||||
文件,这一点迁移后未退化)。
|
||||
Reference in new issue
Block a user