From e198f1e3eebdcd118b335f44a4f2d5f00eb8c75b Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Tue, 3 Feb 2026 16:28:01 +0100 Subject: [PATCH] tet --- consoleMonitor.js | 70 +++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 48 deletions(-) diff --git a/consoleMonitor.js b/consoleMonitor.js index 43b810a..87cc0b1 100644 --- a/consoleMonitor.js +++ b/consoleMonitor.js @@ -306,11 +306,7 @@ const connectWebSocket = async (pterodactylToken, serverId) => { })); }); - // Handler pour le pong WebSocket natif - ws.on('pong', () => { - lastHeartbeatResponse = Date.now(); - console.log('🏓 [WEBSOCKET] Pong reçu - connexion OK'); - }); + // Pas besoin de handler 'pong' - on vérifie l'accès aux logs directement ws.on('message', async (data) => { @@ -331,65 +327,43 @@ const connectWebSocket = async (pterodactylToken, serverId) => { if (heartbeatTimeout) clearTimeout(heartbeatTimeout); lastHeartbeatResponse = Date.now(); - let missedHeartbeats = 0; - const MAX_MISSED_HEARTBEATS = 2; // 2 heartbeats manqués = reconnexion heartbeatInterval = setInterval(() => { if (ws && ws.readyState === WebSocket.OPEN) { try { - const timeSinceLastResponse = Date.now() - lastHeartbeatResponse; + const timeSinceLastLog = Date.now() - lastHeartbeatResponse; - // Si on a pas eu de réponse depuis plus de 30s, incrémenter le compteur - if (timeSinceLastResponse > 30000) { - missedHeartbeats++; - console.warn(`⚠️ [WEBSOCKET] Heartbeat manqué (${missedHeartbeats}/${MAX_MISSED_HEARTBEATS}). Dernière réponse: ${Math.round(timeSinceLastResponse/1000)}s`); - - if (missedHeartbeats >= MAX_MISSED_HEARTBEATS) { - console.error('💔 [WEBSOCKET] Trop de heartbeats manqués! Reconnexion forcée...'); - if (ws) { - ws.terminate(); // Fermeture immédiate sans attendre - } - return; - } - } else { - // Reset le compteur si on a reçu une réponse récemment - if (missedHeartbeats > 0) { - console.log('✅ [WEBSOCKET] Heartbeat de retour à la normale'); - missedHeartbeats = 0; + // Si on n'a pas reçu de log depuis plus de 40s, c'est que l'accès aux logs est perdu + if (timeSinceLastLog > 40000) { + console.error(`💔 [WEBSOCKET] Aucun log reçu depuis ${Math.round(timeSinceLastLog/1000)}s - accès aux logs perdu! Reconnexion forcée...`); + if (ws) { + ws.terminate(); // Fermeture immédiate sans attendre } + return; } - // Envoyer le heartbeat - ws.send(JSON.stringify({ event: 'send heartbeat', args: [] })); - console.log('💓 [WEBSOCKET] Heartbeat envoyé'); - - // Aussi envoyer un ping WebSocket natif pour vérifier la connexion TCP - if (ws.ping) { - ws.ping(); - console.log('🏓 [WEBSOCKET] Ping natif envoyé'); - } + // Redemander l'accès aux logs pour s'assurer qu'on les reçoit toujours + ws.send(JSON.stringify({ + event: 'send logs', + args: [null] + })); + console.log(`📡 [WEBSOCKET] Vérification accès aux logs (dernier reçu: ${Math.round(timeSinceLastLog/1000)}s)`); } catch (error) { - console.error('❌ [WEBSOCKET] Erreur lors de l\'envoi du heartbeat:', error.message); - missedHeartbeats++; - if (missedHeartbeats >= MAX_MISSED_HEARTBEATS && ws) { - console.error('💔 [WEBSOCKET] Erreurs répétées, reconnexion forcée...'); + console.error('❌ [WEBSOCKET] Erreur lors de la vérification des logs:', error.message); + if (ws) { ws.terminate(); } } } else { - console.warn('⚠️ [WEBSOCKET] Heartbeat impossible: WebSocket non ouvert (état:', ws ? ws.readyState : 'null', ')'); - missedHeartbeats++; - if (missedHeartbeats >= MAX_MISSED_HEARTBEATS) { - console.error('💔 [WEBSOCKET] WebSocket fermé, nettoyage...'); - if (heartbeatInterval) { - clearInterval(heartbeatInterval); - heartbeatInterval = null; - } + console.warn('⚠️ [WEBSOCKET] Vérification impossible: WebSocket non ouvert (état:', ws ? ws.readyState : 'null', ')'); + if (heartbeatInterval) { + clearInterval(heartbeatInterval); + heartbeatInterval = null; } } - }, 20000); // Vérifier toutes les 20s au lieu de 30s - console.log('💓 [WEBSOCKET] Heartbeat configuré (20s, max 2 manqués)'); + }, 20000); // Vérifier toutes les 20s + console.log('📡 [WEBSOCKET] Vérification d\'accès aux logs configurée (20s, timeout 40s)'); } // Détecter les réponses du serveur (console output, status, etc) pour mettre à jour le lastHeartbeatResponse