##############################################################
# GMLM Platform — Supervisor Configuration
# Manages all long-running processes within the container.
#
# Processes:
#   nginx      — Web server
#   php-fpm    — PHP process manager
#   horizon    — Laravel Horizon (queue workers with Redis)
#   scheduler  — Laravel scheduler (runs every minute)
##############################################################

[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
loglevel=info
childlogdir=/var/log/supervisor

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

# ── Nginx ────────────────────────────────────────────────────
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=5
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/var/log/supervisor/nginx-stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile=/var/log/supervisor/nginx-stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
priority=10

# ── PHP-FPM ──────────────────────────────────────────────────
[program:php-fpm]
command=/usr/local/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=5
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/var/log/supervisor/php-fpm-stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile=/var/log/supervisor/php-fpm-stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
priority=20

# ── Laravel Horizon (Queue Workers) ──────────────────────────
# Horizon manages multiple queue workers with Redis.
# It auto-scales workers based on queue depth.
# The critical, high, and default queues are monitored.
[program:horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan horizon
directory=/var/www/html
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=10
user=www-data
stopwaitsecs=3600
; Allow Horizon to gracefully finish its current job before stopping.
; Set to the longest expected job runtime + buffer.
killasgroup=false
stopasgroup=false
stdout_logfile=/var/log/supervisor/horizon-stdout.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stderr_logfile=/var/log/supervisor/horizon-stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
priority=30
environment=APP_ENV="%(ENV_APP_ENV)s"

# ── Laravel Scheduler ────────────────────────────────────────
# Runs "php artisan schedule:run" every 60 seconds.
# Replaces the traditional cron entry:
#   * * * * * php /var/www/html/artisan schedule:run >> /dev/null 2>&1
[program:scheduler]
process_name=%(program_name)s
command=/bin/sh -c "while true; do php /var/www/html/artisan schedule:run --no-interaction >> /var/log/supervisor/scheduler.log 2>&1; sleep 60; done"
directory=/var/www/html
autostart=true
autorestart=true
startretries=5
numprocs=1
user=www-data
stdout_logfile=/var/log/supervisor/scheduler.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile=/var/log/supervisor/scheduler-stderr.log
stderr_logfile_maxbytes=5MB
priority=40
