Skip to content

Runbook Operasional

Panduan tugas operasional umum & troubleshooting. Karena sistem melayani paid customer di production, lakukan perubahan dengan hati-hati dan utamakan observasi sebelum aksi.

Tugas umum

Cek status & log aplikasi

bash
pm2 status
pm2 logs backend-ate
tail -f /var/log/backend/application.log

Menjalankan job secara manual

bash
# contoh: reset kuota
node job-runner job-reset-quota-mail

# contoh: recurring invoice
node job-runner invoices/recurring-invoice/job-recurring-invoice

Lihat daftar lengkap di Background Jobs.

Inspeksi antrian job di DB

sql
-- job yang masih antri / error
SELECT id, "jobType", status, "createdAt" FROM "Jobs"
WHERE status IN ('on-queue','processing','error')
ORDER BY "createdAt" DESC;

Refresh token Zoho manual

bash
node job-runner job-update-access-token-zoho

Troubleshooting

Email notifikasi tidak terkirim

  1. Cek tabel Jobs untuk jobType terkait (mis. send-mail-invoice).
  2. Bila status='error', baca params3.
  3. Bila on-queue menumpuk, worker tidak berjalan — cek apakah child process gagal di-spawn atau crontab sender tidak aktif.
  4. Verifikasi SMTP_HOST/USER/PASSWORD dan keberadaan template Pug di views/mailing/.

Pembayaran tidak ter-update setelah bayar

  1. Cek apakah webhook Xendit masuk (POST /api/v1/callback-payment) — lihat log akses.
  2. Pastikan x-callback-token cocok dengan CALLBACK_TOKEN_XENDIT.
  3. Cek error di controllers/callbackXendit.js flow (Zoho markPaid, createInvoice).
  4. Verifikasi status di Zoho & Xendit dashboard.

Relay account ter-suspend tak terduga

  1. Cek TransCompanyEmailQuotaCount — apakah currentSendingCountsendingQuota (kuota 100%)?
  2. Cek apakah ada tunggakan invoice (paidStatus='overdue').
  3. Status Zimbra di TransCompanyAccountRelays.status.
  4. Reaktivasi terjadi otomatis saat pembayaran (callback Xendit) atau manual oleh admin.

Delivery log tidak muncul di dashboard

  1. Pastikan ES_ENABLE=true dan ES reachable.
  2. Cek ingest: apakah Logstash mem-POST ke /api/v1/callback-raw-log, atau SparkPost webhook masuk.
  3. Verifikasi index dashboard-clean-log terisi.
  4. Lihat Logging Pengiriman.

Kuota tidak ter-reset di awal periode

  1. Cek crontab cron:jobs:reset-sending-quota (cron/job-reset-quota-mail.js).
  2. Cek quotaStartDate/quotaEndDate di TransCompanyEmailQuotaCount.

Hal yang harus dihindari

  • Jangan deploy tanpa backup DB bila ada perubahan skema.
  • Jangan mengubah master langsung tanpa review (auto-deploy ke production).
  • Jangan menjalankan job destruktif (housekeeping/delete) di luar jam sepi tanpa konfirmasi.
  • Jangan commit .env atau kredensial.