anchorage_layer_simple/check-anchor-api.sh
ncantu fe7f49b6cd Update API anchorage, services, and website skeleton
**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/*
2026-01-28 15:11:59 +01:00

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 ""