#!/bin/bash

LOG_FILE="/var/log/glusterfs-check.log"
STEPS=7  # Nombre total d'étapes dans le script

# Supprimer les anciens logs
if [ -f "$LOG_FILE" ]; then
    rm "$LOG_FILE"
fi

# Fonction de journalisation
log() {
    echo "$(date) : $1" >> $LOG_FILE
}

# Fonction de progression
progress() {
    local step=$1
    local total=$2
    local percent=$(( 100 * step / total ))
    echo -ne "Progress: [${percent}%]...\r"
}

step=1

log "Script de vérification GlusterFS démarré."
progress $step $STEPS

# Vérification de l'état du service glusterd
if ! systemctl is-active --quiet glusterd; then
    log "Le service glusterd n'est pas actif. Tentative de démarrage."
    sudo systemctl start glusterd
    if ! systemctl is-active --quiet glusterd; then
        log "Échec du démarrage du service glusterd."
        exit 1
    else
        log "Service glusterd démarré avec succès."
    fi
else
    log "Le service glusterd est déjà actif."
fi

step=$((step + 1))
progress $step $STEPS

# Vérification de l'état des pairs GlusterFS
peers_status=$(sudo gluster peer status | grep "Peer in Cluster" | wc -l)

if [ "$peers_status" -ne 2 ]; then
    log "Tous les pairs ne sont pas en ligne. Tentative de reconnexion des pairs."

    # Ajout des adresses IP de vos pairs
    peers=("192.168.1.50" "192.168.1.80" "192.168.1.110")

    for peer in "${peers[@]}"; do
        sudo gluster peer probe $peer
    done

    # Revérification de l'état des pairs
    peers_status=$(sudo gluster peer status | grep "Peer in Cluster" | wc -l)

    if [ "$peers_status" -ne 2]; then
        log "Échec de la reconnexion de tous les pairs."
        exit 1
    else
        log "Tous les pairs sont maintenant en ligne."
    fi
else
    log "Tous les pairs sont en ligne."
fi

step=$((step + 1))
progress $step $STEPS

# Vérification de l'état du volume
volume_status=$(sudo gluster volume info volume_applicatif | grep "Status: Started" | wc -l)

if [ "$volume_status" -ne 1]; then
    log "Le volume volume_applicatif n'est pas démarré. Tentative de démarrage."
    sudo gluster volume start volume_applicatif
    if [ "$?" -ne 0 ]; then
        log "Échec du démarrage du volume volume_applicatif."
        exit 1
    else
        log "Volume volume_applicatif démarré avec succès."
    fi
else
    log "Le volume volume_applicatif est déjà démarré."
fi

step=$((step + 1))
progress $step $STEPS

# Vérification des briques du volume
brick_status=$(sudo gluster volume status volume_applicatif detail | grep "N/A" | wc -l)

if [ "$brick_status" -ne 0 ]; then
    log "Certaines briques du volume volume_applicatif ne sont pas en ligne."
    # Tentative de remonter les briques
    sudo gluster volume heal volume_applicatif
fi

step=$((step + 1))
progress $step $STEPS

# Vérification du montage des volumes
if mountpoint -q /mnt/montage_applicatif; then
    log "Le volume GlusterFS est déjà monté."
else
    log "Tentative de montage du volume GlusterFS."
    sudo mount -t glusterfs 192.168.1.50:/volume_applicatif /mnt/montage_applicatif
    if [ "$?" -ne 0 ]; then
        log "Échec du montage des volumes GlusterFS. Tentative de diagnostic."

        # Diagnostic supplémentaire
        mount_output=$(sudo mount -t glusterfs 192.168.1.50:/volume_applicatif /mnt/montage_applicatif 2>&1)
        log "Sortie de la commande de montage : $mount_output"

        # Vérification de l'accès au volume
        glusterfs_output=$(sudo gluster volume status volume_applicatif 2>&1)
        log "Statut du volume GlusterFS : $glusterfs_output"

        exit 1
    else
        log "Volumes GlusterFS montés avec succès."
    fi
fi

step=$((step + 1))
progress $step $STEPS

log "Script de vérification GlusterFS terminé avec succès."
progress $STEPS $STEPS
echo ""
