#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

LOCK_FILE="/tmp/worker_scaler.lock"

if [ -f "$LOCK_FILE" ]; then
    exit 0
fi

trap "rm -f $LOCK_FILE" EXIT
touch $LOCK_FILE

MAX_WORKERS=15
MIN_WORKERS=1

CPU_THRESHOLD_HIGH=75
CPU_THRESHOLD_LOW=10

WORKER_CMD="/usr/bin/php7.4 /var/www/html/yii cron-process-queue"

get_worker_count() {
    pgrep -fc "$WORKER_CMD"
}

get_cpu_usage() {
    top -bn1 | awk '/Cpu/ {print 100 - $8}'
}

CURRENT_WORKERS=$(get_worker_count)
CPU=$(get_cpu_usage | cut -d'.' -f1)

echo "CPU: $CPU%, Workers: $CURRENT_WORKERS"

# Scale UP
if [ "$CPU" -lt "$CPU_THRESHOLD_LOW" ] && [ "$CURRENT_WORKERS" -lt "$MAX_WORKERS" ]; then
    echo "Scaling UP..."
    nohup $WORKER_CMD > /dev/null 2>&1 &
fi

# Scale DOWN
if [ "$CPU" -gt "$CPU_THRESHOLD_HIGH" ] && [ "$CURRENT_WORKERS" -gt "$MIN_WORKERS" ]; then
    echo "Scaling DOWN..."
    pkill -f "$WORKER_CMD" -n
fi
