33800 Docs

← Retour
#!/bin/bash # =========================================== # État de santé de tous les containers # Usage: ./health.sh [filter] # =========================================== set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../lib/config.sh" source "$SCRIPT_DIR/../lib/colors.sh" FILTER="$1" print_header "État des Containers Docker" echo "" echo -e "┌────────────────────────────────┬──────────┬──────────┬────────────┬─────────────────┐" echo -e "│ ${BOLD}Container${NC} │ ${BOLD}Status${NC} │ ${BOLD}CPU${NC} │ ${BOLD}Memory${NC} │ ${BOLD}Uptime${NC} │" echo -e "├────────────────────────────────┼──────────┼──────────┼────────────┼─────────────────┤" # Récupérer les stats des containers docker stats --no-stream --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" 2>/dev/null | while IFS=$'\t' read -r name cpu mem; do # Appliquer le filtre si spécifié if [ -n "$FILTER" ]; then if ! echo "$name" | grep -qi "$FILTER"; then continue fi fi # Récupérer le status et uptime STATUS=$(docker inspect -f '{{.State.Status}}' "$name" 2>/dev/null) STARTED=$(docker inspect -f '{{.State.StartedAt}}' "$name" 2>/dev/null) # Calculer uptime if [ -n "$STARTED" ] && [ "$STARTED" != "0001-01-01T00:00:00Z" ]; then STARTED_EPOCH=$(date -d "${STARTED}" +%s 2>/dev/null || echo "0") NOW_EPOCH=$(date +%s) UPTIME_SECS=$((NOW_EPOCH - STARTED_EPOCH)) if [ $UPTIME_SECS -lt 3600 ]; then UPTIME="${UPTIME_SECS}s" elif [ $UPTIME_SECS -lt 86400 ]; then UPTIME="$((UPTIME_SECS / 3600))h $((UPTIME_SECS % 3600 / 60))m" else UPTIME="$((UPTIME_SECS / 86400))d $((UPTIME_SECS % 86400 / 3600))h" fi else UPTIME="-" fi # Colorer selon le status case "$STATUS" in running) STATUS_DISPLAY="${GREEN}🟢 UP${NC}" ;; exited) STATUS_DISPLAY="${RED}🔴 DOWN${NC}" ;; restarting) STATUS_DISPLAY="${YELLOW}🟡 RESTART${NC}" ;; *) STATUS_DISPLAY="${DIM}$STATUS${NC}" ;; esac # Extraire juste la partie utilisée de la mémoire MEM_USED=$(echo "$mem" | cut -d'/' -f1 | xargs) printf "│ %-30s │ %-17b │ %-8s │ %-10s │ %-15s │\n" "$name" "$STATUS_DISPLAY" "$cpu" "$MEM_USED" "$UPTIME" done echo -e "└────────────────────────────────┴──────────┴──────────┴────────────┴─────────────────┘" echo "" # Résumé TOTAL=$(docker ps -a --format '{{.Names}}' | wc -l) RUNNING=$(docker ps --format '{{.Names}}' | wc -l) STOPPED=$((TOTAL - RUNNING)) echo -e "Résumé: ${GREEN}$RUNNING running${NC} | ${RED}$STOPPED stopped${NC} | Total: $TOTAL" echo "" log_info "Utilisez './health.sh <filtre>' pour filtrer (ex: ./health.sh hellocar)"