#!/usr/bin/env node // Serveur WebSocket simple pour recevoir les logs temps réel const WebSocket = require('ws'); const port = 8082; // Créer le serveur WebSocket const wss = new WebSocket.Server({ port: port }); console.log(`🚀 Serveur WebSocket démarré sur le port ${port}`); console.log(`📡 En attente de connexions...`); // Garder trace des clients connectés const clients = new Set(); wss.on('connection', function connection(ws) { console.log('✅ Nouveau client connecté'); clients.add(ws); // Envoyer un message de bienvenue const welcomeMessage = { timestamp: new Date().toISOString(), level: 'INFO', message: '🎉 Connexion WebSocket établie - Logs en temps réel actifs' }; ws.send(JSON.stringify(welcomeMessage)); // Gérer les messages du client (si nécessaire) ws.on('message', function incoming(data) { try { const message = JSON.parse(data); console.log('📨 Message reçu:', message); // DIFFUSER LE LOG À TOUS LES CLIENTS CONNECTÉS ! broadcastLog(message); } catch (error) { console.log('📨 Message reçu (brut):', data.toString()); } }); // Nettoyer quand le client se déconnecte ws.on('close', function close() { console.log('❌ Client déconnecté'); clients.delete(ws); }); // Gérer les erreurs ws.on('error', function error(err) { console.log('❌ Erreur WebSocket:', err.message); clients.delete(ws); }); }); // Fonction pour diffuser un log à tous les clients connectés function broadcastLog(logData) { const message = JSON.stringify(logData); let sentCount = 0; clients.forEach(ws => { if (ws.readyState === WebSocket.OPEN) { try { ws.send(message); sentCount++; } catch (error) { console.log('❌ Erreur envoi vers client:', error.message); clients.delete(ws); } } else { // Nettoyer les connexions fermées clients.delete(ws); } }); if (sentCount > 0) { console.log(`📡 Log diffusé à ${sentCount} client(s): [${logData.level}] ${logData.message.substring(0, 50)}${logData.message.length > 50 ? '...' : ''}`); } } // Export pour utilisation dans d'autres modules if (typeof module !== 'undefined' && module.exports) { module.exports = { broadcastLog, wss, clients }; } // Gérer l'arrêt propre process.on('SIGINT', () => { console.log('\n🛑 Arrêt du serveur WebSocket...'); // Fermer toutes les connexions clients.forEach(ws => { if (ws.readyState === WebSocket.OPEN) { ws.close(); } }); // Fermer le serveur wss.close(() => { console.log('✅ Serveur WebSocket arrêté'); process.exit(0); }); }); // Message de test toutes les 30 secondes pour vérifier que ça marche setInterval(() => { if (clients.size > 0) { const testMessage = { timestamp: new Date().toISOString(), level: 'DEBUG', message: `💓 Heartbeat - ${clients.size} client(s) connecté(s)` }; broadcastLog(testMessage); } }, 30000);