4NK_env/scripts/lecoffre_node/url-health-check.sh
LeCoffre Deployment 75df8cb3de auto_clea
2025-09-25 17:34:43 +00:00

243 lines
7.8 KiB
Bash
Executable File

#!/bin/bash
# LeCoffre Node - Script de vérification des URLs de santé
# Vérifie tous les endpoints internes et externes du système
# Utilisé par les scripts de backup et de production
set -e
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Compteurs
TOTAL_URLS=0
ACCESSIBLE_URLS=0
FAILED_URLS=0
# Fonction pour afficher un message avec timestamp
print_message() {
echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1"
}
# Fonction pour tester une URL
test_url() {
local url="$1"
local description="$2"
local expected_codes_csv="${3:-200}"
local timeout="${4:-10}"
TOTAL_URLS=$((TOTAL_URLS + 1))
print_message "Testing: $description"
echo -e " ${CYAN}URL: $url${NC}"
# Test de connectivité
local response=$(curl -s -o /dev/null -w '%{http_code}' --max-time "$timeout" "$url" 2>/dev/null || echo "000")
local curl_exit_code=$?
# Support multiple acceptable codes, comma-separated
local ok=false
IFS=',' read -r -a expected_array <<< "$expected_codes_csv"
for code in "${expected_array[@]}"; do
if [ "$response" = "$code" ]; then
ok=true
break
fi
done
if [ "$ok" = true ]; then
echo -e " ${GREEN}${NC} Status: HTTP $response - Accessible"
ACCESSIBLE_URLS=$((ACCESSIBLE_URLS + 1))
return 0
else
echo -e " ${RED}${NC} Status: HTTP $response - Not accessible"
if [ $curl_exit_code -ne 0 ]; then
echo -e " ${RED} Curl exit code: $curl_exit_code${NC}"
fi
FAILED_URLS=$((FAILED_URLS + 1))
return 1
fi
}
# Fonction pour tester un WebSocket
test_websocket() {
local ws_url="$1"
local description="$2"
local timeout="${3:-5}"
TOTAL_URLS=$((TOTAL_URLS + 1))
print_message "Testing WebSocket: $description"
echo -e " ${CYAN}URL: $ws_url${NC}"
# Test WebSocket avec wscat
local ws_test=$(timeout "$timeout" wscat -c "$ws_url" --no-color 2>/dev/null && echo "connected" || echo "failed")
if [ "$ws_test" = "connected" ]; then
echo -e " ${GREEN}${NC} Status: Connected"
ACCESSIBLE_URLS=$((ACCESSIBLE_URLS + 1))
return 0
else
echo -e " ${RED}${NC} Status: Not connected"
FAILED_URLS=$((FAILED_URLS + 1))
return 1
fi
}
# Fonction pour tester un endpoint API avec POST
test_api_post() {
local url="$1"
local description="$2"
local post_data="$3"
local expected_codes_csv="${4:-200}"
local timeout="${5:-10}"
TOTAL_URLS=$((TOTAL_URLS + 1))
print_message "Testing API POST: $description"
echo -e " ${CYAN}URL: $url${NC}"
echo -e " ${CYAN}Data: $post_data${NC}"
# Test de l'endpoint avec POST
local response=$(curl -s -o /dev/null -w '%{http_code}' --max-time "$timeout" -X POST \
-H "Content-Type: application/json" \
-d "$post_data" \
"$url" 2>/dev/null || echo "000")
local curl_exit_code=$?
# Support multiple acceptable codes, comma-separated
local ok=false
IFS=',' read -r -a expected_array <<< "$expected_codes_csv"
for code in "${expected_array[@]}"; do
if [ "$response" = "$code" ]; then
ok=true
break
fi
done
if [ "$ok" = true ]; then
echo -e " ${GREEN}${NC} Status: HTTP $response - API accessible"
ACCESSIBLE_URLS=$((ACCESSIBLE_URLS + 1))
return 0
else
echo -e " ${RED}${NC} Status: HTTP $response - API not accessible"
if [ $curl_exit_code -ne 0 ]; then
echo -e " ${RED} Curl exit code: $curl_exit_code${NC}"
fi
FAILED_URLS=$((FAILED_URLS + 1))
return 1
fi
}
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} LeCoffre Node - URL Health Check${NC}"
echo -e "${BLUE}========================================${NC}"
echo
print_message "Starting URL health check..."
# ========================================
# URLs INTERNES (Services Docker)
# ========================================
echo -e "${CYAN}=== URLs INTERNES (Services Docker) ===${NC}"
# Services de base
test_url "http://localhost:8000/tweaks/1" "BlindBit Oracle API" "200" 5
test_url "http://localhost:8081/health" "SDK Storage Health" "200" 5
test_url "http://localhost:8091/" "SDK Relay WebSocket Interface" "200" 5
test_url "http://localhost:8090/" "SDK Relay HTTP Interface" "200" 5
# Services applicatifs
test_url "http://localhost:3004/" "LeCoffre Frontend (Root)" "200,301,302,307,308" 10
test_url "http://localhost:3004/login" "LeCoffre Frontend Login" "200,301,302,307,308" 10
test_url "http://localhost:3004/lecoffre/" "LeCoffre Frontend App" "200,301,302,307,308" 10
test_url "http://localhost:3003/" "IHM Client Interface" "200" 10
# Services de monitoring
test_url "http://localhost:3005/api/health" "Grafana Health Check" "200" 5
test_url "http://localhost:3005/" "Grafana Dashboard" "200,301,302" 10
test_url "http://localhost:3100/ready" "Loki Health Check" "200" 5
test_url "http://localhost:3006/api" "Status API" "200" 5
echo
# ========================================
# URLs EXTERNES (Domaine Public)
# ========================================
echo -e "${CYAN}=== URLs EXTERNES (Domaine Public) ===${NC}"
# URLs principales
test_url "https://dev4.4nkweb.com/" "Site Principal" "200,301,302" 15
test_url "https://dev4.4nkweb.com/status/" "Page de Statut" "200" 15
test_url "https://dev4.4nkweb.com/grafana/" "Dashboard Grafana" "200,301,302" 15
test_url "https://dev4.4nkweb.com/lecoffre/" "Application LeCoffre" "200,301,302" 15
# URLs d'authentification
test_url "https://dev4.4nkweb.com/lecoffre/login" "Page de Login LeCoffre" "200,301,302" 15
test_url "https://dev4.4nkweb.com/lecoffre/authorized-client" "Callback d'authentification" "200,301,302" 15
echo
# ========================================
# APIs EXTERNES (Backend Services)
# ========================================
echo -e "${CYAN}=== APIs EXTERNES (Backend Services) ===${NC}"
# API Backend principal
test_url "https://dev3.4nkweb.com/api/v1/health" "API Backend Health" "200" 10
test_url "https://dev3.4nkweb.com/api/v1/status" "API Backend Status" "200" 10
# API IdNot (authentification)
test_api_post "https://dev3.4nkweb.com/api/v1/idnot/state" \
"IdNot State Endpoint" \
'{"next_url":"https://dev4.4nkweb.com/authorized-client"}' \
"200" 10
echo
# ========================================
# WebSockets EXTERNES
# ========================================
echo -e "${CYAN}=== WebSockets EXTERNES ===${NC}"
test_websocket "wss://dev3.4nkweb.com/ws/" "Bootstrap Relay WebSocket" 5
echo
# ========================================
# SERVICES EXTERNES (Dépendances)
# ========================================
echo -e "${CYAN}=== SERVICES EXTERNES (Dépendances) ===${NC}"
# Mempool externe
test_url "https://mempool2.4nkweb.com/" "Mempool Signet Explorer" "200,301,302" 10
# IdNot Service (authentification)
test_url "https://qual-connexion.idnot.fr/" "Service IdNot" "200,301,302" 10
test_url "https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1" "IdNot Authorization Endpoint" "200,301,302" 10
echo
# ========================================
# RÉSUMÉ FINAL
# ========================================
echo -e "${CYAN}=== RÉSUMÉ FINAL ===${NC}"
echo -e "${BLUE}Total URLs testées: $TOTAL_URLS${NC}"
echo -e "${GREEN}URLs accessibles: $ACCESSIBLE_URLS${NC}"
echo -e "${RED}URLs échouées: $FAILED_URLS${NC}"
if [ $FAILED_URLS -eq 0 ]; then
echo -e "${GREEN}🎉 Toutes les URLs sont accessibles !${NC}"
exit 0
elif [ $FAILED_URLS -lt $((TOTAL_URLS / 2)) ]; then
echo -e "${YELLOW}⚠️ Certaines URLs ne sont pas accessibles, mais la majorité fonctionne.${NC}"
exit 1
else
echo -e "${RED}❌ Trop d'URLs ne sont pas accessibles. Vérifiez la configuration.${NC}"
exit 2
fi