-
Hahn Axel (hahn) authoredHahn Axel (hahn) authored
check_iml_backup_server 5.33 KiB
#!/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
# ----------------------------------------------------------------------