**Motivations:** - Synchronisation des modifications sur l'API anchorage, les services et le website skeleton - Ajout de scripts de monitoring et de diagnostic pour l'API anchorage - Documentation des problèmes de mutex et de provisioning UTXO **Root causes:** - N/A (commit de synchronisation) **Correctifs:** - N/A (commit de synchronisation) **Evolutions:** - Ajout de scripts de monitoring et de diagnostic pour l'API anchorage - Amélioration de la gestion des mutex et des UTXOs - Mise à jour de la documentation **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js - api-anchorage/src/routes/anchor.js - api-anchorage/src/routes/health.js - api-anchorage/src/server.js - api-anchorage/README-MONITORING.md - api-anchorage/cleanup-stale-locks.mjs - api-anchorage/diagnose.mjs - api-anchorage/unlock-utxos.mjs - service-login-verify/src/persistentNonceCache.ts - signet-dashboard/src/server.js - signet-dashboard/public/* - userwallet/src/hooks/useChannel.ts - userwallet/src/services/relayNotificationService.ts - userwallet/src/utils/defaultContract.ts - website-skeleton/src/* - docs/DOMAINS_AND_PORTS.md - docs/INTERFACES.md - features/* - fixKnowledge/*
144 lines
5.2 KiB
Bash
Executable File
144 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script de diagnostic pour l'API d'Ancrage
|
|
# Vérifie l'état du service, la connectivité et les logs
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
echo "=== Diagnostic API d'Ancrage ==="
|
|
echo ""
|
|
|
|
# Configuration
|
|
BITCOIN_SERVER="192.168.1.105" # Machine bitcoin avec API d'ancrage
|
|
PROD_SERVER="192.168.1.103" # Machine prod (pour référence)
|
|
PROD_USER="ncantu"
|
|
PROXY_SERVER="4nk.myftp.biz"
|
|
API_URL="https://anchorage.certificator.4nkweb.com" # Domaine externe de l'API d'ancrage Bitcoin
|
|
SERVICE_NAME="anchorage-api"
|
|
PORT=3010
|
|
|
|
# Fonction pour exécuter une commande sur le serveur bitcoin (API d'ancrage)
|
|
run_on_bitcoin() {
|
|
ssh -J "${PROD_USER}@${PROXY_SERVER}" "${PROD_USER}@${BITCOIN_SERVER}" "$@"
|
|
}
|
|
|
|
echo "📡 Test de connectivité externe..."
|
|
echo ""
|
|
|
|
# Test 1: Vérifier que l'API répond depuis l'extérieur
|
|
echo "1. Test de l'endpoint /health depuis l'extérieur..."
|
|
HEALTH_RESPONSE=$(curl -s --max-time 10 "${API_URL}/health" || echo "FAILED")
|
|
if [ "$HEALTH_RESPONSE" = "FAILED" ]; then
|
|
echo "❌ L'API ne répond pas depuis l'extérieur"
|
|
echo ""
|
|
else
|
|
echo "✅ L'API répond depuis l'extérieur"
|
|
echo " Réponse: $HEALTH_RESPONSE"
|
|
echo ""
|
|
|
|
# Vérifier si la connexion Bitcoin fonctionne
|
|
if echo "$HEALTH_RESPONSE" | grep -q '"connected":true'; then
|
|
echo "✅ Connexion Bitcoin: OK"
|
|
BLOCKS=$(echo "$HEALTH_RESPONSE" | grep -o '"blocks":[0-9]*' | grep -o '[0-9]*' || echo "0")
|
|
echo " Blocs: $BLOCKS"
|
|
else
|
|
echo "⚠️ Connexion Bitcoin: PROBLÈME"
|
|
echo " L'API répond mais ne peut pas se connecter à Bitcoin Core"
|
|
fi
|
|
echo ""
|
|
fi
|
|
|
|
# Test 2: Vérifier l'endpoint racine
|
|
echo "2. Test de l'endpoint racine..."
|
|
ROOT_RESPONSE=$(curl -s --max-time 10 "${API_URL}/" || echo "FAILED")
|
|
if [ "$ROOT_RESPONSE" = "FAILED" ]; then
|
|
echo "❌ L'endpoint racine ne répond pas"
|
|
else
|
|
echo "✅ L'endpoint racine répond"
|
|
echo " Réponse: $ROOT_RESPONSE"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 3: Vérifier l'état du service sur le serveur bitcoin
|
|
echo "3. État du service systemd sur le serveur bitcoin (192.168.1.105)..."
|
|
echo " (Connexion via SSH via proxy...)"
|
|
echo ""
|
|
|
|
SERVICE_STATUS=$(run_on_bitcoin "sudo systemctl status ${SERVICE_NAME} --no-pager" 2>&1 || echo "FAILED")
|
|
if echo "$SERVICE_STATUS" | grep -q "Active: active (running)"; then
|
|
echo "✅ Service actif et en cours d'exécution"
|
|
elif echo "$SERVICE_STATUS" | grep -q "Active: inactive"; then
|
|
echo "❌ Service inactif"
|
|
elif echo "$SERVICE_STATUS" | grep -q "Active: failed"; then
|
|
echo "❌ Service en échec"
|
|
else
|
|
echo "⚠️ État du service indéterminé"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 4: Vérifier que le port est en écoute
|
|
echo "4. Vérification du port ${PORT}..."
|
|
PORT_CHECK=$(run_on_bitcoin "sudo ss -tlnp | grep :${PORT}" 2>&1 || echo "NOT_LISTENING")
|
|
if [ "$PORT_CHECK" = "NOT_LISTENING" ] || [ -z "$PORT_CHECK" ]; then
|
|
echo "❌ Le port ${PORT} n'est pas en écoute"
|
|
else
|
|
echo "✅ Le port ${PORT} est en écoute"
|
|
echo " $PORT_CHECK"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 5: Vérifier les logs récents (dernières 50 lignes)
|
|
echo "5. Logs récents du service (dernières 50 lignes)..."
|
|
echo ""
|
|
run_on_bitcoin "sudo journalctl -u ${SERVICE_NAME} -n 50 --no-pager" 2>&1 | tail -50
|
|
echo ""
|
|
|
|
# Test 6: Vérifier les logs d'erreur récents
|
|
echo "6. Logs d'erreur récents (dernières 20 lignes)..."
|
|
echo ""
|
|
run_on_bitcoin "sudo journalctl -u ${SERVICE_NAME} -p err -n 20 --no-pager" 2>&1 | tail -20
|
|
echo ""
|
|
|
|
# Test 7: Vérifier la connexion Bitcoin RPC depuis le serveur bitcoin
|
|
echo "7. Test de connexion Bitcoin RPC depuis le serveur bitcoin..."
|
|
echo ""
|
|
BITCOIN_RPC_TEST=$(run_on_bitcoin "curl -s --user bitcoin:bitcoin --data-binary '{\"jsonrpc\":\"1.0\",\"id\":\"test\",\"method\":\"getblockchaininfo\",\"params\":[]}' -H 'content-type: text/plain;' http://localhost:38332/" 2>&1 || echo "FAILED")
|
|
if echo "$BITCOIN_RPC_TEST" | grep -q '"result"'; then
|
|
echo "✅ Bitcoin RPC répond"
|
|
BLOCKS_RPC=$(echo "$BITCOIN_RPC_TEST" | grep -o '"blocks":[0-9]*' | grep -o '[0-9]*' || echo "0")
|
|
echo " Blocs: $BLOCKS_RPC"
|
|
else
|
|
echo "❌ Bitcoin RPC ne répond pas"
|
|
echo " Réponse: $BITCOIN_RPC_TEST"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 8: Vérifier l'état du conteneur Docker Bitcoin (si applicable)
|
|
echo "8. État du conteneur Docker Bitcoin..."
|
|
echo ""
|
|
DOCKER_STATUS=$(run_on_bitcoin "sudo docker ps --filter 'name=bitcoin' --format '{{.Names}} {{.Status}}'" 2>&1 || echo "NO_DOCKER")
|
|
if [ "$DOCKER_STATUS" = "NO_DOCKER" ] || [ -z "$DOCKER_STATUS" ]; then
|
|
echo "⚠️ Aucun conteneur Bitcoin trouvé ou Docker non disponible"
|
|
else
|
|
echo "✅ Conteneur Bitcoin:"
|
|
echo "$DOCKER_STATUS" | while read -r line; do
|
|
echo " $line"
|
|
done
|
|
fi
|
|
echo ""
|
|
|
|
# Résumé
|
|
echo "=== Résumé ==="
|
|
echo ""
|
|
echo "Pour redémarrer le service:"
|
|
echo " ssh -J ${PROD_USER}@${PROXY_SERVER} ${PROD_USER}@${BITCOIN_SERVER} 'sudo systemctl restart ${SERVICE_NAME}'"
|
|
echo ""
|
|
echo "Pour voir les logs en temps réel:"
|
|
echo " ssh -J ${PROD_USER}@${PROXY_SERVER} ${PROD_USER}@${BITCOIN_SERVER} 'sudo journalctl -u ${SERVICE_NAME} -f'"
|
|
echo ""
|
|
echo "Note: L'API d'ancrage Bitcoin est sur la machine 192.168.1.105 (bitcoin), pas sur 192.168.1.103 (prod)"
|
|
echo ""
|