feat(worker-logs): tabel uit WorkerRun-DB (fase 3) #74

Merged
janpeter merged 1 commit from feat/worker-logs-db-table into main 2026-06-11 20:43:50 +02:00
Owner

Fase 3 van het worker-logs-herstelplan: de tabel leest nu uit de WorkerRun-DB i.p.v. het filesystem-venster — de definitieve fix voor de venster-limiet uit fase 2 (default limit=10 toonde leeg zodra idle-polls het 250-file-venster vulden).

Wat

  • Migratie 20260611183000_add_worker_run_pool: expliciete pool + instance-kolommen op WorkerRun (de codex-review noemde dit als lange-termijnmodel), backfill uit run_id (codex/% → codex, anders idea), + composite index (host_slug, pool, started_at desc). De ingester vult de kolommen nu direct.
  • lib/worker-runs-db.ts: listRunSummariesFromDb(limit, pool?) — newest-first, host-scoped, optioneel pool-gefilterd; mapt WorkerRunRunLogSummary (status-enum reverse-map token_expired→token-expired, Decimal→number, epoch(0)→null startedAt).
  • Page + list-API lezen nu de DB-bron; detail blijft van schijf (exact pool/instance/file, live voor in-progress runs).
  • listRunLogs (filesystem-venster) verwijderd — geen parallelle bron meer; listAllRunLogEntries (ingest) + readRunLog (detail) blijven.

Trade-off

De tabel loopt nu tot één ingest-tick (≤5 min) achter op een splinternieuwe run. De dashboard-widget hing al van diezelfde ingest af, dus dit is consistent. De winst: élke historische job-run is zichtbaar, ongeacht idle-churn.

Tests / verificatie

  • test/worker-runs-db.test.ts — DB-mapping, status-reverse-map, host-scoping + pool-filter, limit-clamp (prisma gemockt).
  • test/worker-logs-layout.test.ts — bijgewerkt (listRunLogs-cases weg; listAllRunLogEntries + readRunLog blijven).
  • Volledige suite 74 passed, tsc --noEmit clean, next build groen.

Deploy

update_ops_dashboard-flow past de migratie toe (stap prisma_migrate_deploy vóór de rebuild). Geen .env-wijziging nodig.

🤖 Generated with Claude Code

Fase 3 van het worker-logs-herstelplan: de tabel leest nu uit de **WorkerRun-DB** i.p.v. het filesystem-venster — de definitieve fix voor de venster-limiet uit fase 2 (default limit=10 toonde leeg zodra idle-polls het 250-file-venster vulden). ## Wat - **Migratie** `20260611183000_add_worker_run_pool`: expliciete `pool` + `instance`-kolommen op `WorkerRun` (de codex-review noemde dit als lange-termijnmodel), backfill uit `run_id` (`codex/%` → codex, anders idea), + composite index `(host_slug, pool, started_at desc)`. De ingester vult de kolommen nu direct. - **`lib/worker-runs-db.ts`**: `listRunSummariesFromDb(limit, pool?)` — newest-first, host-scoped, optioneel pool-gefilterd; mapt `WorkerRun` → `RunLogSummary` (status-enum reverse-map token_expired→token-expired, Decimal→number, epoch(0)→null startedAt). - **Page + list-API** lezen nu de DB-bron; **detail blijft van schijf** (exact pool/instance/file, live voor in-progress runs). - **`listRunLogs`** (filesystem-venster) verwijderd — geen parallelle bron meer; `listAllRunLogEntries` (ingest) + `readRunLog` (detail) blijven. ## Trade-off De tabel loopt nu tot één ingest-tick (≤5 min) achter op een splinternieuwe run. De dashboard-widget hing al van diezelfde ingest af, dus dit is consistent. De winst: élke historische job-run is zichtbaar, ongeacht idle-churn. ## Tests / verificatie - `test/worker-runs-db.test.ts` — DB-mapping, status-reverse-map, host-scoping + pool-filter, limit-clamp (prisma gemockt). - `test/worker-logs-layout.test.ts` — bijgewerkt (listRunLogs-cases weg; listAllRunLogEntries + readRunLog blijven). - Volledige suite **74 passed**, `tsc --noEmit` clean, `next build` groen. ## Deploy `update_ops_dashboard`-flow past de migratie toe (stap `prisma_migrate_deploy` vóór de rebuild). Geen `.env`-wijziging nodig. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
De /worker-logs-tabel las de nieuwste ~3000 logfiles van schijf; zodra
idle-polls zich opstapelden bleven oude job-runs buiten dat venster. Nu
leest de tabel de al-geïngeste WorkerRun-rijen (newest-first, host-scoped,
optioneel pool-gefilterd), zodat élke job-run zichtbaar is ongeacht
idle-churn. Detail blijft van schijf (exact pool/instance/file, live voor
in-progress).

- Migratie: expliciete pool+instance-kolommen op WorkerRun + backfill uit
  run_id (codex/-prefix → codex, anders idea) + composite index
  (host_slug, pool, started_at). Ingester vult ze nu direct.
- lib/worker-runs-db.ts: WorkerRun → RunLogSummary mapping (status-enum
  reverse-map, Decimal→number, epoch(0)→null startedAt).
- listRunLogs (filesystem-venster) verwijderd — vervangen door de DB-bron;
  listAllRunLogEntries + readRunLog (ingest + detail) blijven.
- Tests: DB-mapping (prisma gemockt) + bijgewerkte layout-discovery.

Trade-off: de tabel lag nu tot één ingest-tick (≤5 min) achter op een
splinternieuwe run; de widget hing al van dezelfde ingest af.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Ops-dashboard!74
No description provided.