#!/bin/bash
# Aumenta il pool PHP 8.3 FPM (pool www) per VTE multi-istanza su vtenext.
# Problema: pm.max_children=5 satura con vte2472 + vte_dev + barton + smau + YeastarCTI poll.
#
# Esecuzione (richiede root):
#   sudo bash /var/www/html/server-ops/mypantarei/apply-php83-fpm-pool-vte-performance.sh
#
# Variabili opzionali:
#   PM_MAX_CHILDREN=20 PM_START_SERVERS=5 PM_MIN_SPARE=3 PM_MAX_SPARE=10

set -euo pipefail

POOL_FILE="/etc/php/8.3/fpm/pool.d/www.conf"
SERVICE="php8.3-fpm"
MASTER_PID_FILE="/run/php/php8.3-fpm.pid"

PM_MAX_CHILDREN="${PM_MAX_CHILDREN:-20}"
PM_START_SERVERS="${PM_START_SERVERS:-5}"
PM_MIN_SPARE="${PM_MIN_SPARE:-3}"
PM_MAX_SPARE="${PM_MAX_SPARE:-10}"

if [[ "${EUID:-0}" -ne 0 ]]; then
	echo "Esegui come root: sudo bash $0" >&2
	exit 1
fi

if [[ ! -f "$POOL_FILE" ]]; then
	echo "File pool non trovato: $POOL_FILE" >&2
	exit 1
fi

ts="$(date +%Y%m%d-%H%M%S)"
backup="${POOL_FILE}.bak-${ts}"
cp -a "$POOL_FILE" "$backup"
echo "[OK] Backup: $backup"

echo "--- Valori attuali ---"
grep -E '^pm\.(max_children|start_servers|min_spare_servers|max_spare_servers)' "$POOL_FILE" || true

set_pm() {
	local key="$1"
	local val="$2"
	if grep -qE "^${key} =" "$POOL_FILE"; then
		sed -i "s/^${key} = .*/${key} = ${val}/" "$POOL_FILE"
	else
		echo "${key} = ${val}" >> "$POOL_FILE"
	fi
}

set_pm "pm.max_children" "$PM_MAX_CHILDREN"
set_pm "pm.start_servers" "$PM_START_SERVERS"
set_pm "pm.min_spare_servers" "$PM_MIN_SPARE"
set_pm "pm.max_spare_servers" "$PM_MAX_SPARE"

if ! grep -q 'Pantarei VTE performance pool' "$POOL_FILE"; then
	sed -i "/^pm.max_children = ${PM_MAX_CHILDREN}/i ; Pantarei VTE performance pool (apply-php83-fpm-pool-vte-performance.sh ${ts})" "$POOL_FILE"
fi

echo "--- Valori nuovi ---"
grep -E '^pm\.(max_children|start_servers|min_spare_servers|max_spare_servers)' "$POOL_FILE" || true

echo "[..] Test configurazione FPM..."
php-fpm8.3 -t

echo "[..] Reload ${SERVICE}..."
systemctl reload "$SERVICE"

sleep 1

master_pid=""
if [[ -f "$MASTER_PID_FILE" ]]; then
	master_pid="$(cat "$MASTER_PID_FILE" 2>/dev/null || true)"
fi

workers_83=0
if [[ -n "$master_pid" ]]; then
	workers_83="$(ps -o pid= --ppid "$master_pid" 2>/dev/null | wc -l | tr -d ' ')"
fi

echo ""
echo "[OK] Pool PHP 8.3 aggiornato e ricaricato."
echo "     pm.max_children = ${PM_MAX_CHILDREN}"
echo "     Worker attivi pool 8.3: ${workers_83} (max ${PM_MAX_CHILDREN})"
echo "     Rollback: sudo cp -a ${backup} ${POOL_FILE} && sudo systemctl reload ${SERVICE}"
