#!/bin/bash set -e echo "🎯 Test Final des Messages de Synchronisation" echo "=============================================" echo "" # Configuration RELAY1_PORT=8090 RELAY2_PORT=8092 RELAY3_PORT=8094 # Fonction pour vérifier l'état de Bitcoin Core check_bitcoin_ready() { echo "₿ Vérification de Bitcoin Core :" echo "-------------------------------" local blockchain_info=$(docker exec bitcoin-signet bitcoin-cli -signet getblockchaininfo 2>/dev/null || echo "{}") local ibd=$(echo "$blockchain_info" | grep -o '"initialblockdownload":[^,]*' | cut -d':' -f2 | tr -d ' ') if [[ "$ibd" == "false" ]]; then echo " ✅ Bitcoin Core prêt (IBD terminé)" return 0 else echo " ⏳ Bitcoin Core encore en IBD" return 1 fi } # Fonction pour vérifier les logs de synchronisation récents check_recent_sync_logs() { local relay_num=$1 echo "📋 Relais $relay_num - Logs récents :" echo "-------------------------------------" # Chercher les messages de synchronisation dans les logs récents (dernières 2 minutes) local recent_logs=$(docker logs sdk_relay_$relay_num --since 2m 2>&1 | grep -E "(🧪|📊|🏥|📈|🔄|🎉|❌|Relay|Sync|Mesh|Topology|🔍|✅|discover|relay|message|process_sync_message|handle_sync_message|WebSocket|connection)" | tail -5) if [[ -n "$recent_logs" ]]; then echo "$recent_logs" else echo " Aucun message de synchronisation récent" fi echo "" } # Fonction pour tester la connectivité WebSocket test_websocket_connectivity() { echo "🌐 Test de connectivité WebSocket :" echo "-----------------------------------" for i in {1..3}; do local port=$((8090 + (i-1)*2)) echo "🔸 Relais $i (port $port) :" # Test de connectivité basique if curl -s --connect-timeout 5 http://localhost:$port >/dev/null 2>&1; then echo " ✅ Port accessible" else echo " ❌ Port non accessible" fi # Test de réponse WebSocket (simulation) local response=$(curl -s --connect-timeout 5 -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: test" http://localhost:$port 2>/dev/null || echo "No response") if [[ "$response" != "No response" ]]; then echo " ✅ WebSocket répond" else echo " ⚠️ Pas de réponse WebSocket (normal si pas de client)" fi done echo "" } # Fonction pour forcer l'échange de messages force_message_exchange() { echo "🔄 Forçage de l'échange de messages :" echo "-------------------------------------" # Redémarrer les relais pour forcer la synchronisation for i in {1..3}; do echo "🔄 Redémarrage du relais $i..." docker restart sdk_relay_$i sleep 3 done echo "⏳ Attente de stabilisation..." sleep 10 # Vérifier les logs après redémarrage echo "📋 Logs après redémarrage :" echo "---------------------------" for i in {1..3}; do check_recent_sync_logs $i done } # Fonction pour analyser les patterns de messages analyze_message_patterns() { echo "🔍 Analyse des patterns de messages :" echo "------------------------------------" for i in {1..3}; do echo "📊 Relais $i - Analyse des messages :" # Compter les types de messages dans les logs récents local total_messages=$(docker logs sdk_relay_$i --since 5m 2>&1 | grep -c "message" || echo "0") local sync_messages=$(docker logs sdk_relay_$i --since 5m 2>&1 | grep -c "Sync" || echo "0") local relay_messages=$(docker logs sdk_relay_$i --since 5m 2>&1 | grep -c "Relay" || echo "0") local mesh_messages=$(docker logs sdk_relay_$i --since 5m 2>&1 | grep -c "Mesh" || echo "0") local websocket_messages=$(docker logs sdk_relay_$i --since 5m 2>&1 | grep -c "WebSocket" || echo "0") echo " Total messages (5m): $total_messages" echo " Messages Sync: $sync_messages" echo " Messages Relay: $relay_messages" echo " Messages Mesh: $mesh_messages" echo " Messages WebSocket: $websocket_messages" echo "" done } # Fonction pour vérifier l'état des services check_services_status() { echo "🔍 État des services :" echo "--------------------" # Vérifier l'état des conteneurs echo "📦 Conteneurs Docker :" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep sdk_relay echo "" # Vérifier les ports echo "🌐 Ports ouverts :" netstat -tlnp | grep -E "(8090|8092|8094)" || echo " Aucun port trouvé" echo "" } # Fonction pour test en continu continuous_test() { echo "🔄 Test en continu..." echo "Appuyez sur Ctrl+C pour arrêter" echo "" while true; do clear echo "🎯 Test Final Continu - $(date)" echo "================================" echo "" # Vérifier l'état de Bitcoin Core check_bitcoin_ready || true # Vérifier l'état des services check_services_status # Vérifier les logs récents echo "📋 Logs récents de synchronisation :" echo "------------------------------------" for i in {1..3}; do check_recent_sync_logs $i done # Analyser les patterns analyze_message_patterns echo "🔄 Actualisation dans 30 secondes..." sleep 30 done } # Fonction principale main() { echo "🎯 Démarrage du test final..." echo "" # 1. Vérifier que Bitcoin Core est prêt if ! check_bitcoin_ready; then echo "❌ Bitcoin Core n'est pas encore prêt. Attendez qu'il termine l'IBD." exit 1 fi # 2. Vérifier l'état des services check_services_status # 3. Tester la connectivité WebSocket test_websocket_connectivity # 4. Vérifier les logs actuels echo "📋 Logs actuels des relais :" echo "----------------------------" for i in {1..3}; do check_recent_sync_logs $i done # 5. Analyser les patterns analyze_message_patterns echo "✅ Test final terminé" } # Menu principal case "${1:-test}" in "test") main ;; "continuous") continuous_test ;; "force") force_message_exchange ;; "status") check_bitcoin_ready || true check_services_status ;; *) echo "Usage: $0 [test|continuous|force|status]" echo " test : Test final unique" echo " continuous : Test en continu" echo " force : Forcer l'échange de messages" echo " status : Vérifier l'état des services" exit 1 ;; esac