From 13ac2a0fa16ad94910944bd2206adf9462861e19 Mon Sep 17 00:00:00 2001
From: "Hahn Axel (hahn)" <axel.hahn@unibe.ch>
Date: Mon, 29 Jan 2024 08:30:32 +0100
Subject: [PATCH] detect reason for no output

---
 check_docker_stats | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/check_docker_stats b/check_docker_stats
index 65b8a97..d215f2f 100755
--- a/check_docker_stats
+++ b/check_docker_stats
@@ -14,7 +14,7 @@
 # https://docs.docker.com/engine/reference/commandline/docker/
 # ----------------------------------------------------------------------
 # 2024-01-26  v1.0  <axel.hahn@unibe.ch>      init
-# 2024-01-29  v1.1  <axel.hahn@unibe.ch>      fix help
+# 2024-01-29  v1.1  <axel.hahn@unibe.ch>      fix help; detect reason for no output
 # ======================================================================
 
 
@@ -104,11 +104,11 @@ esac; done
 sLabel="Docker stats"
 
 case "$sMode" in
-  "cpu")     sLabel="Docker CPU usage total of all containers: %s percent"; sUnit="1"; sumkey="CPUPerc"; sColumns=".Container, .${sumkey}, .Name" ;;
-  "mem") sLabel="Docker Memory max usage in most consuming container: %s percent";   sUnit="1"; maxkey="MemPerc"; sColumns=".Container, .${maxkey}, .MemUsage, .Name" ;;
-  "netio")   sLabel="Docker Network I/O of all containers: %s MB IN .. %s MB OUT"; sUnit="M";  sumkey="NetIO";   f2=1; sColumns=".Container, .${sumkey}, .Name" ;;
-  "memtotal")     sLabel="Docker Memory usage of all containers: %s MB";  sUnit="M"; sumkey="MemUsage";f2=0; sColumns=".Container, .${sumkey}, .Name" ;;
-  "blockio")   sLabel="Docker Network I/O of all containers: %s MB IN .. %s MB OUT"; sUnit="M";  sumkey="BlockIO";   f2=1; sColumns=".Container, .${sumkey}, .Name" ;;
+  "cpu")      sLabel="Docker CPU usage total of all containers: %s percent";            sUnit="1"; sumkey="CPUPerc";        sColumns=".Container, .${sumkey}, .Name" ;;
+  "mem")      sLabel="Docker Memory max usage in most consuming container: %s percent"; sUnit="1"; maxkey="MemPerc";        sColumns=".Container, .${maxkey}, .MemUsage, .Name" ;;
+  "netio")    sLabel="Docker Network I/O of all containers: %s MB IN .. %s MB OUT";     sUnit="M"; sumkey="NetIO";    f2=1; sColumns=".Container, .${sumkey}, .Name" ;;
+  "memtotal") sLabel="Docker Memory usage of all containers: %s MB";                    sUnit="M"; sumkey="MemUsage"; f2=0; sColumns=".Container, .${sumkey}, .Name" ;;
+  "blockio")  sLabel="Docker Block I/O of all containers: %s MB IN .. %s MB OUT";       sUnit="M"; sumkey="BlockIO";  f2=1; sColumns=".Container, .${sumkey}, .Name" ;;
   "all") ;;
   *) ph.setStatus critical
      echo "ERROR: mode [$sMode] is unknown. Use -h to get help."
@@ -127,7 +127,22 @@ _detectDockerenv
 # --- get stats data
 
 data=$( sudo -n --preserve-env docker stats --no-stream --format '{{ json . }}' )
-_detectDockererror "$data"
+
+if [ -z "$data" ]; then
+  # zero output could mean:
+  # - connect to docker failed
+  # - no data because no container is running
+  # --> let's detect it...
+  infos=$( sudo -n --preserve-env docker system info --format '{{ json . }}' )
+  _detectDockererror "$infos"
+
+  typeset -i iCRunning;
+  iCRunning=$(_getString "$data" ".ContainersRunning" )
+  if [ "$iCRunning" -eq "0" ]; then
+    ph.status "$sLabel >> Do data. No container is running"
+    ph.exit
+  fi
+fi
 
 
 # --- checks to detect maximum
-- 
GitLab