#!/usr/bin/env bash set -euo pipefail umask 077 ############################################################################### # CHARGEMENT DU .env ############################################################################### SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${SCRIPT_DIR}/.env" if [[ ! -f "$ENV_FILE" ]]; then echo "ERROR: fichier .env introuvable : $ENV_FILE" >&2 exit 1 fi set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a ############################################################################### # CONFIGURATION ############################################################################### require_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "ERROR: commande requise absente : $1" >&2 exit 1 } } # Limite maximale d'utilisation du disque en pourcentage limit="${STORAGE_ALERT_LIMIT:-70}" DISCORD_PING="${DISCORD_PING:-@here}" [[ "$limit" =~ ^[0-9]+$ ]] || { echo "ERROR: STORAGE_ALERT_LIMIT invalide" >&2 exit 1 } (( limit >= 1 && limit <= 99 )) || { echo "ERROR: STORAGE_ALERT_LIMIT doit être compris entre 1 et 99" >&2 exit 1 } require_cmd df require_cmd awk if [[ -n "${DISCORD_WEBHOOK_URL:-}" ]]; then require_cmd jq require_cmd curl fi send_discord() { local message="$1" local payload="" [[ -n "${DISCORD_WEBHOOK_URL:-}" ]] || return 0 payload="$(jq -n --arg content "$message" '{content: $content}')" || return 0 curl -fsS \ -H "Content-Type: application/json" \ -d "$payload" \ "$DISCORD_WEBHOOK_URL" >/dev/null || true } ############################################################################### # RÉCUPÉRATION DES INFORMATIONS DISQUE ############################################################################### read -r total_bytes used_bytes avail_bytes usage <<<"$(df -B1 / | awk 'NR==2 {gsub(/%/,"",$5); print $2, $3, $4, $5}')" # Calcul du pourcentage d'espace libre free=$((100 - usage)) ############################################################################### # CONVERSION EN GIGAOCTETS ############################################################################### used_gb=$(awk -v b="$used_bytes" 'BEGIN {printf "%.2f", b/1024/1024/1024}') total_gb=$(awk -v b="$total_bytes" 'BEGIN {printf "%.2f", b/1024/1024/1024}') avail_gb=$(awk -v b="$avail_bytes" 'BEGIN {printf "%.2f", b/1024/1024/1024}') ############################################################################### # VÉRIFICATION DU SEUIL D'UTILISATION ############################################################################### if [ "$usage" -ge "$limit" ]; then msgLimit="${DISCORD_PING}\n**CHECK STOCKAGE :red_circle:**\nLimite autorisée : ${limit}%\nUtilisation actuelle : ${usage}%\nEspace restant : ${free}%\nUtilisé / total : ${used_gb} GB / ${total_gb} GB\nDisponible : ${avail_gb} GB\nHeure : $(date)" send_discord "$msgLimit" fi ############################################################################### # AFFICHAGE DES INFORMATIONS STOCKAGE ############################################################################### echo "Espace disponible : ${avail_gb} GB" echo "Espace utilise / espace total : ${used_gb} GB / ${total_gb} GB" echo "Name: ${HOSTNAME}"