fix(pipeline): 死信表真正接线 + 前端 HTTP 收敛与状态修正

- bzzoiro events/standings/stats 抓取失败写入 IngestFailure 死信(尽力而为,
  写入失败不影响主流程);顺带修复 standings 失败路径 league_r 缺 errors 键
  的 KeyError —— 该路径此前从未跑通,一旦失败会顶掉原始异常
- admin/api.ts 收敛为 lib/http.ts 薄门面,消除第二套 HTTP 实现;
  UNAUTHORIZED_EVENT 定义移至共享层,断开 lib→admin 反向依赖
- STATUS_META 死键 live 改为 in_play(对齐 normalize.py 口径),
  补 paused/postponed/cancelled/suspended;移除无人消费的
  DashboardStats.total_matches(items.length 近似,上限 100)
- 新增 tests/test_ingest_deadletter.py(6 例,变异验证判别力)
This commit is contained in:
2026-09-21 18:36:43 +08:00
parent b5f7e682f0
commit b6a251407d
8 changed files with 297 additions and 100 deletions
+4 -2
View File
@@ -325,8 +325,10 @@ class RawEvent(Base):
class IngestFailure(Base):
"""采集失败死信:记录失败原因、重试次数与下次重试时间。
⚠️ 预留未启用:当前 bzzoiro 管线不写入此表。
未来接线计划:采集失败时写入,支持按 next_retry_at 自动重试。
bzzoiro 三条管线(events / standings / stats)抓取失败时经由
bzzoiro._safe_write_ingest_failure 写入本表(尽力而为,写入失败
不影响采集主流程)。admin 可通过 /admin/schedules/ingest-failures
查看与重试。
"""
__tablename__ = "ingest_failures"