hyungi
ebbcaf86d8
feat(observability): 큐 밖 백그라운드 작업(backfill)을 처리 머신 보드에 노출
processing_queue 는 파이프라인 stage 전용이라 hier_overnight_backfill 같은 off-queue
관리 스크립트 작업이 대시보드 보드에 안 잡혀, 다른 세션이 모르고 fastapi 를 재생성해
in-flight 재분해를 끊는 사고가 발생(2026-06-14). 사각지대 해소.
- migrations/357_background_jobs.sql: background_jobs 테이블(kind/label/state/processed/
total/heartbeat). worker_jobs(user_id 필수, worker-pool 전용)와 별개.
- services/background_jobs.py: start/heartbeat/finish 헬퍼 — 자율 트랜잭션(즉시 commit →
실시간 가시화) + best-effort(관측 실패가 본작업 안 깸).
- hier_overnight_backfill: 작업 시작/절 ~10개마다 heartbeat/종료 계측.
- queue_overview: /api/queue/overview 응답에 background_jobs 추가(running + 최근 6h 완료,
stale=heartbeat 끊김 추정). SAVEPOINT 로 테이블 부재/오류 시 보드 본체 무영향.
- ProcessingFlowBoard: "백그라운드 작업" 패널(진행/경과/state, stale 끊김 경고).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-14 12:27:18 +09:00
..
2026-05-02 16:12:38 +09:00
2026-04-02 13:21:45 +09:00
2026-04-02 14:49:12 +09:00
2026-04-02 15:24:50 +09:00
2026-04-03 09:27:18 +09:00
2026-04-03 10:10:03 +09:00
2026-04-03 10:37:44 +09:00
2026-04-03 13:11:43 +09:00
2026-04-03 13:32:20 +09:00
2026-04-06 07:15:13 +09:00
2026-04-06 07:15:13 +09:00
2026-04-06 12:49:45 +09:00
2026-04-06 13:38:07 +09:00
2026-04-06 14:16:00 +09:00
2026-04-07 13:26:37 +09:00
2026-04-07 08:29:12 +09:00
2026-04-07 14:36:22 +09:00
2026-04-09 07:56:50 +09:00
2026-04-10 09:49:56 +09:00
2026-04-10 08:52:26 +09:00
2026-04-13 14:32:55 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:03:35 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:02:45 +09:00
2026-04-13 16:02:45 +09:00
2026-04-14 08:36:16 +09:00
2026-04-14 14:55:45 +09:00
2026-04-14 15:31:16 +09:00
2026-04-14 15:31:16 +09:00
2026-04-15 08:40:19 +09:00
2026-04-15 08:40:19 +09:00
2026-04-15 08:40:19 +09:00
2026-04-15 10:03:00 +09:00
2026-04-15 10:03:00 +09:00
2026-04-15 10:03:00 +09:00
2026-04-15 10:03:00 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 10:09:25 +09:00
2026-04-15 15:10:01 +09:00
2026-04-16 13:54:15 +09:00
2026-04-16 13:54:15 +09:00
2026-04-16 13:58:58 +09:00
2026-04-17 08:11:06 +09:00
2026-04-17 08:11:06 +09:00
2026-04-17 08:11:06 +09:00
2026-04-17 08:11:06 +09:00
2026-05-02 16:12:38 +09:00
2026-04-23 15:46:00 +09:00
2026-04-23 15:46:00 +09:00
2026-04-23 15:46:00 +09:00
2026-04-23 15:46:00 +09:00
2026-04-24 06:47:36 +09:00
2026-04-24 06:47:36 +09:00
2026-04-24 06:47:36 +09:00
2026-04-24 06:47:36 +09:00
2026-04-24 06:47:36 +09:00
2026-04-24 09:14:56 +09:00
2026-04-24 09:38:40 +09:00
2026-04-24 09:38:40 +09:00
2026-04-24 09:38:40 +09:00
2026-04-24 10:22:40 +09:00
2026-04-24 10:22:40 +09:00
2026-04-24 10:22:40 +09:00
2026-04-24 10:22:40 +09:00
2026-04-24 10:22:40 +09:00
2026-04-24 10:33:32 +09:00
2026-04-24 10:33:32 +09:00
2026-04-24 12:59:39 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 08:18:40 +09:00
2026-04-27 12:08:36 +09:00
2026-04-27 12:08:36 +09:00
2026-04-27 12:08:36 +09:00
2026-04-27 12:38:03 +09:00
2026-04-27 12:38:03 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 07:06:37 +09:00
2026-04-28 08:00:37 +09:00
2026-04-28 08:00:37 +09:00
2026-04-28 08:00:37 +09:00
2026-04-28 08:00:37 +09:00
2026-04-28 08:00:37 +09:00
2026-04-28 08:41:46 +09:00
2026-04-28 08:41:46 +09:00
2026-04-28 08:54:02 +09:00
2026-04-28 08:54:02 +09:00
2026-04-28 09:31:06 +09:00
2026-04-28 09:31:06 +09:00
2026-04-28 09:31:06 +09:00
2026-04-28 13:44:59 +09:00
2026-04-28 13:44:59 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 15:58:35 +09:00
2026-04-28 16:49:21 +09:00
2026-04-28 16:49:21 +09:00
2026-04-28 16:49:21 +09:00
2026-04-28 16:49:21 +09:00
2026-04-29 08:45:15 +09:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-04-30 01:57:11 +00:00
2026-05-01 07:22:31 +09:00
2026-05-01 07:22:31 +09:00
2026-05-01 00:06:23 +00:00
2026-05-01 09:32:16 +09:00
2026-05-01 09:32:16 +09:00
2026-05-01 09:32:16 +09:00
2026-05-01 09:32:16 +09:00
2026-05-01 09:49:01 +09:00
2026-05-01 11:42:08 +09:00
2026-05-01 11:42:08 +09:00
2026-05-02 07:20:29 +09:00
2026-05-02 07:20:29 +09:00
2026-05-02 07:20:29 +09:00
2026-05-10 14:05:41 +09:00
2026-05-10 14:05:41 +09:00
2026-05-10 14:05:41 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 07:19:04 +09:00
2026-05-11 12:04:21 +09:00
2026-05-11 12:04:21 +09:00
2026-05-11 12:04:21 +09:00
2026-05-11 12:04:21 +09:00
2026-05-11 12:06:41 +09:00
2026-05-12 13:04:56 +09:00
2026-05-12 13:04:56 +09:00
2026-05-12 13:04:56 +09:00
2026-05-12 13:04:56 +09:00
2026-05-12 21:47:15 +00:00
2026-05-12 22:05:06 +00:00
2026-05-12 22:05:06 +00:00
2026-05-12 22:05:06 +00:00
2026-05-12 22:05:06 +00:00
2026-05-16 13:44:15 +09:00
2026-05-16 13:44:15 +09:00
2026-05-17 06:20:46 +00:00
2026-05-18 20:24:59 +09:00
2026-05-18 20:24:59 +09:00
2026-05-18 20:24:59 +09:00
2026-05-18 20:24:59 +09:00
2026-05-18 20:24:59 +09:00
2026-05-19 08:54:07 +09:00
2026-05-19 08:54:07 +09:00
2026-05-24 06:11:29 +00:00
2026-05-24 06:11:29 +00:00
2026-05-24 07:01:34 +00:00
2026-05-24 07:01:34 +00:00
2026-05-24 07:01:34 +00:00
2026-05-24 12:47:41 +00:00
2026-05-24 12:47:41 +00:00
2026-05-24 13:12:42 +00:00
2026-05-24 13:12:42 +00:00
2026-05-24 13:45:30 +00:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-06 21:33:12 +09:00
2026-06-07 10:18:17 +09:00
2026-06-07 10:18:17 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-07 20:42:32 +09:00
2026-06-08 03:07:53 +00:00
2026-06-09 10:12:26 +09:00
2026-06-10 13:03:31 +09:00
2026-06-10 13:03:31 +09:00
2026-06-10 13:03:31 +09:00
2026-06-10 13:03:31 +09:00
2026-06-10 13:03:31 +09:00
2026-06-10 15:08:18 +09:00
2026-06-10 15:08:18 +09:00
2026-06-10 15:08:18 +09:00
2026-06-11 07:13:17 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 08:29:53 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-12 21:25:04 +09:00
2026-06-13 06:23:22 +09:00
2026-06-13 06:23:22 +09:00
2026-06-13 06:23:22 +09:00
2026-06-13 06:23:22 +09:00
2026-06-13 09:01:21 +09:00
2026-06-14 12:27:18 +09:00