#!/bin/bash

# Vérifier si l'utilisateur est root
if [[ $EUID -ne 0 ]]; then
   echo "Ce script doit être exécuté en tant que root"
   exit 1
fi

# Fonction pour afficher les erreurs
function show_error {
    echo "Erreur: $1"
    exit 1
}

# Fonction pour vérifier si Docker est installé
function is_docker_installed {
    command -v docker &> /dev/null
}

# Demander le serveur central pour les logs
read -p "Entrez l'adresse IP ou le nom d'hôte du serveur central pour l'envoi des logs (par exemple, logserver.local) : " log_server

# Vérifier si l'adresse IP ou le nom d'hôte est valide
if [[ -z "$log_server" ]]; then
    show_error "Vous devez fournir une adresse valide pour le serveur central."
fi

# Mettre à jour les dépôts et installer rsyslog
echo "Mise à jour des dépôts et installation de rsyslog..."
apt-get update -y
apt-get install -y rsyslog || show_error "Échec de l'installation de rsyslog."

# Activer le service rsyslog
echo "Activation du service rsyslog..."
systemctl enable rsyslog
systemctl start rsyslog

# Demander si l'utilisateur souhaite activer l'envoi des logs vers un serveur central
read -p "Souhaitez-vous envoyer les logs vers un serveur central (y/n) ? : " send_logs

if [[ "$send_logs" == "y" || "$send_logs" == "Y" ]]; then
    # Configuration de rsyslog pour envoyer les logs vers le serveur
    echo "Configuration de rsyslog pour envoyer les logs vers $log_server..."
    
    # Sauvegarder la configuration d'origine
    cp /etc/rsyslog.conf /etc/rsyslog.conf.bak

    # Ajouter ou décommenter la ligne pour envoyer les logs vers le serveur central
    echo "*.* @$log_server:514" >> /etc/rsyslog.conf
    echo "Logs envoyés vers $log_server."

    # Redémarrer rsyslog pour appliquer la configuration
    systemctl restart rsyslog
fi

# Demander si l'utilisateur veut configurer des logs spécifiques pour des services
read -p "Souhaitez-vous configurer des logs spécifiques pour un service (y/n) ? : " configure_service_logs

if [[ "$configure_service_logs" == "y" || "$configure_service_logs" == "Y" ]]; then
    # Demander quel service
    read -p "Entrez le nom du service pour configurer les logs (par exemple, apache2, nginx, etc.) : " service_name

    # Ajouter la configuration de logs pour le service
    echo "Configuration des logs pour le service $service_name..."
    echo ":programname, isequal, \"$service_name\" /var/log/$service_name.log" >> /etc/rsyslog.conf

    # Redémarrer rsyslog pour appliquer les nouvelles configurations
    systemctl restart rsyslog
fi

# Demander si l'utilisateur souhaite configurer un filtrage spécifique des logs
read -p "Souhaitez-vous filtrer certains types de logs avant de les envoyer (y/n) ? : " filter_logs

if [[ "$filter_logs" == "y" || "$filter_logs" == "Y" ]]; then
    # Demander les critères de filtrage
    read -p "Entrez un critère de filtrage pour les logs (par exemple, *.crit, *.debug) : " log_filter

    # Ajouter un filtre dans rsyslog
    echo "$log_filter @$log_server:514" >> /etc/rsyslog.conf
    echo "Filtrage des logs appliqué pour $log_filter."

    # Redémarrer rsyslog
    systemctl restart rsyslog
fi

# Redémarrer rsyslog
systemctl restart rsyslog

# Rechercher les fichiers .log dans /var/log/* et les enregistrer dans un fichier .txt
log_files=$(find /var/log/ -type f -name "*.log")

# Ajouter les fichiers de log Docker si Docker est installé
if is_docker_installed; then
    docker_log_files=$(find /var/lib/docker/containers -type f -name "*.log")
    log_files="$log_files $docker_log_files"
fi

# Afficher les fichiers de log trouvés
echo "Fichiers de log trouvés :"
echo "$log_files"

# Enregistrer les fichiers de log dans un fichier .txt
log_file_list="/tmp/log_files.txt"
echo "$log_files" > "$log_file_list"

# Copier les informations du fichier .txt dans le fichier rsyslog.conf
while IFS= read -r log_file; do
    echo "$log_file @$log_server:514" >> /etc/rsyslog.conf
done < "$log_file_list"

# Redémarrer rsyslog pour appliquer les nouvelles configurations
systemctl restart rsyslog

# Terminer
echo "Configuration de rsyslog terminée. N'oubliez pas de vérifier la configuration dans /etc/rsyslog.conf."
