Files
setrip/docs/archive/ADMIN_SYSTEM_HEALTH_ROADMAP.md
T

3.8 KiB

Setrip — Admin System Health Roadmap (ARCHIVED — DELIVERED 2026-05-18)

Admin perlu visibilitas atas job otomatis (cron) dan alert untuk state stale.


Status delivery

Phase Status Catatan
Phase 1 — Cron Run Log Delivered Model CronRun, helper runCron(), wire ke cron existing.
Phase 2 — System Status Page Delivered /admin/system tampilkan summary cron + 20 run terakhir + health badge.
Phase 3 — Stale State Alerts Delivered systemHealthService.detectStale() cek 4 kategori (Payment AWAITING > 25h, AWAITING_PAY past departure, Payout HELD overdue, Refund APPROVED > 7d). Banner di /admin/system.
Phase 4 — Discord Webhook Notify Delivered notifyAdmins() POST ke ADMIN_ALERT_WEBHOOK_URL. Trigger otomatis saat cron FAILED via runCron.

Phase 1 — Cron Run Log

# Item Status File
1.1 Model CronRun + enum CronRunStatus + migration prisma/schema.prisma + prisma/migrations/20260518170000_add_cron_run/
1.2 Helper runCron(jobName, fn) — auto create RUNNING row → SUCCESS/FAILED lib/cron-runner.ts
1.3 Wire runCron di auto-complete-trips cron app/api/cron/auto-complete-trips/route.ts

Phase 2 — System Status Page

# Item Status File
2.1 Per-job summary: last run, last success, count 7d, error count 7d app/admin/system/page.tsx
2.2 20 cron run terakhir di table bawah app/admin/system/page.tsx
2.3 Health badge (🟢 OK < 25h, 🟡 STALE, 🔴 FAILED) app/admin/system/page.tsx
2.4 Link "System" di admin navbar components/admin/admin-sidebar.tsx

Phase 3 — Stale State Alerts

# Item Status File
3.1 systemHealthService.detectStale() return 4 count server/services/system-health.service.ts
3.2 Banner alerts kuning di /admin/system kalau ada count > 0 app/admin/system/page.tsx
3.3 Link tiap alert ke filtered list page yang relevan (untuk Payout HELD & Refund APPROVED) app/admin/system/page.tsx

Threshold draft (review setelah jalan 1-2 minggu):

  • Payment MIDTRANS AWAITING createdAt > 25 jam — suspect webhook tertunda
  • Booking AWAITING_PAY dengan trip.date < today — peserta lupa bayar
  • Payout HELD dengan heldUntil > 1 hari lewat — cron release tidak jalan
  • Refund APPROVED reviewedAt > 7 hari — admin lupa process

Phase 4 — Discord Webhook Notify

# Item Status File
4.1 Helper notifyAdmins(message) — POST ke Discord webhook URL dari env lib/admin-notify.ts
4.2 Trigger notify di runCron saat FAILED (fire-and-forget) lib/cron-runner.ts
4.3 Trigger notify dari systemHealthService.detectStale rate-limited Skip — admin sudah lihat banner di /admin/system saat buka pagi. Push notif harian baru worth it kalau admin sering miss; bisa ditambah belakangan.

Tindakan manual ops:

  1. Apply migration (sudah di Phase 1).
  2. (Opsional) Buat Discord channel internal + webhook URL → set env ADMIN_ALERT_WEBHOOK_URL di PM2/server. Tanpa env, notifyAdmins no-op.
  3. Test alert: trigger cron secara sengaja fail (mis. matikan DB sebentar) → cek Discord channel menerima 🚨 message.