Skip to content

feat: add scheduled account keepalive renewal #512

@icebear0828

Description

@icebear0828

背景

有些账号的额度/窗口刷新时间需要通过真实上游请求触发更新。希望新增一个可选的自动续期/keepalive 功能:开启后,代理按配置定时为账号发送一条极小请求,用于刷新账号的额度时间状态。

需求

  • 新增全局开关,默认关闭。
  • 开启后,对可用账号按计划自动发送一次轻量请求:仅回答1+1=?
  • 默认固定时间点:每天 07:00、13:00、18:00(使用服务器本地时区,文档需说明)。
  • 支持两种调度模式:
    • 固定时间点:用户可配置多个 HH:mm 时间点。
    • 间隔模式:用户可配置首次执行时间和后续间隔。
  • 支持配置:
    • 是否启用。
    • 首次执行时间。
    • 固定时间点列表。
    • 间隔时间。
    • 每次批量执行的并发数/节流间隔,避免所有账号同时打上游。
  • 每个账号独立执行,不应因为某个账号失败阻塞其它账号。
  • 跳过不可用账号:disabled / expired / banned / refresh 中 / 无有效 token 等。
  • 发送请求应走现有 Codex 请求路径和账号状态更新逻辑,使 quota / rate limit / error handling 与正常请求一致。
  • Dashboard 需要能查看和配置该功能;最少需要展示开关、模式、时间点/间隔、最近执行时间、下一次执行时间、最近执行结果。

默认行为

account_keepalive:
  enabled: false
  mode: fixed_times
  fixed_times:
    - "07:00"
    - "13:00"
    - "18:00"
  first_run_time: "07:00"
  interval_minutes: null
  concurrency: 2
  per_account_delay_ms: 1000
  prompt: "仅回答1+1=?"

验收标准

  • 配置 schema 和本地配置 overlay 均支持该功能。
  • Scheduler 单测覆盖:固定时间点、间隔模式、跨天、禁用状态、账号过滤、并发/节流、单账号失败不影响其它账号。
  • 请求路径测试覆盖:keepalive 请求能复用现有账号池和 quota 更新逻辑。
  • Dashboard 测试覆盖关键控件和状态展示。
  • 文档说明默认时间使用服务器本地时区,以及该功能会消耗真实上游请求。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions