# Guide Ubuntu Supervisor Queue Worker AHSP

Panduan ini untuk server Ubuntu AHSP agar proses queue berjalan otomatis 24/7 tanpa perlu menjalankan command manual dari terminal.

## Tujuan

- Worker `default` menangani job umum, termasuk proses Penggajian background.
- Worker `attendance-review` menangani job Attendance Review seperti `Run Detect` dan `Rebuild Planning`.
- Timeout dibuat panjang (`7200` detik) supaya proses besar, misalnya 2000 karyawan, tidak berhenti di tengah.
- Supervisor menjaga worker tetap hidup dan otomatis restart kalau proses mati atau server reboot.

## File Yang Diedit Di Server

File Supervisor:

```bash
sudo nano /etc/supervisor/conf.d/ahsp-queue.conf
```

Jika ada config lama yang masih memakai:

```bash
php /var/www/html/AHSP/artisan queue:work --sleep=1 --tries=3 --timeout=120
```

comment atau hapus program lama tersebut agar tidak dobel worker.

## Isi Config Supervisor

```ini
[program:ahsp-worker-default]
command=/usr/bin/php /var/www/html/AHSP/artisan queue:work --queue=default --sleep=1 --tries=1 --timeout=7200
directory=/var/www/html/AHSP
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/html/AHSP/storage/logs/worker-default.log
stopwaitsecs=7300

[program:ahsp-worker-attendance]
command=/usr/bin/php /var/www/html/AHSP/artisan queue:work --queue=attendance-review --sleep=1 --tries=1 --timeout=7200
directory=/var/www/html/AHSP
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/html/AHSP/storage/logs/worker-attendance.log
stopwaitsecs=7300
```

Catatan:

- `--queue=default` dipakai untuk job umum.
- `--queue=attendance-review` dipakai khusus Attendance Review.
- `--tries=1` dipakai supaya job besar tidak diulang otomatis berkali-kali tanpa investigasi.
- `stopwaitsecs=7300` harus lebih besar dari timeout worker.

## ENV Laravel

Jika `QUEUE_CONNECTION=database`, set retry after lebih besar dari timeout:

```dotenv
QUEUE_CONNECTION=database
DB_QUEUE_RETRY_AFTER=7300
```

Setelah ubah `.env`, jalankan:

```bash
cd /var/www/html/AHSP
php artisan config:clear
php artisan config:cache
```

## Apply Dan Restart Supervisor

```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart ahsp-worker-default:*
sudo supervisorctl restart ahsp-worker-attendance:*
sudo supervisorctl status
```

Status yang diharapkan:

```text
ahsp-worker-default     RUNNING
ahsp-worker-attendance  RUNNING
```

## Verifikasi

Cek proses:

```bash
pgrep -af "artisan (queue:work|horizon)"
```

Cek log:

```bash
tail -f /var/www/html/AHSP/storage/logs/worker-default.log
tail -f /var/www/html/AHSP/storage/logs/worker-attendance.log
```

Cek dari aplikasi:

- Buka `Setting > Status Server`.
- Bagian `Queue Worker (Supervisor)` harus `OK`.
- Sample command sebaiknya menampilkan `--timeout=7200`.

## Alternatif Satu Worker Gabungan

Jika server kecil dan ingin satu worker saja:

```bash
php /var/www/html/AHSP/artisan queue:work --queue=attendance-review,default --sleep=1 --tries=1 --timeout=7200
```

Namun untuk produksi AHSP lebih disarankan dua program Supervisor agar proses Attendance Review yang panjang tidak menahan job umum.

## Troubleshooting

- Jika status Supervisor `FATAL`, cek path PHP dengan `which php`, lalu sesuaikan `command=/usr/bin/php`.
- Jika log tidak bisa ditulis, jalankan `sudo chown -R www-data:www-data /var/www/html/AHSP/storage /var/www/html/AHSP/bootstrap/cache`.
- Jika job tetap pending, pastikan `QUEUE_CONNECTION` bukan `sync`, lalu jalankan `php artisan config:cache`.
- Jika setelah update kode job memakai class lama, jalankan `sudo supervisorctl restart ahsp-worker-default:* ahsp-worker-attendance:*`.

## Otomatis Setelah Update Code

Untuk refresh cache production dan restart service secara otomatis setelah deploy, gunakan script:

```bash
cd /var/www/html/AHSP
chmod +x scripts/ubuntu_production_refresh.sh
./scripts/ubuntu_production_refresh.sh
```

Panduan lengkap ada di:

```text
docs/ubuntu-production-refresh-auto-guide.md
```
