4NK_node/test_final_sync.sh
Nicolas Cantu 72682290c1 feat: Ajout du support des relais externes et intégration dev3.4nkweb.com
- Ajout du script add_external_node.sh pour gérer les nœuds externes
- Configuration external_nodes.conf avec dev3-relay
- Scripts de test pour dev3.4nkweb.com (connectivité WSS)
- Documentation complète (CONFIGURATION_DEV3.md, RESUME_AJOUT_DEV3.md)
- Scripts de test de synchronisation et monitoring
- Configuration multi-relais avec 3 instances
- Mise à jour de la documentation technique et fonctionnelle
- Scripts de démarrage et monitoring pour les 3 relais
2025-08-22 17:00:31 +02:00

227 lines
6.7 KiB
Bash
Executable File

#!/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