docker-stats 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env bash
  2. stty -echo
  3. INTERVAL=3
  4. trap 'stty echo; exit' INT EXIT
  5. print_header() {
  6. echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
  7. printf "| %-50s | %-12s | %-8s | %-8s | %-22s |\n" "NAME" "CONTAINER ID" "CPU %" "MEM %" "MEM USAGE / MEM LIMIT"
  8. echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
  9. }
  10. print_container_info() {
  11. local container_info
  12. local container_name
  13. local container_id
  14. local cpu_perc
  15. local mem_perc
  16. local mem_usage
  17. container_info="$1"
  18. container_name=$(echo "$container_info" | cut -f1)
  19. container_id=$(echo "$container_info" | cut -f2)
  20. cpu_perc=$(echo "$container_info" | cut -f3)
  21. mem_perc=$(echo "$container_info" | cut -f4)
  22. mem_usage=$(echo "$container_info" | cut -f5)
  23. print_container_info() {
  24. local container_info
  25. local container_name
  26. local container_id
  27. local cpu_perc
  28. local mem_perc
  29. local mem_usage
  30. container_info="$1"
  31. container_name=$(echo "$container_info" | cut -f1)
  32. container_id=$(echo "$container_info" | cut -f2)
  33. cpu_perc=$(echo "$container_info" | cut -f3)
  34. mem_perc=$(echo "$container_info" | cut -f4)
  35. mem_usage=$(echo "$container_info" | cut -f5)
  36. printf "| %-50s | %-12s | %-8s | %-8s | %-22s |\n" "$container_name" "$container_id" "$cpu_perc" "$mem_perc" "$mem_usage"
  37. }
  38. }
  39. while true; do
  40. DOCKER_STATS=$(docker stats --no-stream --format "{{.Name}}\t{{.ID}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}")
  41. clear
  42. if [[ -n "$DOCKER_STATS" ]]; then
  43. print_header
  44. while IFS= read -r line; do
  45. print_container_info "$(echo "$line" | awk '{gsub(/\//, " "); print}')"
  46. done <<< "$DOCKER_STATS"
  47. echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
  48. else
  49. echo "No active containers found"
  50. break
  51. fi
  52. sleep $INTERVAL
  53. done