Repository navigation
Commit 88d1e32
committed
B4: 后台任务可视化,与运行时配置合并为「任务与配置」页
问题:TaskRunner 跑着 6 类循环,但除了失败时一行 warning,没有任何地方能看到
「上次什么时候跑的、结果如何」,也没有端点暴露。调研确认项目内不存在后台任务页
(无 TasksPage / 无 /api/tasks,git 全历史与文档均无)——这是新增而非找回。
后端
- 新增 tasks/status.py:TASK_SPECS 任务清单 + TaskStatusStore 进程内运行态。
刻意不落库:任务状态回答的是「这次进程活着的时候谁跑过」,重启归零比编造一条
重启前记录更诚实,也省掉新表 + 保留期清理 + 老库迁移(无 schema 变更)。
- TaskRunner._guarded 增加 key:返回 None 表示本轮 no-op(签到未到点 / 活跃上报
未启用),不入账——否则页面会显示「签到刚刚跑过」而当天其实一次都没签;
异常入账 last_error,否则「一直在失败」会显示成「尚未执行」。
- TaskRunner.task_status():周期与开关取当前生效值(热更后刷新即变),非装配快照;
未装配的任务不出现在清单里。
- HotSetting 增 task 归属字段并透出到 snapshot();新增 GET /api/tasks(admin),
带 server_time 供前端用服务端时钟算「距今多久」;runner 缺失时返回空列表不 500。
前端
- 导航与页头「运行时配置」→「任务与配置」;SettingsPage 重组为任务卡片区
(运行态 + 该任务的配置项,复用 SettingRow)+「网关与调度」区;归属由后端下发,
前端不硬编码 key 列表。
- 新增 useTasks(refetchInterval 30s)、display.formatAgo / taskReportLabel。
文档
- PROPOSAL Q38(含 Q11/Q34 措辞)、TECHNICAL §3.12 + §3.8/§6.1/目录树、
README 中英、NOTICE 增列 ithtelab/workbuddy-manager。
质量
- 后端 ruff + pytest 100% 行/分支覆盖(1328 passed);前端 tsc + vitest(158) + build。
- 生产实例实测 /api/tasks:6 任务、周期取 DB 覆盖值(探测 30 分钟)、启动首轮入账。1 parent 774447f commit 88d1e32
18 files changed
Lines changed: 1096 additions & 86 deletions
File tree
- src
- api
- tasks
- tests
- web/src
- api
- __tests__
- pages
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
28 | 33 | | |
29 | 34 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
| |||
247 | 248 | | |
248 | 249 | | |
249 | 250 | | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
250 | 254 | | |
251 | 255 | | |
252 | 256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
| 31 | + | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
| 191 | + | |
| 192 | + | |
191 | 193 | | |
192 | 194 | | |
193 | 195 | | |
| |||
250 | 252 | | |
251 | 253 | | |
252 | 254 | | |
253 | | - | |
| 255 | + | |
254 | 256 | | |
255 | | - | |
| 257 | + | |
256 | 258 | | |
257 | 259 | | |
258 | 260 | | |
| |||
262 | 264 | | |
263 | 265 | | |
264 | 266 | | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
265 | 273 | | |
266 | 274 | | |
267 | 275 | | |
| |||
0 commit comments