Files

2.0 KiB

实现 Cron 管理增强(P0-4b)。后端 API + 前端页面。

后端: Cron API

创建 backend/app/api/cron.py,全部 require_auth

1. GET /api/v1/cron/jobs

跨 Profile Cron 聚合列表,支持 ?status=active|paused&profile=all|xxx|system

  • 每行: job_name, profile, schedule, status, last_run(time+✅/❌), success_rate, has_logs
  • 数据来源: hermes CLI hermes cron list --all + 系统 Cron 硬编码清单
  • 系统 Cron 示例: Hindsight(0 21 * * ), 健康巡检(/30 * * * *), Skill检查(0 2 * * *), Memory归档(0 3 * * 0)
  • 系统 Cron 行有 [system] 标记
  • Cron 连续失败≥2次 → 行标红
  • 当日有失败时返回 has_failures: true

2. GET /api/v1/cron/jobs/{id}/logs

返回最近 8 条运行日志:

{"logs": [{"time": "", "status": "success|failure", "message": "..."}]}

数据来源: hermes CLI + 日志文件。暂用占位数据。

3. POST /api/v1/cron/jobs/{id}/run, /pause, /resume

操作 Cron (需 operator+):

  • run: 手动触发一次
  • pause: 暂停 Cron
  • resume: 恢复 Cron
  • 操作结果写入审计日志

前端: Cron 页面

修改 frontend/src/pages/CronPage.tsx:

筛选栏

  • 状态筛选: 全部/活跃/暂停/今日失败
  • Profile 筛选: 全部/各 Profile/仅系统 Cron
  • 前端即时过滤

Cron 列表

  • Table 组件, 30s 轮询
  • 列: Job名, Profile, Cron表达式(等宽字体), 状态 Badge, 上次运行(时间+✅❌), 成功率(<80%标黄), 操作
  • 系统 Cron 灰底 + [system] 标记
  • 连续失败≥2 行标红

日志面板

  • 每行操作列 "📋 日志" 按钮
  • 点击弹出居中面板(遮罩+Modal)
  • 标题: "{job} — 最近运行日志"
  • 列表(最多8条): 时间戳, 状态✅/❌, 日志消息(INFO/WARN/ERROR 按级别着色)
  • 失败消息红色背景, 包含完整错误详情
  • 关闭: ✕ / 点遮罩 / Esc

操作按钮

  • 运行(二次确认), 暂停, 恢复
  • Toast 结果反馈

导航栏 Badge

  • Dashboard 今日 Cron 失败计数同步
  • 导航栏 Cron 项显示红色 Badge(失败数)

四态覆盖

注册路由, 完成后提交。