#!/bin/bash # Script de test des services 4NK IA Backend # Usage: ./scripts/test-services.sh set -e # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration des services SERVICES=( "postgres:5432:PostgreSQL" "redis:6379:Redis" "minio:9000:MinIO" "ollama:11434:Ollama" "anythingsqlite:3001:AnythingLLM" "neo4j:7474:Neo4j" "opensearch:9200:OpenSearch" "grafana:3000:Grafana" ) # Fonction pour afficher les messages log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Compteur de tests TESTS_PASSED=0 TESTS_FAILED=0 # Fonction pour exécuter un test run_test() { local test_name="$1" local test_command="$2" log_info "Test: $test_name" if eval "$test_command" > /dev/null 2>&1; then log_success "✅ $test_name" ((TESTS_PASSED++)) else log_error "❌ $test_name" ((TESTS_FAILED++)) fi } # Fonction pour tester la connectivité des services test_service_connectivity() { log_info "=== Test de connectivité des services ===" for service in "${SERVICES[@]}"; do IFS=':' read -r name port description <<< "$service" run_test "$description accessible sur le port $port" "nc -z localhost $port" done } # Fonction pour tester les services Docker test_docker_services() { log_info "=== Test des services Docker ===" # Vérifier que Docker fonctionne run_test "Docker fonctionne" "docker ps" # Vérifier les containers en cours local running_containers=$(docker ps --format "{{.Names}}" | wc -l) if [ $running_containers -gt 0 ]; then log_success "✅ $running_containers container(s) en cours d'exécution" ((TESTS_PASSED++)) else log_warning "⚠️ Aucun container en cours d'exécution" ((TESTS_FAILED++)) fi # Vérifier les services spécifiques run_test "Container postgres en cours" "docker ps --format '{{.Names}}' | grep -q postgres" run_test "Container redis en cours" "docker ps --format '{{.Names}}' | grep -q redis" run_test "Container minio en cours" "docker ps --format '{{.Names}}' | grep -q minio" run_test "Container host-api en cours" "docker ps --format '{{.Names}}' | grep -q host-api" } # Fonction pour tester les volumes Docker test_docker_volumes() { log_info "=== Test des volumes Docker ===" local volumes=$(docker volume ls --format "{{.Name}}" | grep -E "(4nk|postgres|redis|minio)" | wc -l) if [ $volumes -gt 0 ]; then log_success "✅ $volumes volume(s) Docker trouvé(s)" ((TESTS_PASSED++)) else log_warning "⚠️ Aucun volume Docker trouvé" ((TESTS_FAILED++)) fi } # Fonction pour tester les réseaux Docker test_docker_networks() { log_info "=== Test des réseaux Docker ===" run_test "Réseau Docker par défaut existe" "docker network ls | grep -q bridge" run_test "Réseau Docker Compose existe" "docker network ls | grep -q 4nk" } # Fonction pour tester les ressources système test_system_resources() { log_info "=== Test des ressources système ===" # Mémoire disponible local available_memory=$(free -m | awk 'NR==2{printf "%.0f", $7}') if [ $available_memory -gt 1000 ]; then log_success "✅ Mémoire suffisante: ${available_memory}MB" ((TESTS_PASSED++)) else log_warning "⚠️ Mémoire faible: ${available_memory}MB" ((TESTS_FAILED++)) fi # Espace disque local available_disk=$(df -h . | awk 'NR==2{print $4}' | sed 's/G//') if [ $available_disk -gt 5 ]; then log_success "✅ Espace disque suffisant: ${available_disk}G" ((TESTS_PASSED++)) else log_warning "⚠️ Espace disque faible: ${available_disk}G" ((TESTS_FAILED++)) fi } # Fonction pour tester les logs des services test_service_logs() { log_info "=== Test des logs des services ===" # Vérifier que les logs sont accessibles run_test "Logs de l'API accessibles" "docker-compose -f infra/docker-compose.yml logs host-api | head -1" run_test "Logs de PostgreSQL accessibles" "docker-compose -f infra/docker-compose.yml logs postgres | head -1" run_test "Logs de Redis accessibles" "docker-compose -f infra/docker-compose.yml logs redis | head -1" } # Fonction pour tester la configuration test_configuration() { log_info "=== Test de la configuration ===" run_test "Fichier .env existe" "test -f .env" run_test "Fichier docker-compose.yml existe" "test -f infra/docker-compose.yml" run_test "Variables d'environnement chargées" "source .env && echo \$POSTGRES_USER" } # Fonction pour afficher le statut détaillé show_detailed_status() { log_info "=== Statut détaillé des services ===" echo "" # Statut des containers echo "Containers Docker:" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" # Utilisation des ressources echo "Utilisation des ressources:" docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" echo "" # Volumes echo "Volumes Docker:" docker volume ls | grep -E "(4nk|postgres|redis|minio)" echo "" } # Fonction pour afficher le résumé show_summary() { echo "" log_info "=== Résumé des tests de services ===" echo "" echo "Tests réussis: $TESTS_PASSED" echo "Tests échoués: $TESTS_FAILED" echo "Total: $((TESTS_PASSED + TESTS_FAILED))" echo "" if [ $TESTS_FAILED -eq 0 ]; then log_success "🎉 Tous les services fonctionnent correctement !" else log_error "❌ Certains services ont des problèmes." echo "" echo "Solutions possibles:" echo " 1. Redémarrer les services: ./scripts/maintenance.sh restart" echo " 2. Vérifier les logs: ./scripts/maintenance.sh logs" echo " 3. Vérifier la configuration: ./scripts/maintenance.sh status" fi } # Fonction principale main() { echo "🧪 Test des services 4NK IA Backend" echo "" test_service_connectivity test_docker_services test_docker_volumes test_docker_networks test_system_resources test_service_logs test_configuration show_detailed_status show_summary } # Exécution main "$@"