mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-24 23:10:56 +08:00
2.8 KiB
2.8 KiB
Scheduler 任务治理 P1(连续失败 + 冷却恢复)
1. 目标
在不引入新子系统的前提下,为现有 scheduled_tasks 增加最小治理能力:
- 连续失败计数(
consecutive_failures) - 自动停用冷却(
auto_disabled_until) - 冷却到期后自动恢复执行资格(无需人工启用)
2. 默认策略
- 连续失败阈值:
3 - 冷却时长:
300s - 健康告警阈值(默认):
- 冷却任务数
>= 1(warning) - 悬挂运行任务数
>= 1(critical) - 24h 失败数
>= 5(warning)
- 冷却任务数
- 适用入口:
SchedulerService后台轮询执行链路- WebSocket RPC
cron.run手动触发链路
3. 数据模型与存储
scheduled_tasks 新增字段:
consecutive_failures INTEGER NOT NULL DEFAULT 0auto_disabled_until TEXT NULL(RFC3339)
兼容策略:
SchedulerDao::create_tables会自动检查并补齐缺失列(PRAGMA table_info+ALTER TABLE)
4. 行为定义
成功
mark_completed时重置治理状态:consecutive_failures = 0retry_count = 0auto_disabled_until = NULL
失败
mark_failed时:consecutive_failures += 1retry_count += 1
- 达到阈值后触发冷却:
- 设置
auto_disabled_until = now + cooldown_secs
- 设置
执行门控
- 任务在冷却窗口内:
cron.run返回拒绝(cooldown)SchedulerService标记运行前会阻断执行
- 冷却到期:
- 自动恢复可执行(按时间条件放行)
5. 对外可见变化
cron.list的enabled在冷却中会返回falsecron.run对冷却任务返回参数错误,包含冷却截止时间- 新增
cron.health聚合接口,返回状态分布、冷却任务数、悬挂运行数、24h 失败数、高风险任务 TopN cron.health新增告警输出(alerts),用于前端/远程入口直接消费- Telegram 入站新增
/cron_health,可直接查看治理概览 - Tauri 命令新增
get_heartbeat_task_health(内部复用cron.health),供设置页直接查询 - Tauri 命令新增
deliver_heartbeat_task_health_alerts,可按当前heartbeat.delivery配置手动推送告警 - 心跳设置页新增“任务健康概览”卡片,展示关键治理指标和高风险任务列表
- 健康卡片新增“最近 24h 失败趋势”图(小时粒度)与“高风险任务详情”弹窗
- 健康卡片新增“推送当前告警”按钮(Webhook/Telegram),用于运维手动触发通知闭环
6. 验证
关键测试:
lime-scheduler:scheduler::tests::test_mark_task_failed_should_trigger_cooldowndao::tests::test_create_tables_should_add_missing_columns_for_existing_table
lime-websocket:handlers::rpc_handler::tests::test_cron_run_should_block_when_task_in_cooldown