
- Création du répertoire scripts/ avec tous les scripts d'installation et de test - Scripts d'installation automatique (install.sh, quick-start.sh) - Scripts de maintenance complète (maintenance.sh) - Scripts de test (test-installation.sh, test-api.sh, test-services.sh, test-integration.sh) - Amélioration du Dockerfile avec healthchecks et sécurité - Mise à jour du docker-compose.yml avec healthchecks et dépendances - Makefile étendu avec nouvelles commandes - Documentation complète mise à jour - Fichier de configuration d'exemple (env.example) - app.py corrigé et fonctionnel
226 lines
6.4 KiB
Bash
Executable File
226 lines
6.4 KiB
Bash
Executable File
#!/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 "$@"
|