4NK_node/tests/cleanup.sh
Nicolas Cantu b935cbab20 Réorganisation complète : tests, documentation et nettoyage
- Réorganisation des tests par catégorie (unit, integration, connectivity, external)
- Création de scripts d'exécution automatisés pour les tests
- Création de guides techniques complets (ARCHITECTURE.md, API.md)
- Transfert des informations depuis specs/ vers docs/
- Nettoyage et archivage des fichiers obsolètes
- Documentation complète des tests avec exemples
- Scripts de maintenance et nettoyage automatique
- Structure professionnelle prête pour l'évolution
2025-08-25 14:13:26 +02:00

284 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# Script: Nettoyage des tests
# Description: Nettoie les logs et rapports de tests anciens
# Auteur: Assistant IA
# Date: 2024-12-19
set -e
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_DIR="$SCRIPT_DIR/logs"
REPORT_DIR="$SCRIPT_DIR/reports"
# 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
# Variables globales
DAYS_TO_KEEP=7
CLEAN_LOGS=true
CLEAN_REPORTS=false
DRY_RUN=false
VERBOSE=false
# Fonctions utilitaires
log() {
local level="$1"
shift
local message="$*"
local timestamp=$(date +%Y-%m-%d\ %H:%M:%S)
case "$level" in
"INFO")
echo -e "${BLUE}[$timestamp] INFO:${NC} $message"
;;
"SUCCESS")
echo -e "${GREEN}[$timestamp] SUCCESS:${NC} $message"
;;
"WARNING")
echo -e "${YELLOW}[$timestamp] WARNING:${NC} $message"
;;
"ERROR")
echo -e "${RED}[$timestamp] ERROR:${NC} $message"
;;
esac
}
# Afficher l'aide
show_help() {
cat << EOF
Usage: $0 [OPTIONS]
Options:
-h, --help Afficher cette aide
-d, --days N Nombre de jours à conserver (défaut: 7)
--logs Nettoyer les logs (défaut: activé)
--reports Nettoyer les rapports (défaut: désactivé)
--all Nettoyer logs et rapports
--dry-run Simulation sans suppression
-v, --verbose Mode verbose
Exemples:
$0 # Nettoyer les logs de plus de 7 jours
$0 --days 30 # Nettoyer les logs de plus de 30 jours
$0 --all --dry-run # Simulation du nettoyage complet
$0 --reports --days 1 # Nettoyer les rapports de plus d'1 jour
EOF
}
# Nettoyer les logs
cleanup_logs() {
if [ "$CLEAN_LOGS" = false ]; then
return 0
fi
log "INFO" "Nettoyage des logs de plus de $DAYS_TO_KEEP jours..."
if [ ! -d "$LOG_DIR" ]; then
log "WARNING" "Répertoire de logs non trouvé: $LOG_DIR"
return 0
fi
local files_to_delete=()
# Trouver les fichiers à supprimer
while IFS= read -r -d '' file; do
files_to_delete+=("$file")
done < <(find "$LOG_DIR" -type f -mtime +$DAYS_TO_KEEP -print0 2>/dev/null)
if [ ${#files_to_delete[@]} -eq 0 ]; then
log "INFO" "Aucun log à supprimer"
return 0
fi
log "INFO" "Fichiers à supprimer (${#files_to_delete[@]}):"
for file in "${files_to_delete[@]}"; do
if [ "$VERBOSE" = true ]; then
log "INFO" " - $(basename "$file") ($(stat -c %y "$file" 2>/dev/null || echo "date inconnue"))"
else
log "INFO" " - $(basename "$file")"
fi
done
if [ "$DRY_RUN" = true ]; then
log "INFO" "Mode simulation: aucun fichier supprimé"
return 0
fi
# Supprimer les fichiers
local deleted_count=0
for file in "${files_to_delete[@]}"; do
if rm "$file" 2>/dev/null; then
deleted_count=$((deleted_count + 1))
if [ "$VERBOSE" = true ]; then
log "SUCCESS" "Supprimé: $(basename "$file")"
fi
else
log "ERROR" "Impossible de supprimer: $(basename "$file")"
fi
done
log "SUCCESS" "Nettoyage des logs terminé: $deleted_count fichier(s) supprimé(s)"
}
# Nettoyer les rapports
cleanup_reports() {
if [ "$CLEAN_REPORTS" = false ]; then
return 0
fi
log "INFO" "Nettoyage des rapports de plus de $DAYS_TO_KEEP jours..."
if [ ! -d "$REPORT_DIR" ]; then
log "WARNING" "Répertoire de rapports non trouvé: $REPORT_DIR"
return 0
fi
local files_to_delete=()
# Trouver les fichiers à supprimer
while IFS= read -r -d '' file; do
files_to_delete+=("$file")
done < <(find "$REPORT_DIR" -type f -mtime +$DAYS_TO_KEEP -print0 2>/dev/null)
if [ ${#files_to_delete[@]} -eq 0 ]; then
log "INFO" "Aucun rapport à supprimer"
return 0
fi
log "INFO" "Fichiers à supprimer (${#files_to_delete[@]}):"
for file in "${files_to_delete[@]}"; do
if [ "$VERBOSE" = true ]; then
log "INFO" " - $(basename "$file") ($(stat -c %y "$file" 2>/dev/null || echo "date inconnue"))"
else
log "INFO" " - $(basename "$file")"
fi
done
if [ "$DRY_RUN" = true ]; then
log "INFO" "Mode simulation: aucun fichier supprimé"
return 0
fi
# Supprimer les fichiers
local deleted_count=0
for file in "${files_to_delete[@]}"; do
if rm "$file" 2>/dev/null; then
deleted_count=$((deleted_count + 1))
if [ "$VERBOSE" = true ]; then
log "SUCCESS" "Supprimé: $(basename "$file")"
fi
else
log "ERROR" "Impossible de supprimer: $(basename "$file")"
fi
done
log "SUCCESS" "Nettoyage des rapports terminé: $deleted_count fichier(s) supprimé(s)"
}
# Afficher les statistiques
show_statistics() {
log "INFO" "=== Statistiques ==="
# Statistiques des logs
if [ -d "$LOG_DIR" ]; then
local log_count=$(find "$LOG_DIR" -type f | wc -l)
local log_size=$(du -sh "$LOG_DIR" 2>/dev/null | cut -f1 || echo "0")
log "INFO" "Logs: $log_count fichier(s), $log_size"
else
log "INFO" "Logs: répertoire non trouvé"
fi
# Statistiques des rapports
if [ -d "$REPORT_DIR" ]; then
local report_count=$(find "$REPORT_DIR" -type f | wc -l)
local report_size=$(du -sh "$REPORT_DIR" 2>/dev/null | cut -f1 || echo "0")
log "INFO" "Rapports: $report_count fichier(s), $report_size"
else
log "INFO" "Rapports: répertoire non trouvé"
fi
}
# Fonction principale
main() {
log "INFO" "=== Début du nettoyage des tests ==="
log "INFO" "Répertoire de travail: $SCRIPT_DIR"
log "INFO" "Jours à conserver: $DAYS_TO_KEEP"
log "INFO" "Mode simulation: $DRY_RUN"
# Afficher les statistiques avant nettoyage
show_statistics
# Nettoyer les logs
cleanup_logs
# Nettoyer les rapports
cleanup_reports
# Afficher les statistiques après nettoyage
if [ "$DRY_RUN" = false ]; then
log "INFO" "=== Statistiques après nettoyage ==="
show_statistics
fi
log "SUCCESS" "=== Nettoyage terminé ==="
}
# Traitement des arguments
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-d|--days)
DAYS_TO_KEEP="$2"
shift 2
;;
--logs)
CLEAN_LOGS=true
shift
;;
--reports)
CLEAN_REPORTS=true
shift
;;
--all)
CLEAN_LOGS=true
CLEAN_REPORTS=true
shift
;;
--dry-run)
DRY_RUN=true
shift
;;
-v|--verbose)
VERBOSE=true
shift
;;
*)
log "ERROR" "Option inconnue: $1"
show_help
exit 1
;;
esac
done
# Validation des paramètres
if ! [[ "$DAYS_TO_KEEP" =~ ^[0-9]+$ ]]; then
log "ERROR" "Le nombre de jours doit être un entier positif"
exit 1
fi
if [ "$DAYS_TO_KEEP" -lt 0 ]; then
log "ERROR" "Le nombre de jours ne peut pas être négatif"
exit 1
fi
# Exécution principale
main "$@"