- 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
284 lines
7.4 KiB
Bash
Executable File
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 "$@"
|