#!/bin/bash # Script de test des dashboards Grafana # Vérifie que tous les dashboards sont accessibles et fonctionnels set -e echo "🔍 Test des Dashboards Grafana LeCoffre Node" echo "=============================================" GRAFANA_URL="https://dev4.4nkweb.com/grafana" ADMIN_USER="admin" ADMIN_PASS="Fuy8ZfxQI2xdSdoB8wsGxNjyU" # Fonction pour tester un dashboard test_dashboard() { local dashboard_title="$1" local dashboard_uid="$2" echo "📊 Test du dashboard: $dashboard_title" # Vérifier que le dashboard existe dashboard_info=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/dashboards/uid/$dashboard_uid" \ -H "Content-Type: application/json") if echo "$dashboard_info" | jq -e '.dashboard.title' > /dev/null 2>&1; then echo " ✅ Dashboard accessible: $dashboard_title" # Vérifier les panneaux panel_count=$(echo "$dashboard_info" | jq '.dashboard.panels | length') echo " 📈 Nombre de panneaux: $panel_count" # Vérifier les requêtes Loki loki_queries=$(echo "$dashboard_info" | jq '.dashboard.panels[] | select(.targets[]?.datasource.type == "loki") | .targets[]?.expr' | wc -l) echo " 🔍 Requêtes Loki: $loki_queries" return 0 else echo " ❌ Dashboard inaccessible: $dashboard_title" return 1 fi } # Fonction pour tester l'API Loki test_loki_api() { echo "🔍 Test de l'API Loki" # Test de connectivité Loki loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/labels" \ -H "Content-Type: application/json" \ -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data' > /dev/null 2>&1; then echo " ✅ API Loki accessible" # Compter les labels disponibles label_count=$(echo "$loki_response" | jq '.data | length') echo " 🏷️ Labels disponibles: $label_count" return 0 else echo " ❌ API Loki inaccessible" return 1 fi } # Fonction pour tester les logs des services test_service_logs() { echo "📋 Test des logs des services" services=("bitcoin-signet" "blindbit-oracle" "sdk_relay""sdk_storage" "lecoffre-front" "ihm_client" "signet_miner") for service in "${services[@]}"; do echo " 🔍 Test des logs: $service" # Test d'une requête simple sur les logs du service loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/query?query={container=\"$service\"}&limit=1" \ -H "Content-Type: application/json" \ -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data.result' > /dev/null 2>&1; then log_count=$(echo "$loki_response" | jq '.data.result | length') if [ "$log_count" -gt 0 ]; then echo " ✅ Logs disponibles: $log_count entrées" else echo " ⚠️ Aucun log récent trouvé" fi else echo " ❌ Erreur d'accès aux logs" fi done } # Fonction pour générer un rapport de santé generate_health_report() { echo "📊 Rapport de Santé des Dashboards" echo "==================================" # Test de connectivité Grafana grafana_status=$(curl -s -o /dev/null -w "%{http_code}" \ -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/health") if [ "$grafana_status" = "200" ]; then echo "✅ Grafana: Opérationnel (HTTP $grafana_status)" else echo "❌ Grafana: Problème (HTTP $grafana_status)" fi # Test de connectivité Loki loki_status=$(curl -s -o /dev/null -w "%{http_code}" \ -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/datasources/proxy/loki/ready" \ -H "X-Scope-OrgID: anonymous") if [ "$loki_status" = "200" ]; then echo "✅ Loki: Opérationnel (HTTP $loki_status)" else echo "❌ Loki: Problème (HTTP $loki_status)" fi echo "" echo "🎯 Dashboards disponibles:" curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ "$GRAFANA_URL/api/search?type=dash-db" | \ jq -r '.[] | " 📊 " + .title + " (UID: " + .uid + ")"' } # Exécution des tests echo "🚀 Démarrage des tests..." echo "" # Test de l'API Loki test_loki_api echo "" # Test des dashboards spécifiques echo "📊 Test des Dashboards Spécialisés" echo "==================================" test_dashboard "Bitcoin Miner - Détails" "bitcoin-miner-detailed" test_dashboard "SDK Services - Monitoring" "sdk-services" test_dashboard "Frontend Services - Monitoring" "frontend-services" test_dashboard "Bitcoin Services - Monitoring" "bitcoin-services" echo "" # Test des logs des services test_service_logs echo "" # Génération du rapport de santé generate_health_report echo "" echo "🎉 Tests terminés!" echo "" echo "📋 Accès aux Dashboards:" echo " URL: $GRAFANA_URL" echo " Utilisateur: $ADMIN_USER" echo " Mot de passe: $ADMIN_PASS" echo "" echo "🔗 Liens directs:" echo " Vue d'ensemble: $GRAFANA_URL/d/lecoffre-overview" echo " Bitcoin Miner: $GRAFANA_URL/d/bitcoin-miner-detailed" echo " Backend LeCoffre: $GRAFANA_URL/d/lecoffre-backend" echo " Services SDK: $GRAFANA_URL/d/sdk-services" echo " Services Frontend: $GRAFANA_URL/d/frontend-services" echo " Services Bitcoin: $GRAFANA_URL/d/bitcoin-services"