<?php
// CRONJOB: Rodar a cada 5 minutos no cPanel:
// */5 * * * * /usr/local/bin/php /home/geandrober/public_html/xtreamui/watchdog_cron.php

require_once 'config.php';
$pdo = getConexaoInterna();

$conf = $pdo->query("SELECT * FROM watchdog_config WHERE id = 1")->fetch(PDO::FETCH_ASSOC);
if (!$conf || $conf['status'] == 0) die("Watchdog pausado.");

// Busca os Load Balancers
$servidores = $pdo->query("SELECT * FROM servidores_lb WHERE status = 1")->fetchAll(PDO::FETCH_ASSOC);

foreach ($servidores as $s) {
    $ip = trim($s['ip_servidor']);
    $porta = !empty($s['porta']) ? $s['porta'] : 80;
    
    // Tenta acessar a página principal do LB para ver se o Nginx e o PHP estão vivos
    $url_check = "http://{$ip}:{$porta}/";
    
    $ch = curl_init($url_check);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 5 segundos de tolerância
    curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    // Se o HTTP code for 0, 500, 502 ou 504, o Nginx/PHP FPM caiu!
    if ($http_code == 0 || $http_code >= 500) {
        
        // Dispara a ordem de reinicialização para o script escravo no LB
        $url_reboot = "http://{$ip}:{$porta}/watchdog_lb.php?key=" . urlencode($conf['chave_seguranca']);
        
        $ch_rb = curl_init($url_reboot);
        curl_setopt($ch_rb, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch_rb, CURLOPT_TIMEOUT, 10);
        $res_reboot = curl_exec($ch_rb);
        curl_close($ch_rb);
        
        // Registra o log no painel
        $msg_log = "Falha detectada (HTTP $http_code). Comando de reinício enviado.";
        $pdo->prepare("INSERT INTO watchdog_logs (ip_servidor, acao) VALUES (?, ?)")->execute([$ip, $msg_log]);
        
        echo "FALHA no IP $ip. Reboot enviado.\n";
    } else {
        echo "IP $ip OK (HTTP $http_code).\n";
    }
}
?>
