Background Jobs
PUGUH menyediakan managed job queue untuk pemrosesan asinkron, tugas terjadwal, dan pengiriman yang andal dengan dukungan dead letter queue.
Ringkasan
Background jobs menangani pekerjaan yang tidak seharusnya memblokir response API:
- Pengiriman email — email selamat datang, reset password, undangan
- Pengiriman webhook — mengirim notifikasi event ke endpoint
- Pemrosesan gambar — membuat thumbnail dan varian setelah upload
- Ekspor data — ekspor GDPR, download data massal
- Tugas terjadwal — pekerjaan berulang berbasis cron
- Pembersihan — menghapus token kadaluarsa, record yang di-soft-delete
Tipe Job
System Jobs
Job ini berjalan otomatis sebagai bagian infrastruktur PUGUH:
| Job | Trigger | Deskripsi |
|---|---|---|
email.send | Aksi pengguna | Mengirim email transaksional |
webhook.deliver | Event | Mengirim payload webhook |
storage.process | Upload file | Membuat varian gambar |
export.generate | Request API | Membuat file ekspor data |
audit.stream | Event audit | Meneruskan event ke tujuan streaming |
Scheduled Jobs (Cron)
Pekerjaan berulang yang dikelola melalui scheduling API:
| Job | Jadwal Default | Deskripsi |
|---|---|---|
token.cleanup | Setiap jam | Menghapus refresh token kadaluarsa |
session.cleanup | Setiap 6 jam | Membersihkan sesi kadaluarsa |
softdelete.purge | Harian pukul 03:00 | Hard-delete record yang melewati retensi |
usage.aggregate | Setiap jam | Mengagregasi metrik penggunaan untuk billing |
invoice.generate | Tanggal 1 setiap bulan | Membuat invoice bulanan |
Melihat Jobs
Daftar Jobs
curl https://api-puguh.arsaka.io/jobs?status=running&page=1 \
-H "Authorization: Bearer YOUR_TOKEN" Response:
{
"items": [
{
"id": "job_abc123",
"type": "email.send",
"status": "completed",
"payload": {"to": "user@example.com", "template": "welcome"},
"created_at": "2026-02-20T10:00:00Z",
"started_at": "2026-02-20T10:00:01Z",
"completed_at": "2026-02-20T10:00:03Z",
"attempts": 1
}
],
"total": 1523,
"page": 1,
"page_size": 20,
"has_next": true,
"has_prev": false
} Status Job
| Status | Deskripsi |
|---|---|
pending | Dalam antrian, menunggu diproses |
running | Sedang diproses |
completed | Berhasil diselesaikan |
failed | Gagal setelah semua percobaan retry |
dead | Dipindahkan ke dead letter queue |
Dead Letter Queue (DLQ)
Job yang gagal setelah semua percobaan retry dipindahkan ke DLQ untuk inspeksi manual.
Lihat DLQ
curl https://api-puguh.arsaka.io/jobs/dlq \
-H "Authorization: Bearer YOUR_TOKEN" Retry Job DLQ
curl -X POST https://api-puguh.arsaka.io/jobs/dlq/job_xyz/retry \
-H "Authorization: Bearer YOUR_TOKEN" Job dipindahkan kembali ke antrian pending untuk diproses ulang.
Purge DLQ
curl -X POST https://api-puguh.arsaka.io/jobs/dlq/purge \
-H "Authorization: Bearer YOUR_TOKEN" Peringatan
Melakukan purge DLQ akan menghapus semua dead jobs secara permanen. Tindakan ini tidak dapat dibatalkan.
Jadwal Job
Buat jadwal cron kustom untuk tugas berulang:
Membuat Jadwal
curl -X POST https://api-puguh.arsaka.io/jobs/schedules \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"name": "Daily usage report",
"cron_expression": "0 8 * * *",
"job_type": "export.generate",
"payload": {"type": "usage", "format": "csv"},
"is_active": true
}' Sintaks Cron
| Field | Nilai | Contoh |
|---|---|---|
| Menit | 0-59 | 0 (pada menit 0) |
| Jam | 0-23 | 8 (pada pukul 08:00) |
| Tanggal | 1-31 | * (setiap hari) |
| Bulan | 1-12 | * (setiap bulan) |
| Hari dalam minggu | 0-6 | 1-5 (Sen-Jum) |
Daftar Jadwal
curl https://api-puguh.arsaka.io/jobs/schedules \
-H "Authorization: Bearer YOUR_TOKEN" Memperbarui Jadwal
curl -X PATCH https://api-puguh.arsaka.io/jobs/schedules/sched_abc \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"is_active": false}' Menghapus Jadwal
curl -X DELETE https://api-puguh.arsaka.io/jobs/schedules/sched_abc \
-H "Authorization: Bearer YOUR_TOKEN" Kebijakan Retry
Job yang gagal akan di-retry secara otomatis dengan exponential backoff:
Attempt 1: immediate
Attempt 2: after 30 seconds
Attempt 3: after 2 minutes
Attempt 4: after 10 minutes
Attempt 5: after 1 hour
→ If all fail: moved to DLQ Batas per Paket
| Paket | Maks Concurrent | Jadwal | Retensi DLQ |
|---|---|---|---|
| Free | 5 | 3 | 7 hari |
| Pro | 25 | 10 | 30 hari |
| Business | 100 | 50 | 90 hari |
| Enterprise | Custom | Custom | Custom |
Monitoring
Metrik job tersedia di dashboard PUGUH:
- Throughput: Job yang diproses per menit
- Error rate: Persentase job yang gagal
- Queue depth: Jumlah job dalam antrian
- Ukuran DLQ: Jumlah dead jobs
- Latensi rata-rata: Waktu dari masuk antrian hingga selesai