← 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)"