#!/bin/bash # ====================================================================== # # Check ONEHOST # # requirements: # - sudo onehost # # ---------------------------------------------------------------------- # 2023-06-09 v1.0 <axel.hahn@unibe.ch> initial version # 2023-06-12 v1.1 <axel.hahn@unibe.ch> show message if no sudo permissions on onehost command exist # ====================================================================== . $(dirname $0)/inc_pluginfunctions self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] ) self_APPVERSION=1.1 # ---------------------------------------------------------------------- # functions # ---------------------------------------------------------------------- function showHelp(){ cat <<EOF ______________________________________________________________________ $self_APPNAME v$self_APPVERSION (c) Institute for Medical Education - University of Bern Licence: GNU GPL 3 ______________________________________________________________________ show count of hosts in OpenNebula and warn if a host is down. SYNTAX: $(basename $0) [ -w value -c value -h ] -w VALUE cpu usage warning level (default: 1) -c VALUE cpu usage critical level (default: 2) -h or --help show this help. PARAMETERS: None. EXAMPLE: $(basename $0) -c 1 set to critical if the 1st host is off. EOF } # ---------------------------------------------------------------------- # MAIN # ---------------------------------------------------------------------- # --- check required tools ph.require onehost # --- check param -h case "$1" in "--help"|"-h") showHelp exit 0 ;; *) esac # --- set optional limits typeset -i iWarnLimit=$( ph.getValueWithParam 1 w "$@") typeset -i iCriticalLimit=$( ph.getValueWithParam 2 c "$@") # --- get data cmdout=$( sudo onehost list --csv 2>&1 ) if ! grep "ID,NAME" <<< "$cmdout" >/dev/null; then ph.setStatus "unknown" echo "UNKNOWN: sudo onehost failed." echo "$cmdout" ph.exit fi # header=$( head -1 <<< "$cmdout" ) csvdata=$( echo "$cmdout" | sed -n '2,$p' ) # --- get result out="" typeset -i iTotal; iTotal=$( echo "$csvdata" | wc -l ) typeset -i iOn; iOn=$( echo "$csvdata" | grep -c "on$" ) typeset -i iOther; iOther=$iTotal-$iOn ph.perfadd "total" "${iTotal}" ph.perfadd "on" "${iOn}" ph.perfadd "other" "${iOther}" if [ $iOther -ge $iCriticalLimit ]; then out="ERROR: not all hosts are up - count $iOther reached critical value $iCriticalLimit" ph.setStatus "critical" elif [ $iOther -ge $iWarnLimit ]; then out="ERROR: not all hosts are up - count $iOther reached critical value $iWarnLimit" ph.setStatus "warning" fi ph.status "ONEHOST - Total: $iTotal .. on: $iOn .. other: $iOther" echo "$cmdout" echo "$out" ph.exit