# Supervisor Queue Worker - Troubleshooting

## ✅ Konfigurasi yang Benar

```ini
[program:whatsapp-queue]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/kejarkoding_com/artisan queue:work redis --queue=whatsapp --tries=3 --timeout=60 --sleep=3 --max-time=3600
directory=/var/www/html/kejarkoding_com
user=www-data
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/html/kejarkoding_com/storage/logs/whatsapp-queue.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stopwaitsecs=3600
```

## 🔧 Perbaikan yang Dilakukan

### 1. **Hapus `--backoff=3` dari command**
   - ❌ `--backoff=3` bukan parameter valid untuk `queue:work`
   - ✅ Backoff diatur di `config/whatsapp_queue.php` (array `retry_backoff`)

### 2. **Pindahkan `directory` ke baris terpisah**
   - ❌ `directory=/var/www/html/kejarkoding_com` di dalam `command`
   - ✅ `directory=/var/www/html/kejarkoding_com` sebagai baris terpisah

### 3. **Tambahkan parameter penting**
   - `--sleep=3` - Delay antara job (detik)
   - `--timeout=60` - Timeout per job (detik)
   - `--max-time=3600` - Restart worker setelah 1 jam (mencegah memory leak)

## 📋 Langkah Instalasi

### 1. Copy config ke supervisor

```bash
sudo cp docs/supervisor-whatsapp-queue-fixed.conf /etc/supervisor/conf.d/whatsapp-queue.conf
```

### 2. Pastikan log directory ada

```bash
sudo mkdir -p /var/www/html/kejarkoding_com/storage/logs
sudo chown -R www-data:www-data /var/www/html/kejarkoding_com/storage
sudo chmod -R 755 /var/www/html/kejarkoding_com/storage
```

### 3. Reload supervisor

```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start whatsapp-queue:*
```

### 4. Cek status

```bash
sudo supervisorctl status whatsapp-queue:*
```

Harus muncul:
```
whatsapp-queue:whatsapp-queue_00    RUNNING   pid 12345, uptime 0:00:05
whatsapp-queue:whatsapp-queue_01    RUNNING   pid 12346, uptime 0:00:05
```

## 🐛 Troubleshooting "spawn error"

### Error 1: "spawn error" - Path salah

**Cek path PHP:**
```bash
which php
# Output: /usr/bin/php (atau path lain)
```

**Cek path artisan:**
```bash
ls -la /var/www/html/kejarkoding_com/artisan
# Harus ada file artisan
```

**Perbaiki di config:**
```ini
command=/usr/bin/php /var/www/html/kejarkoding_com/artisan queue:work ...
```

### Error 2: "spawn error" - Permission denied

**Cek ownership:**
```bash
ls -la /var/www/html/kejarkoding_com/artisan
```

**Perbaiki:**
```bash
sudo chown -R www-data:www-data /var/www/html/kejarkoding_com
sudo chmod +x /var/www/html/kejarkoding_com/artisan
```

### Error 3: "spawn error" - User tidak ada

**Cek user:**
```bash
id www-data
# Output: uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

**Jika user berbeda (misal `nginx` atau `apache`):**
```ini
user=nginx  # atau apache, sesuai web server Anda
```

### Error 4: "spawn error" - Log directory tidak ada

**Buat directory:**
```bash
sudo mkdir -p /var/www/html/kejarkoding_com/storage/logs
sudo chown -R www-data:www-data /var/www/html/kejarkoding_com/storage/logs
sudo chmod -R 755 /var/www/html/kejarkoding_com/storage/logs
```

### Error 5: "spawn error" - Redis connection

**Test Redis:**
```bash
php /var/www/html/kejarkoding_com/artisan queue:work redis --queue=whatsapp --once
```

**Cek `.env`:**
```env
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
```

## 📊 Monitoring

### View logs

```bash
# Real-time log
sudo tail -f /var/www/html/kejarkoding_com/storage/logs/whatsapp-queue.log

# Last 100 lines
sudo tail -n 100 /var/www/html/kejarkoding_com/storage/logs/whatsapp-queue.log
```

### Check queue status

```bash
# Via artisan
php artisan queue:monitor whatsapp

# Via supervisor
sudo supervisorctl status whatsapp-queue:*

# Via Redis (jika pakai Redis)
redis-cli LLEN queues:whatsapp
```

### Restart workers

```bash
# Restart semua
sudo supervisorctl restart whatsapp-queue:*

# Restart satu process
sudo supervisorctl restart whatsapp-queue:whatsapp-queue_00
```

## 🔄 Update Config

Setelah mengubah config supervisor:

```bash
# 1. Reread config
sudo supervisorctl reread

# 2. Update (restart affected programs)
sudo supervisorctl update

# 3. Start jika belum running
sudo supervisorctl start whatsapp-queue:*
```

## ⚠️ Catatan Penting

1. **Backoff diatur di Laravel config**, bukan di supervisor command
   - File: `config/whatsapp_queue.php`
   - Key: `queue.retry_backoff` (array: `[30, 60, 120]`)

2. **Queue name harus sesuai** dengan yang digunakan di code:
   - Config: `config('whatsapp_queue.queue.name', 'whatsapp')`
   - Command: `--queue=whatsapp`

3. **Redis connection** harus sudah dikonfigurasi:
   - `.env`: `QUEUE_CONNECTION=redis`
   - Redis server harus running

4. **Multiple processes** (`numprocs=2`) berarti 2 worker berjalan bersamaan
   - Rate limit 60/menit/WABA tetap berlaku
   - Setiap worker akan cek rate limit sebelum kirim

## 🧪 Test Manual

Test queue worker secara manual:

```bash
cd /var/www/html/kejarkoding_com
php artisan queue:work redis --queue=whatsapp --tries=3 --timeout=60 --sleep=3 --once
```

Jika berhasil, supervisor config juga akan berhasil.
