diff --git a/IA_agents/prompts/prompt-backups.md b/IA_agents/prompts/prompt-backups.md index a39e3a5..3bd36b5 100644 --- a/IA_agents/prompts/prompt-backups.md +++ b/IA_agents/prompts/prompt-backups.md @@ -21,6 +21,7 @@ - `nginx_redirects_summary.txt` - `compose_services.txt` - `data/` (copie à l’instant T) +- Ne fait de backups en dehors de 4NK_env/backups/ ### Utilisation ```bash diff --git a/IA_agents/prompts/prompt-docs.md b/IA_agents/prompts/prompt-docs.md index 9ddc03c..ad5ed73 100644 --- a/IA_agents/prompts/prompt-docs.md +++ b/IA_agents/prompts/prompt-docs.md @@ -11,6 +11,7 @@ Centraliser toute la documentation des projets dans `4NK_env/docs//` et - Emplacement unique: `4NK_env/docs//`. - Pas de duplication ni de divergence documentaire dans les sous‑projets. - Les références dans README, CI et scripts doivent pointer vers le chemin centralisé. +- Ne faite pas de nouveaux fichier md mais complete les fichiers existants ### Actions (TODO) - Vérifier qu’aucun `docs/` résiduel n’existe dans les sous‑projets. diff --git a/IA_agents/prompts/prompt-global.md b/IA_agents/prompts/prompt-global.md index 2f1bf06..ad60802 100644 --- a/IA_agents/prompts/prompt-global.md +++ b/IA_agents/prompts/prompt-global.md @@ -68,6 +68,8 @@ Tous les documents des projets doivent être dans un dossier `docs/` - Tu dois bien gérer les branche "ext" et les tags "ext" en évitant les conflit +- Ne créer pas de liens symboliques mais pointe directement sur les fichiers + --- **Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-global.md`. diff --git a/IA_agents/prompts/prompt-scripts.md b/IA_agents/prompts/prompt-scripts.md index a49f2ac..9fd0f09 100644 --- a/IA_agents/prompts/prompt-scripts.md +++ b/IA_agents/prompts/prompt-scripts.md @@ -15,6 +15,7 @@ Uniformiser l’emplacement et l’usage des scripts d’exploitation pour tous - Documentation: référencer préférentiellement `4NK_env/scripts//...`. - CI/Docker: aucune modification nécessaire si les chemins relatifs à `./scripts/` étaient utilisés (les liens absorbent le changement). - Gouvernance: éviter de recréer des variantes de scripts; améliorer l’existant. +- Ne faite pas de nouveaux fichiers de scripts mais complete les fichiers existants ### Vérification post‑migration 1. Rechercher des références à `scripts/` et valider qu’elles pointent sur le lien: diff --git a/docs/README-URL-TESTS.md b/docs/README-URL-TESTS.md new file mode 100644 index 0000000..ec46c8b --- /dev/null +++ b/docs/README-URL-TESTS.md @@ -0,0 +1,135 @@ +# Tests de Santé des URLs - LeCoffre Node + +## 🎯 Objectif + +Ce répertoire contient les scripts de vérification de santé des URLs pour LeCoffre Node, intégrés dans les processus de backup et de production. + +## 📁 Fichiers Créés + +### Scripts Principaux +- **`url-health-check.sh`** : Script principal de test d'URLs (toutes les URLs internes et externes) +- **`production-health-check.sh`** : Script de vérification complète pour la production (avec rapport Markdown) +- **`backup-data.sh`** : Script de backup modifié (intègre les tests d'URLs avant/après) + +### Documentation +- **`URL-HEALTH-CHECKING.md`** : Documentation complète des tests d'URLs +- **`README-URL-TESTS.md`** : Ce fichier (synthèse) + +## 🚀 Utilisation Rapide + +### Test des URLs +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./url-health-check.sh +``` + +### Rapport de Production +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./production-health-check.sh +``` + +### Backup avec Tests +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./backup-data.sh +``` + +## 📊 URLs Testées + +### ✅ URLs Interne (Services Docker) +- BlindBit Oracle API (`http://localhost:8000/tweaks/1`) +- SDK Storage Health (`http://localhost:8081/health`) +- SDK Relay WebSocket (`http://localhost:8091/`) +- SDK Relay HTTP (`http://localhost:8090/`) +- LeCoffre Frontend (`http://localhost:3004/`) +- IHM Client (`http://localhost:3003/`) +- Grafana (`http://localhost:3005/`) +- Loki (`http://localhost:3100/ready`) +- Status API (`http://localhost:3006/api`) + +### ✅ URLs Externes (Domaine Public) +- Site Principal (`https://dev4.4nkweb.com/`) +- Page de Statut (`https://dev4.4nkweb.com/status/`) +- Dashboard Grafana (`https://dev4.4nkweb.com/grafana/`) +- Application LeCoffre (`https://dev4.4nkweb.com/lecoffre/`) +- Login LeCoffre (`https://dev4.4nkweb.com/lecoffre/login`) +- Callback Auth (`https://dev4.4nkweb.com/lecoffre/authorized-client`) + +### ✅ APIs Externes (Backend Services) +- API Backend Health (`https://dev3.4nkweb.com/api/v1/health`) +- API Backend Status (`https://dev3.4nkweb.com/api/v1/status`) +- IdNot State Endpoint (`https://dev3.4nkweb.com/api/v1/idnot/state`) + +### ✅ WebSockets Externes +- Bootstrap Relay (`wss://dev3.4nkweb.com/ws/`) + +### ✅ Services Externes (Dépendances) +- Mempool Signet (`https://mempool2.4nkweb.com/`) +- Service IdNot (`https://qual-connexion.idnot.fr/`) +- IdNot Authorization (`https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1`) + +## 📈 Intégration dans les Processus + +### Backup +- **Avant** : Test de l'état des URLs +- **Après** : Vérification de la cohérence +- **Logs** : Sauvegardés avec le backup + +### Production +- **État complet** : Services, disque, mémoire, volumes +- **Rapport Markdown** : Généré automatiquement +- **Recommandations** : Actions suggérées + +## 🔍 Codes de Retour + +- **0** : Toutes les URLs sont accessibles +- **1** : Certaines URLs ne sont pas accessibles (majorité fonctionne) +- **2** : Trop d'URLs ne sont pas accessibles + +## 📝 Fichiers Générés + +### Backup +``` +./backups/ +├── lecoffre_backup_YYYYMMDD_HHMMSS.tar.gz +├── url-health-check-pre-backup-YYYYMMDD_HHMMSS.log +└── url-health-check-post-backup-YYYYMMDD_HHMMSS.log +``` + +### Production +``` +./reports/ +├── production-health-report-YYYYMMDD_HHMMSS.md +└── url-tests-production-YYYYMMDD_HHMMSS.log +``` + +## 🚨 Dépannage + +### URLs Internes Non Accessibles +- Vérifier les services Docker : `docker ps` +- Consulter les logs : `docker logs ` +- Vérifier les ports et la configuration réseau + +### URLs Externes Non Accessibles +- Vérifier la configuration nginx +- Vérifier les certificats SSL +- Vérifier la connectivité réseau externe + +### APIs Non Accessibles +- Vérifier la configuration CORS +- Vérifier la connectivité vers dev3.4nkweb.com +- Consulter les logs du backend + +## 📚 Documentation Complète + +Pour plus de détails, consultez : +- **`docs/scripts/URL-HEALTH-CHECKING.md`** : Documentation complète +- **`scripts/url-health-check.sh`** : Code source du script principal +- **`scripts/production-health-check.sh`** : Code source du script de production + +--- + +**Créé le 2025-09-25** +**Version** : 1.0 +**Usage** : Tests de santé LeCoffre Node diff --git a/docs/scripts/URL-HEALTH-CHECKING.md b/docs/scripts/URL-HEALTH-CHECKING.md new file mode 100644 index 0000000..3dfda9c --- /dev/null +++ b/docs/scripts/URL-HEALTH-CHECKING.md @@ -0,0 +1,214 @@ +# Documentation - Tests de Santé des URLs LeCoffre Node + +## 📋 Vue d'ensemble + +Ce document décrit les scripts de vérification de santé des URLs pour LeCoffre Node, intégrés dans les processus de backup et de production. + +## 🔧 Scripts Disponibles + +### 1. `url-health-check.sh` +**Script principal de test d'URLs** + +**Usage :** +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./url-health-check.sh +``` + +**Fonctionnalités :** +- Test de toutes les URLs internes (services Docker) +- Test de toutes les URLs externes (domaine public) +- Test des APIs externes (backend services) +- Test des WebSockets externes +- Test des services externes (dépendances) +- Rapport détaillé avec codes de retour + +**Codes de retour :** +- `0` : Toutes les URLs sont accessibles +- `1` : Certaines URLs ne sont pas accessibles (majorité fonctionne) +- `2` : Trop d'URLs ne sont pas accessibles + +### 2. `production-health-check.sh` +**Script de vérification complète pour la production** + +**Usage :** +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./production-health-check.sh +``` + +**Fonctionnalités :** +- État des services Docker +- Espace disque système +- Mémoire système +- Volumes Docker +- Tests d'URLs complets +- Génération d'un rapport Markdown détaillé + +### 3. `backup-data.sh` (Modifié) +**Script de backup avec intégration des tests d'URLs** + +**Usage :** +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./backup-data.sh +``` + +**Nouvelles fonctionnalités :** +- Test des URLs avant la sauvegarde +- Test des URLs après la sauvegarde +- Logs des tests intégrés dans le backup +- Rapport de cohérence avant/après + +## 📊 URLs Testées + +### URLs Internes (Services Docker) + +| Service | URL | Code Attendu | Description | +|---------|-----|--------------|-------------| +| BlindBit Oracle | `http://localhost:8000/tweaks/1` | 200 | API BlindBit | +| SDK Storage | `http://localhost:8081/health` | 200 | Health check SDK Storage | +| SDK Relay | `http://localhost:8091/` | 200 | Interface WebSocket SDK Relay | +| SDK Relay | `http://localhost:8090/` | 200 | Interface HTTP SDK Relay | +| LeCoffre Frontend | `http://localhost:3004/` | 200,301,302,307,308 | Frontend racine | +| LeCoffre Frontend | `http://localhost:3004/login` | 200,301,302,307,308 | Page de login | +| LeCoffre Frontend | `http://localhost:3004/lecoffre/` | 200,301,302,307,308 | Application LeCoffre | +| IHM Client | `http://localhost:3003/` | 200 | Interface IHM Client | +| Grafana | `http://localhost:3005/api/health` | 200 | Health check Grafana | +| Grafana | `http://localhost:3005/` | 200,301,302 | Dashboard Grafana | +| Loki | `http://localhost:3100/ready` | 200 | Health check Loki | +| Status API | `http://localhost:3006/api` | 200 | API de statut | + +### URLs Externes (Domaine Public) + +| Service | URL | Code Attendu | Description | +|---------|-----|--------------|-------------| +| Site Principal | `https://dev4.4nkweb.com/` | 200,301,302 | Site principal | +| Page de Statut | `https://dev4.4nkweb.com/status/` | 200 | Page de statut des services | +| Dashboard Grafana | `https://dev4.4nkweb.com/grafana/` | 200,301,302 | Dashboard Grafana public | +| Application LeCoffre | `https://dev4.4nkweb.com/lecoffre/` | 200,301,302 | Application LeCoffre publique | +| Login LeCoffre | `https://dev4.4nkweb.com/lecoffre/login` | 200,301,302 | Page de login publique | +| Callback Auth | `https://dev4.4nkweb.com/lecoffre/authorized-client` | 200,301,302 | Callback d'authentification | + +### APIs Externes (Backend Services) + +| Service | URL | Méthode | Code Attendu | Description | +|---------|-----|---------|--------------|-------------| +| API Backend | `https://dev3.4nkweb.com/api/v1/health` | GET | 200 | Health check API backend | +| API Backend | `https://dev3.4nkweb.com/api/v1/status` | GET | 200 | Status API backend | +| IdNot State | `https://dev3.4nkweb.com/api/v1/idnot/state` | POST | 200 | Endpoint d'état IdNot | + +### WebSockets Externes + +| Service | URL | Description | +|---------|-----|-------------| +| Bootstrap Relay | `wss://dev3.4nkweb.com/ws/` | WebSocket de relais bootstrap | + +### Services Externes (Dépendances) + +| Service | URL | Code Attendu | Description | +|---------|-----|--------------|-------------| +| Mempool Signet | `https://mempool2.4nkweb.com/` | 200,301,302 | Explorateur de blockchain | +| Service IdNot | `https://qual-connexion.idnot.fr/` | 200,301,302 | Service d'authentification IdNot | +| IdNot Auth | `https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1` | 200,301,302 | Endpoint d'autorisation IdNot | + +## 📁 Structure des Fichiers Générés + +### Backup avec Tests d'URLs +``` +./backups/ +├── lecoffre_backup_YYYYMMDD_HHMMSS.tar.gz +├── url-health-check-pre-backup-YYYYMMDD_HHMMSS.log +└── url-health-check-post-backup-YYYYMMDD_HHMMSS.log +``` + +### Production Health Check +``` +./reports/ +├── production-health-report-YYYYMMDD_HHMMSS.md +└── url-tests-production-YYYYMMDD_HHMMSS.log +``` + +## 🔍 Interprétation des Résultats + +### Codes de Statut HTTP +- **200** : OK - Service accessible et fonctionnel +- **301, 302, 307, 308** : Redirections - Acceptables pour certains services +- **404** : Not Found - Service non trouvé ou mal configuré +- **500** : Internal Server Error - Erreur serveur +- **000** : Connection Failed - Impossible de se connecter + +### Codes de Retour des Scripts +- **0** : Succès complet +- **1** : Succès partiel (certaines URLs échouent) +- **2** : Échec (trop d'URLs échouent) + +## 🚨 Dépannage + +### URLs Internes Non Accessibles +1. Vérifier que les services Docker sont démarrés +2. Vérifier les ports et la configuration réseau +3. Consulter les logs des services : `docker logs ` + +### URLs Externes Non Accessibles +1. Vérifier la configuration nginx +2. Vérifier les certificats SSL +3. Vérifier la connectivité réseau externe +4. Consulter les logs nginx + +### APIs Non Accessibles +1. Vérifier la configuration CORS +2. Vérifier les headers d'authentification +3. Vérifier la connectivité vers dev3.4nkweb.com +4. Consulter les logs du backend + +## 📝 Exemples d'Utilisation + +### Test Rapide des URLs +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./url-health-check.sh +``` + +### Rapport Complet de Production +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./production-health-check.sh +cat ./reports/production-health-report-*.md +``` + +### Backup avec Tests d'URLs +```bash +cd /home/debian/4NK_env/scripts/lecoffre_node +./backup-data.sh +ls -la ./backups/ +``` + +### Surveillance Continue +```bash +# Ajouter dans un cron pour surveillance automatique +0 */6 * * * cd /home/debian/4NK_env/scripts/lecoffre_node && ./url-health-check.sh > /var/log/url-health-check.log 2>&1 +``` + +## 🔧 Maintenance + +### Mise à Jour des URLs +Pour ajouter ou modifier des URLs testées : +1. Éditer `url-health-check.sh` +2. Ajouter/modifier les sections appropriées +3. Tester le script +4. Mettre à jour cette documentation + +### Configuration des Timeouts +Les timeouts par défaut sont : +- URLs internes : 5-10 secondes +- URLs externes : 10-15 secondes +- WebSockets : 5 secondes + +Pour modifier les timeouts, éditer les paramètres dans les fonctions `test_url()` et `test_websocket()`. + +--- + +**Document créé le 2025-09-25** +**Version** : 1.0 +**Usage** : Scripts de santé LeCoffre Node diff --git a/lecoffre_node b/lecoffre_node index 516d38d..a6215ad 160000 --- a/lecoffre_node +++ b/lecoffre_node @@ -1 +1 @@ -Subproject commit 516d38d7c587620856e226aab1a00a90a4841d1d +Subproject commit a6215adf3f7f180abed864276922d1c1a1458902 diff --git a/scripts/add-missing-env-vars.sh b/scripts/add-missing-env-vars.sh new file mode 100755 index 0000000..a88ee02 --- /dev/null +++ b/scripts/add-missing-env-vars.sh @@ -0,0 +1,125 @@ +#!/bin/bash +# Script pour ajouter les variables d'environnement manquantes au fichier .env.master + +set -e + +# Couleurs pour l'affichage +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +ENV_FILE="/home/debian/4NK_env/.env.master" +BACKUP_FILE="${ENV_FILE}.backup.$(date +%Y%m%d_%H%M%S)" + +echo -e "${BLUE}========================================${NC}" +echo -e "${BLUE} Ajout des Variables d'Environnement Manquantes${NC}" +echo -e "${BLUE}========================================${NC}" +echo + +# Fonction pour vérifier si une variable existe +check_var_exists() { + local var_name="$1" + grep -q "^${var_name}=" "$ENV_FILE" 2>/dev/null +} + +# Fonction pour ajouter une variable si elle n'existe pas +add_var_if_missing() { + local var_name="$1" + local var_value="$2" + local description="$3" + + if ! check_var_exists "$var_name"; then + echo -e "${YELLOW}Ajout de ${var_name}: ${description}${NC}" + echo "${var_name}=${var_value}" >> "$ENV_FILE" + return 0 + else + echo -e "${GREEN}✓ ${var_name} existe déjà${NC}" + return 1 + fi +} + +# Créer une sauvegarde +echo -e "${BLUE}Création d'une sauvegarde: ${BACKUP_FILE}${NC}" +cp "$ENV_FILE" "$BACKUP_FILE" + +echo -e "${BLUE}Ajout des variables manquantes...${NC}" +echo + +# Variables Bitcoin +echo -e "${CYAN}=== Variables Bitcoin ===${NC}" +add_var_if_missing "BITCOIN_RPC_USER" "bitcoin_user" "Nom d'utilisateur RPC Bitcoin" +add_var_if_missing "BITCOIN_RPC_PASSWORD" "FAKE-DATA-IA-bitcoin_password_secure" "Mot de passe RPC Bitcoin" +add_var_if_missing "BITCOIN_RPC_PORT" "38332" "Port RPC Bitcoin" + +echo + +# Variables BlindBit +echo -e "${CYAN}=== Variables BlindBit ===${NC}" +add_var_if_missing "BLINDBIT_API_PORT" "8000" "Port de l'API BlindBit" +add_var_if_missing "BITCOIN_RPC_URL" "http://bitcoin:38332" "URL du RPC Bitcoin" + +echo + +# Variables SDK Relay +echo -e "${CYAN}=== Variables SDK Relay ===${NC}" +add_var_if_missing "RELAY_PORT" "8090" "Port du relay" +add_var_if_missing "RELAY_HTTP_PORT" "8091" "Port HTTP du relay" +add_var_if_missing "STORAGE_URL" "http://sdk_storage:8080" "URL du service de stockage" + +echo + +# Variables SDK Storage +echo -e "${CYAN}=== Variables SDK Storage ===${NC}" +add_var_if_missing "STORAGE_PORT" "8080" "Port du service de stockage" +add_var_if_missing "STORAGE_DATA_DIR" "/app/data" "Répertoire des données de stockage" + +echo + +# Variables IHM Client +echo -e "${CYAN}=== Variables IHM Client ===${NC}" +add_var_if_missing "VITE_API_URL" "https://dev4.4nkweb.com/api" "URL de l'API pour Vite" +add_var_if_missing "VITE_4NK_URL" "https://dev4.4nkweb.com" "URL 4NK pour Vite" +add_var_if_missing "VITE_RELAY_URL" "wss://dev4.4nkweb.com/ws" "URL du relay pour Vite" + +echo + +# Variables Grafana +echo -e "${CYAN}=== Variables Grafana ===${NC}" +add_var_if_missing "GF_SECURITY_ADMIN_PASSWORD" "FAKE-DATA-IA-admin123" "Mot de passe admin Grafana" +add_var_if_missing "GF_DATABASE_TYPE" "sqlite3" "Type de base de données Grafana" + +echo + +# Variables Loki +echo -e "${CYAN}=== Variables Loki ===${NC}" +add_var_if_missing "LOKI_CONFIG_FILE" "/etc/loki/loki-config.yaml" "Fichier de configuration Loki" +add_var_if_missing "LOKI_DATA_DIR" "/app/data" "Répertoire des données Loki" + +echo + +# Variables Status API +echo -e "${CYAN}=== Variables Status API ===${NC}" +add_var_if_missing "STATUS_API_PORT" "3006" "Port de l'API de statut" +add_var_if_missing "STATUS_API_HOST" "0.0.0.0" "Hôte de l'API de statut" + +echo + +# Variables Tor (pour compléter) +echo -e "${CYAN}=== Variables Tor ===${NC}" +add_var_if_missing "TOR_SOCKS_PORT" "9050" "Port SOCKS Tor" +add_var_if_missing "TOR_CONTROL_PORT" "9051" "Port de contrôle Tor" + +echo + +echo -e "${GREEN}✅ Variables ajoutées avec succès !${NC}" +echo +echo -e "${BLUE}Fichiers:${NC}" +echo -e "${YELLOW} - Fichier principal: ${ENV_FILE}${NC}" +echo -e "${YELLOW} - Sauvegarde: ${BACKUP_FILE}${NC}" +echo +echo -e "${BLUE}Pour tester:${NC}" +echo -e "${YELLOW} cd /home/debian/4NK_env/scripts/lecoffre_node${NC}" +echo -e "${YELLOW} ./start.sh${NC}" +echo diff --git a/scripts/lecoffre_node/backup-data.sh b/scripts/lecoffre_node/backup-data.sh index f2724d6..d80b58b 100755 --- a/scripts/lecoffre_node/backup-data.sh +++ b/scripts/lecoffre_node/backup-data.sh @@ -22,6 +22,16 @@ echo -e "${BLUE} LeCoffre Node - Data Backup${NC}" echo -e "${BLUE}========================================${NC}" echo +# Vérification de l'état des URLs avant la sauvegarde +echo -e "${YELLOW}=== Vérification de l'état des services avant sauvegarde ===${NC}" +if [ -f "./scripts/url-health-check.sh" ]; then + ./scripts/url-health-check.sh > "$BACKUP_DIR/url-health-check-pre-backup-${TIMESTAMP}.log" 2>&1 + echo -e "${GREEN}✓ État des URLs enregistré dans: $BACKUP_DIR/url-health-check-pre-backup-${TIMESTAMP}.log${NC}" +else + echo -e "${YELLOW}⚠ Script url-health-check.sh non trouvé${NC}" +fi +echo + # Créer le répertoire de sauvegarde mkdir -p "$BACKUP_DIR" @@ -66,6 +76,16 @@ tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME" --ignore-failed-read 2>/dev/null rm -rf "$BACKUP_NAME" || sudo rm -rf "$BACKUP_NAME" || true cd .. +# Vérification de l'état des URLs après la sauvegarde +echo -e "${YELLOW}=== Vérification de l'état des services après sauvegarde ===${NC}" +if [ -f "./scripts/url-health-check.sh" ]; then + ./scripts/url-health-check.sh > "$BACKUP_DIR/url-health-check-post-backup-${TIMESTAMP}.log" 2>&1 + echo -e "${GREEN}✓ État des URLs enregistré dans: $BACKUP_DIR/url-health-check-post-backup-${TIMESTAMP}.log${NC}" +else + echo -e "${YELLOW}⚠ Script url-health-check.sh non trouvé${NC}" +fi +echo + # Afficher les informations de sauvegarde BACKUP_SIZE=$(du -h "$BACKUP_DIR/${BACKUP_NAME}.tar.gz" | cut -f1) echo @@ -73,6 +93,11 @@ echo -e "${GREEN}✅ Backup completed successfully!${NC}" echo -e "${GREEN}Backup file: $BACKUP_DIR/${BACKUP_NAME}.tar.gz${NC}" echo -e "${GREEN}Backup size: $BACKUP_SIZE${NC}" echo +echo -e "${BLUE}Files created:${NC}" +echo -e "${YELLOW} - ${BACKUP_NAME}.tar.gz (backup data)${NC}" +echo -e "${YELLOW} - url-health-check-pre-backup-${TIMESTAMP}.log (état avant)${NC}" +echo -e "${YELLOW} - url-health-check-post-backup-${TIMESTAMP}.log (état après)${NC}" +echo echo -e "${BLUE}To restore this backup:${NC}" echo -e "${YELLOW} ./scripts/restore-data.sh $BACKUP_NAME${NC}" echo diff --git a/scripts/lecoffre_node/deploy-autonomous.sh b/scripts/lecoffre_node/deploy-autonomous.sh index f3698ed..19a7b46 100755 --- a/scripts/lecoffre_node/deploy-autonomous.sh +++ b/scripts/lecoffre_node/deploy-autonomous.sh @@ -62,7 +62,7 @@ docker run -d \ -v /home/debian/4NK_env/lecoffre_node/logs:/app/logs \ -v /home/debian/4NK_env/lecoffre_node/conf:/app/conf \ -v /home/debian/4NK_env/lecoffre_node/backup:/app/backup \ - -v /home/debian/4NK_env/lecoffre_node/.env.master:/app/.env \ + -v /home/debian/4NK_env/.env.master:/app/.env \ ${MASTER_IMAGE_NAME}:${MASTER_IMAGE_TAG} log "⏳ Attente du démarrage du conteneur master..." diff --git a/scripts/lecoffre_node/maintenance.sh b/scripts/lecoffre_node/maintenance.sh index 6a0f854..db6f754 100755 --- a/scripts/lecoffre_node/maintenance.sh +++ b/scripts/lecoffre_node/maintenance.sh @@ -102,7 +102,7 @@ restart_services() { print_message "Redémarrage des services..." echo -e "${YELLOW}Arrêt des services...${NC}" - docker compose --env-file .env.master down + docker compose --env-file /home/debian/4NK_env/.env.master down echo -e "${YELLOW}Démarrage des services...${NC}" ./scripts/start.sh @@ -125,7 +125,7 @@ check_health() { print_message "Vérification de la santé des services..." echo -e "${CYAN}Statut des conteneurs:${NC}" - docker compose --env-file .env.master ps + docker compose --env-file /home/debian/4NK_env/.env.master ps echo echo -e "${CYAN}Utilisation des ressources:${NC}" diff --git a/scripts/lecoffre_node/production-health-check.sh b/scripts/lecoffre_node/production-health-check.sh new file mode 100755 index 0000000..b80f8e8 --- /dev/null +++ b/scripts/lecoffre_node/production-health-check.sh @@ -0,0 +1,308 @@ +#!/bin/bash +# LeCoffre Node - Script de vérification de santé pour la production +# Vérifie l'état complet du système et génère un rapport détaillé +# Utilisé pour les déploiements en production et la maintenance + +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 + +# Configuration +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +REPORT_DIR="./reports" +REPORT_FILE="$REPORT_DIR/production-health-report-${TIMESTAMP}.md" + +# Fonction pour afficher un message avec timestamp +print_message() { + echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1" +} + +# Fonction pour initialiser le rapport +init_report() { + mkdir -p "$REPORT_DIR" + + cat > "$REPORT_FILE" << EOF +# Rapport de Santé Production - LeCoffre Node + +**Date**: $(date '+%Y-%m-%d %H:%M:%S') +**Timestamp**: $TIMESTAMP +**Environnement**: Production +**Serveur**: $(hostname) + +--- + +## Résumé Exécutif + +EOF +} + +# Fonction pour ajouter une section au rapport +add_section() { + local section_title="$1" + echo "" >> "$REPORT_FILE" + echo "## $section_title" >> "$REPORT_FILE" + echo "" >> "$REPORT_FILE" +} + +# Fonction pour ajouter du contenu au rapport +add_content() { + echo "$1" >> "$REPORT_FILE" +} + +# Fonction pour exécuter le test d'URLs et capturer les résultats +run_url_tests() { + local test_type="$1" + local output_file="$REPORT_DIR/url-tests-${test_type}-${TIMESTAMP}.log" + + print_message "Exécution des tests d'URLs ($test_type)..." + + if [ -f "./scripts/url-health-check.sh" ]; then + ./scripts/url-health-check.sh > "$output_file" 2>&1 + local exit_code=$? + + # Extraire les statistiques du log + local total_urls=$(grep "Total URLs testées:" "$output_file" | grep -o '[0-9]\+' || echo "0") + local accessible_urls=$(grep "URLs accessibles:" "$output_file" | grep -o '[0-9]\+' || echo "0") + local failed_urls=$(grep "URLs échouées:" "$output_file" | grep -o '[0-9]\+' || echo "0") + + add_content "### Tests d'URLs ($test_type)" + add_content "" + add_content "| Métrique | Valeur |" + add_content "|----------|--------|" + add_content "| Total URLs testées | $total_urls |" + add_content "| URLs accessibles | $accessible_urls |" + add_content "| URLs échouées | $failed_urls |" + add_content "| Taux de réussite | $(( accessible_urls * 100 / (total_urls > 0 ? total_urls : 1) ))% |" + add_content "" + + if [ $exit_code -eq 0 ]; then + add_content "✅ **Statut**: Toutes les URLs sont accessibles" + elif [ $exit_code -eq 1 ]; then + add_content "⚠️ **Statut**: Certaines URLs ne sont pas accessibles" + else + add_content "❌ **Statut**: Trop d'URLs ne sont pas accessibles" + fi + + add_content "" + add_content "**Log détaillé**: \`$output_file\`" + add_content "" + + return $exit_code + else + add_content "### Tests d'URLs ($test_type)" + add_content "" + add_content "❌ **Erreur**: Script url-health-check.sh non trouvé" + add_content "" + return 1 + fi +} + +# Fonction pour vérifier l'état des services Docker +check_docker_services() { + add_section "État des Services Docker" + + print_message "Vérification des services Docker..." + + # Liste des services à vérifier + local services=( + "tor-proxy:Tor Proxy" + "bitcoin-signet:Bitcoin Signet" + "blindbit-oracle:BlindBit Oracle" + "sdk_storage:SDK Storage" + "sdk_relay:SDK Relay" + "lecoffre-front:LeCoffre Frontend" + "ihm_client:IHM Client" + "grafana:Grafana" + "loki:Loki" + "promtail:Promtail" + "status-api:Status API" + "watchtower:Watchtower" + ) + + add_content "| Service | Container | Statut | Santé | Uptime |" + add_content "|---------|-----------|--------|-------|--------|" + + for service_entry in "${services[@]}"; do + local service_name="${service_entry%%:*}" + local display_name="${service_entry##*:}" + + if docker ps --format '{{.Names}}' | grep -q "^${service_name}$"; then + local running=$(docker inspect --format='{{.State.Running}}' "$service_name" 2>/dev/null || echo "false") + local health=$(docker inspect --format='{{.State.Health.Status}}' "$service_name" 2>/dev/null || echo "no-healthcheck") + local uptime=$(docker inspect --format='{{.State.StartedAt}}' "$service_name" 2>/dev/null || echo "unknown") + + if [ "$running" = "true" ]; then + if [ "$health" = "healthy" ]; then + add_content "| $display_name | $service_name | 🟢 Running | ✅ Healthy | $uptime |" + else + add_content "| $display_name | $service_name | 🟢 Running | ⚠️ $health | $uptime |" + fi + else + add_content "| $display_name | $service_name | 🔴 Stopped | ❌ Unhealthy | $uptime |" + fi + else + add_content "| $display_name | $service_name | ❌ Not Found | ❌ N/A | N/A |" + fi + done + + add_content "" +} + +# Fonction pour vérifier l'espace disque +check_disk_space() { + add_section "Espace Disque" + + print_message "Vérification de l'espace disque..." + + add_content "| Partition | Taille | Utilisé | Disponible | Usage |" + add_content "|-----------|--------|---------|------------|-------|" + + df -h | tail -n +2 | while read -r line; do + local partition=$(echo "$line" | awk '{print $1}') + local size=$(echo "$line" | awk '{print $2}') + local used=$(echo "$line" | awk '{print $3}') + local available=$(echo "$line" | awk '{print $4}') + local usage=$(echo "$line" | awk '{print $5}') + + # Déterminer la couleur basée sur l'usage + local usage_num=$(echo "$usage" | sed 's/%//') + if [ "$usage_num" -gt 90 ]; then + local status="🔴" + elif [ "$usage_num" -gt 80 ]; then + local status="🟡" + else + local status="🟢" + fi + + add_content "| $partition | $size | $used | $available | $status $usage |" + done + + add_content "" +} + +# Fonction pour vérifier la mémoire +check_memory() { + add_section "Mémoire Système" + + print_message "Vérification de la mémoire..." + + local mem_info=$(free -h) + local total=$(echo "$mem_info" | grep "Mem:" | awk '{print $2}') + local used=$(echo "$mem_info" | grep "Mem:" | awk '{print $3}') + local free=$(echo "$mem_info" | grep "Mem:" | awk '{print $4}') + local available=$(echo "$mem_info" | grep "Mem:" | awk '{print $7}') + + add_content "| Type | Taille |" + add_content "|------|--------|" + add_content "| Total | $total |" + add_content "| Utilisé | $used |" + add_content "| Libre | $free |" + add_content "| Disponible | $available |" + add_content "" +} + +# Fonction pour vérifier les volumes Docker +check_docker_volumes() { + add_section "Volumes Docker" + + print_message "Vérification des volumes Docker..." + + add_content "| Volume | Driver | Taille |" + add_content "|--------|--------|--------|" + + docker volume ls --format "table {{.Name}}\t{{.Driver}}" | tail -n +2 | while read -r volume_name driver; do + if [[ "$volume_name" == *"4nk_node"* ]]; then + local size=$(docker system df -v 2>/dev/null | grep "$volume_name" | awk '{print $3}' || echo "N/A") + add_content "| $volume_name | $driver | $size |" + fi + done + + add_content "" +} + +# Fonction pour générer le résumé final +generate_summary() { + add_section "Résumé et Recommandations" + + add_content "### Points d'Attention" + add_content "" + add_content "- Vérifiez les URLs échouées dans les logs détaillés" + add_content "- Surveillez l'espace disque des partitions critiques" + add_content "- Vérifiez l'état de santé des services Docker" + add_content "- Consultez les logs des services pour les erreurs" + add_content "" + + add_content "### Actions Recommandées" + add_content "" + add_content "1. **Maintenance Préventive**" + add_content " - Nettoyer les logs anciens" + add_content " - Vérifier les certificats SSL" + add_content " - Mettre à jour les images Docker" + add_content "" + add_content "2. **Surveillance Continue**" + add_content " - Monitorer les métriques Grafana" + add_content " - Surveiller les alertes Loki" + add_content " - Vérifier les backups automatiques" + add_content "" + add_content "3. **Sécurité**" + add_content " - Vérifier les accès SSH" + add_content " - Contrôler les certificats SSL" + add_content " - Auditer les logs de sécurité" + add_content "" + + add_content "---" + add_content "" + add_content "*Rapport généré automatiquement par LeCoffre Node Production Health Check*" + add_content "*Timestamp: $TIMESTAMP*" +} + +# Fonction principale +main() { + echo -e "${BLUE}========================================${NC}" + echo -e "${BLUE} LeCoffre Node - Production Health Check${NC}" + echo -e "${BLUE}========================================${NC}" + echo + + print_message "Initialisation du rapport..." + init_report + + print_message "Vérification des services Docker..." + check_docker_services + + print_message "Vérification de l'espace disque..." + check_disk_space + + print_message "Vérification de la mémoire..." + check_memory + + print_message "Vérification des volumes Docker..." + check_docker_volumes + + print_message "Exécution des tests d'URLs..." + run_url_tests "production" + + print_message "Génération du résumé..." + generate_summary + + echo + echo -e "${GREEN}✅ Rapport de santé généré avec succès !${NC}" + echo -e "${GREEN}Rapport: $REPORT_FILE${NC}" + echo + echo -e "${BLUE}Fichiers générés:${NC}" + echo -e "${YELLOW} - $REPORT_FILE (rapport principal)${NC}" + echo -e "${YELLOW} - $REPORT_DIR/url-tests-production-${TIMESTAMP}.log (tests détaillés)${NC}" + echo + echo -e "${BLUE}Pour consulter le rapport:${NC}" + echo -e "${YELLOW} cat $REPORT_FILE${NC}" + echo -e "${YELLOW} less $REPORT_FILE${NC}" + echo +} + +# Exécuter le script principal +main "$@" diff --git a/scripts/lecoffre_node/restore-data.sh b/scripts/lecoffre_node/restore-data.sh index f75212c..1cebd44 100755 --- a/scripts/lecoffre_node/restore-data.sh +++ b/scripts/lecoffre_node/restore-data.sh @@ -45,7 +45,7 @@ fi # Arrêter les services echo -e "${BLUE}Stopping services...${NC}" -docker compose --env-file .env.master down >/dev/null 2>&1 || true +docker compose --env-file /home/debian/4NK_env/.env.master down >/dev/null 2>&1 || true # Extraire la sauvegarde echo -e "${BLUE}Extracting backup...${NC}" diff --git a/scripts/lecoffre_node/start.sh b/scripts/lecoffre_node/start.sh index 382327b..6d72700 100755 --- a/scripts/lecoffre_node/start.sh +++ b/scripts/lecoffre_node/start.sh @@ -174,13 +174,92 @@ wait_for_healthy() { return 1 } +# Fonction pour vérifier les variables d'environnement d'un service +check_service_env() { + local service_name=$1 + local display_name=$2 + + print_message "Checking environment variables for $display_name..." + + # Vérifier que le fichier .env.master existe + if [ ! -f "/home/debian/4NK_env/.env.master" ]; then + echo -e "${RED}✗ Error: .env.master file not found${NC}" + return 1 + fi + + # Variables critiques par service + case "$service_name" in + "bitcoin") + local critical_vars=("BITCOIN_RPC_USER" "BITCOIN_RPC_PASSWORD" "BITCOIN_RPC_PORT") + ;; + "blindbit") + local critical_vars=("BLINDBIT_API_PORT" "BITCOIN_RPC_URL") + ;; + "sdk_relay") + local critical_vars=("RELAY_PORT" "RELAY_HTTP_PORT" "STORAGE_URL") + ;; + "sdk_storage") + local critical_vars=("STORAGE_PORT" "STORAGE_DATA_DIR") + ;; + "lecoffre-front") + local critical_vars=("NEXT_PUBLIC_API_URL" "NEXT_PUBLIC_4NK_URL" "NEXT_PUBLIC_IDNOT_BASE_URL") + ;; + "ihm_client") + local critical_vars=("VITE_API_URL" "VITE_4NK_URL" "VITE_RELAY_URL") + ;; + "grafana") + local critical_vars=("GF_SECURITY_ADMIN_PASSWORD" "GF_DATABASE_TYPE") + ;; + "loki") + local critical_vars=("LOKI_CONFIG_FILE" "LOKI_DATA_DIR") + ;; + "promtail") + local critical_vars=("PROMTAIL_CONFIG_FILE" "LOKI_URL") + ;; + "status-api") + local critical_vars=("STATUS_API_PORT" "STATUS_API_HOST") + ;; + *) + echo -e "${YELLOW}⚠ No specific environment variables defined for $service_name${NC}" + return 0 + ;; + esac + + # Vérifier chaque variable critique + local missing_vars=() + for var in "${critical_vars[@]}"; do + if ! grep -q "^${var}=" /home/debian/4NK_env/.env.master; then + missing_vars+=("$var") + fi + done + + if [ ${#missing_vars[@]} -eq 0 ]; then + echo -e "${GREEN}✓ All critical environment variables present for $display_name${NC}" + return 0 + else + echo -e "${RED}✗ Missing critical environment variables for $display_name:${NC}" + for var in "${missing_vars[@]}"; do + echo -e "${RED} - $var${NC}" + done + return 1 + fi +} + # Fonction pour démarrer un service start_service() { local service_name=$1 local display_name=$2 + # Vérifier les variables d'environnement avant de démarrer + if ! check_service_env "$service_name" "$display_name"; then + echo -e "${RED}✗ Environment check failed for $display_name. Continuing anyway...${NC}" + fi + print_message "Starting $display_name..." - docker compose --env-file .env.master up -d "$service_name" + if ! docker compose --env-file /home/debian/4NK_env/.env.master up -d "$service_name"; then + echo -e "${YELLOW}⚠ Failed to start $display_name, continuing with next service...${NC}" + return 0 + fi # Attendre que le conteneur soit créé sleep 2 @@ -212,7 +291,7 @@ echo # Arrêter les services existants print_message "Stopping existing services..." -docker compose --env-file .env.master down --remove-orphans >/dev/null 2>&1 || true +docker compose --env-file /home/debian/4NK_env/.env.master down --remove-orphans >/dev/null 2>&1 || true # Ordre de démarrage logique services=( @@ -245,7 +324,7 @@ done echo -e "${GREEN}🎉 All services started successfully!${NC}" echo echo -e "${BLUE}Final status:${NC}" -docker compose --env-file .env.master ps +docker compose --env-file /home/debian/4NK_env/.env.master ps # Calculer le temps total end_time=$(date +%s) @@ -257,7 +336,7 @@ echo echo -e "${GREEN}Total startup time: ${minutes}m ${seconds}s${NC}" echo echo -e "${BLUE}Useful commands:${NC}" -echo -e " ${YELLOW}docker compose --env-file .env.master logs -f${NC} # Voir les logs" -echo -e " ${YELLOW}docker compose --env-file .env.master down${NC} # Arrêter les services" -echo -e " ${YELLOW}docker compose --env-file .env.master ps${NC} # Voir le statut" +echo -e " ${YELLOW}docker compose --env-file /home/debian/4NK_env/.env.master logs -f${NC} # Voir les logs" +echo -e " ${YELLOW}docker compose --env-file /home/debian/4NK_env/.env.master down${NC} # Arrêter les services" +echo -e " ${YELLOW}docker compose --env-file /home/debian/4NK_env/.env.master ps${NC} # Voir le statut" echo diff --git a/scripts/lecoffre_node/update-images.sh b/scripts/lecoffre_node/update-images.sh index 72c736c..7b6bf4f 100755 --- a/scripts/lecoffre_node/update-images.sh +++ b/scripts/lecoffre_node/update-images.sh @@ -24,7 +24,7 @@ echo echo -e "${YELLOW}Updating Docker images...${NC}" # Mettre à jour les images -docker compose --env-file .env.master pull +docker compose --env-file /home/debian/4NK_env/.env.master pull echo -e "${GREEN}✅ Images updated successfully!${NC}" echo diff --git a/scripts/lecoffre_node/url-health-check.sh b/scripts/lecoffre_node/url-health-check.sh new file mode 100755 index 0000000..9ae77b5 --- /dev/null +++ b/scripts/lecoffre_node/url-health-check.sh @@ -0,0 +1,242 @@ +#!/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 diff --git a/sdk_relay b/sdk_relay index 0133e31..51e9b60 160000 --- a/sdk_relay +++ b/sdk_relay @@ -1 +1 @@ -Subproject commit 0133e31bc4ebb0faf5536a388d25f7ba0c85c1c3 +Subproject commit 51e9b6017310f91a345f5d4f9f850ef694478e98 diff --git a/sdk_storage b/sdk_storage index 4dad512..06879e4 160000 --- a/sdk_storage +++ b/sdk_storage @@ -1 +1 @@ -Subproject commit 4dad51241c559f9895f3f986b5deea7484189e88 +Subproject commit 06879e4fed871b589814a1fc424c87054950c202