From a244d2dc60f8bfa2668fe65c831256c3f03ecf8b Mon Sep 17 00:00:00 2001
From: "Hahn Axel (hahn)" <axel.hahn@unibe.ch>
Date: Thu, 21 Dec 2023 10:54:42 +0100
Subject: [PATCH] rename backup server check

---
 check_iml_backup_server | 149 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 149 insertions(+)
 create mode 100755 check_iml_backup_server

diff --git a/check_iml_backup_server b/check_iml_backup_server
new file mode 100755
index 0000000..9427730
--- /dev/null
+++ b/check_iml_backup_server
@@ -0,0 +1,149 @@
+#!/bin/bash
+# ======================================================================
+#
+# Check IML BACKUP SERVER
+#
+# requires access to storage_helper.sh
+# in /opt/imlbackup/server/
+#
+# ----------------------------------------------------------------------
+# 2020-07-27  v0.x  <axel.hahn@iml.unibe.ch>
+# 2023-12-20  v0.2  <axel.hahn@iml.unibe.ch>
+# 2023-12-21  v1.0  <axel.hahn@iml.unibe.ch>  first version
+# ======================================================================
+
+
+. $(dirname $0)/inc_pluginfunctions
+export self_APPVERSION=1.0
+
+sInstalldir=/opt/imlbackup/server
+sScript=storage_helper.sh
+sMode=
+
+# ----------------------------------------------------------------------
+# FUNCTIONS
+# ----------------------------------------------------------------------
+
+function showHelp(){
+    local _self; _self=$(basename $0)
+    cat <<EOF
+$( ph.showImlHelpHeader )
+
+Show status of backup server.
+You can get the count of connections or the status of server backup.
+
+See https://os-docs.iml.unibe.ch/iml-backup-server/
+
+SYNTAX:
+$_self [-d DIRECTORY] -m MODE
+
+OPTIONS:
+    -h or --help   show this help.
+    -d or --dir    set installation dir of iml deployment to find its check skript
+                   default dir: ${sInstalldir}
+                   script: ${sInstalldir}/${sScript}
+    -m or --mode   mode: set type of result; one of status|backupstatus
+                     backupstatus  status of backup sets of all servers
+                     status        count of connected servers
+
+EXAMPLE:
+$_self -m status 
+$_self -m backupstatus 
+
+EOF
+}
+
+function _getServerOfStatus(){
+    local _key="$1"
+    local _data="$2"
+    grep "$_key .*| [0-9].* |" <<< "$_data"
+}
+
+function _getStatusCount(){
+    _getServerOfStatus "$1" "$2" | wc -l
+}
+# ----------------------------------------------------------------------
+# MAIN
+# ----------------------------------------------------------------------
+
+# --- check param -h
+while [[ "$#" -gt 0 ]]; do case $1 in
+    -h|--help)      showHelp; exit 0;;
+    -d|--dir)       sInstalldir=$2; shift ;shift;;
+    -m|--mode)      sMode=$2;
+                    shift ;shift
+                    if ! grep -E "^(status|backupstatus)$" <<< "$sMode" >/dev/null; then
+                        ph.abort "ERROR: unknown mode [$sMode]."
+                    fi
+                    ;;
+    *) echo "ERROR: Unknown parameter: $1"; showHelp; exit 1;
+esac; done
+
+if [ -z "$sMode" ]; then
+    ph.abort "ERROR: The mode was not set. Use parameter -m for it. Get help wit -h."
+fi
+
+myscript="$sInstalldir/$sScript"
+
+if [ ! -x "$myscript" ]; then
+    ph.abort "UNKNOWN: $myscript is not available / executable. Use -d to fix the installation dir. Get help wit -h."
+fi
+
+# --- read data
+data=$( "$myscript" "$sMode" )
+
+case "$sMode" in
+    "backupstatus")
+        typeset -i iTotal;   iTotal=$(  grep "^total : " <<< "$data" | cut -f 2 -d ":" | awk '{ print $1 }' )
+        typeset -i iErrors;  iErrors=$( grep "^errors: " <<< "$data" | cut -f 2 -d ":")
+
+        typeset -i iOK;         iOK=$(         _getStatusCount "\." "$data" )
+        typeset -i iNotStarted; iNotStarted=$( _getStatusCount "\?" "$data")
+        typeset -i iDisable;    iDisable=$(    _getStatusCount "D"  "$data" )
+        typeset -i iRunning;    iRunning=$(    _getStatusCount "R"  "$data")
+
+        if [ $iErrors -gt 0 ]; then
+            ph.setStatus critical
+        fi
+        if [ $iNotStarted -eq $iTotal ]; then
+            ph.setStatus unknown
+        fi
+        ph.status "Server Backups - $iTotal servers in backup - $iErrors errors - $iDisable disbled - $iRunning running"
+        echo List of server backups grouped by status
+        echo
+        (
+            # draw 1st line with table header
+            echo "$data" | grep "server.*start.*end"
+            echo
+
+            # show servers grouped by status
+            for mystatus in E D R "\?" D "\."
+            do
+                _getServerOfStatus "$mystatus" "$data"
+            done
+            echo -e "\e[0m"
+            echo "$data" | grep "server.*start.*end"
+            echo
+        ) | tr '|' ':'
+
+        ph.perfadd "notstarted"   "${iNotStarted}"   "" "" 0 $iTotal
+        ph.perfadd "disabled"     "${iDisable}"      "" "" 0 $iTotal
+        ph.perfadd "ok"           "${iOK}"           "" "" 0 $iTotal
+        ph.perfadd "running"      "${iRunning}"      "" "" 0 $iTotal
+        ph.perfadd "error"        "${iErrors}"       "" "" 0 $iTotal
+        ;;
+    "status")
+        typeset -i iRunning; iRunning=$( grep "STATUS" <<< "$data" | cut -f 2 -d " ")
+        typeset -i iMax;     iMax=$(     grep "STATUS" <<< "$data" | cut -f 8 -d " " | tr -d '.')
+
+        # --- status output
+        ph.status "Backups running: $iRunning (max $iMax)"
+        # echo "$data"
+
+        ph.perfadd "running"   "${iRunning}"   "" "" 0 $iMax
+        ;;
+esac
+
+ph.exit
+
+# ----------------------------------------------------------------------
-- 
GitLab