$stale_minutes && $hostname !== 'blade') { // Agent is truly stale (not a server-side heartbeat) $msg = "⚠️ BLADE AGENT STALE\nLast: {$age_min}min ago\nHost: {$hostname}\nIP: {$ip}\nAction: Restart sentinel-agent.ps1"; // Log file_put_contents($log, date('Y-m-d H:i:s')." STALE {$age_min}min - {$hostname}\n", FILE_APPEND); // Try Telegram alert (only once per hour) $alert_file = '/tmp/blade-alert-sent'; $last_alert = @filemtime($alert_file); if (!$last_alert || (time() - $last_alert) > 3600) { $tg_token = 'AAGsMH_M7Qdmf4sL5Iq7Ohe_P5c4_Pv-eTg'; $tg_chat = ''; // Will try to get from blade-telegram.php // For now just log file_put_contents($log, date('Y-m-d H:i:s')." ALERT SENT: $msg\n", FILE_APPEND); touch($alert_file); } } else { // Agent OK or recently pinged if ($age_min <= $stale_minutes) { file_put_contents($log, date('Y-m-d H:i:s')." OK ({$age_min}min) {$hostname} {$ip}\n", FILE_APPEND); } }