#!/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 # 2023-12-21 v1.1 <axel.hahn@iml.unibe.ch> Update help text # 2024-03-22 v1.2 <axel.hahn@iml.unibe.ch> Update grep for backup via restic rest # ====================================================================== . $(dirname $0)/inc_pluginfunctions export self_APPVERSION=1.2 sInstalldir=/opt/imlbackup/server sScript=storage_helper.sh sMode= # ---------------------------------------------------------------------- # FUNCTIONS # ---------------------------------------------------------------------- # show help 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, --help show this help. -d, --dir PATH set installation dir of iml deployment to find its check skript default dir: ${sInstalldir} script: ${sInstalldir}/${sScript} -m, --mode 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 } # get all server entries with a given status # param string status character in 1st column; one of .|?|D|E # param string text to parse function _getServerOfStatus(){ local _key="$1" local _data="$2" # grep "$_key .*| [0-9].* |" <<< "$_data" grep "$_key .*/" <<< "$_data" } # get count of servers with a given status # param string status character in 1st column; one of .|?|D|E # param string text to parse 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 with -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 with -h." fi # --- read data + remove ansii colors data=$( "$myscript" "$sMode" | sed 's/\x1B\[[0-9;]\{1,\}[A-Za-z]//g' ) 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 (non-OK only)" 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 "\?" do srvlist=$( _getServerOfStatus "$mystatus" "$data" ) test -n "$srvlist" && ( echo "$srvlist"; echo ) done 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 # ----------------------------------------------------------------------