diff --git a/check_requirements b/check_requirements index 9008da192e34972e2b8683b6cb12f11043b1604a..ab209325aa75455213227c07345d423d9cc25ec9 100755 --- a/check_requirements +++ b/check_requirements @@ -12,12 +12,13 @@ # 2023-02-13 v1.0 ah initial version with check for processes, tcp/ udp # 2023-02-15 v1.1 ah add label # 2024-06-07 v1.2 ah use iml help and add link to docs +# 2025-02-11 v1.3 ah add ping check; add timeout in connection check # ====================================================================== . "$( dirname $0 )/inc_pluginfunctions" -self_APPVERSION=1.2 +self_APPVERSION=1.3 self=$( basename $0 ) @@ -63,6 +64,7 @@ PARAMETERS: TYPE string one of tcp|udp TARGET string target host PORT int port number + -i|--ping TARGET ping a target system -l|--label STRING add label to divide the output in multiple sections -p|--process STRING check if a process with given regex exists in the output of 'ps aux' @@ -124,6 +126,10 @@ function newline(){ " } +# ---------------------------------------------------------------------- +# check functions +# ---------------------------------------------------------------------- + # check in process list # param string regex to search for in output of "ps aux" function chkProcess(){ @@ -145,7 +151,7 @@ function chkProcess(){ newline } -# check connection +# Check connection # param string type: one of tcp|udp # param string target: a servername eg. localhost or www.example.com # param integer port number to connect @@ -155,11 +161,11 @@ function chkConnection(){ local port="$3" # port number COUNT+=1 - if ! echo "$type/$target/$port" | grep -E "^(tcp|udp)/[a-z][a-z0-9\.\-]*/[1-9][0-9]*$" >/dev/null 2>&1; then + if ! echo "$type/$target/$port" | grep -Eq "^(tcp|udp)/[a-z][a-z0-9\.\-]*/[1-9][0-9]*$"; then COUNTERR+=1 OUT+="ERROR syntax error detected - verify params for port check; type=$type (one of tcp|udp) target=$target (servername to connect) port=$port" else - if (>/dev/$type/$target/$port) 2>/dev/null; then + if timeout 1 bash -c ">/dev/$type/$target/$port" 2>/dev/null; then COUNTOK+=1 addOutput "OK" "connection" "$type to $target on port $port" else @@ -172,6 +178,25 @@ function chkConnection(){ newline } +# Check ping to a target +# param string target: a servername eg. localhost or www.example.com +function chkPing(){ + local myHost="$1" + local cmdout + + COUNT+=1 + if cmdout="$( ping -c 1 $myHost 2>&1 )"; then + COUNTOK+=1 + addOutput "OK" "ping" "ping to $myHost $( echo "$cmdout" | head -2 | tail -1 | rev | cut -f -1,2 -d ' ' | rev)" + else + COUNTERR+=1 + ph.setStatus critical + addOutput "ERROR" "ping" "ping to host $myHost FAILED" + fi + addVerbose "$cmdout" + newline +} + # ---------------------------------------------------------------------- # MAIN # ---------------------------------------------------------------------- @@ -184,6 +209,7 @@ fi # parse params while [[ "$#" -gt 0 ]]; do case $1 in -c|--connect) chkConnection "$2" "$3" "$4"; shift;shift;shift;shift ;; + -i|--ping) chkPing "$2"; shift;shift ;; -l|--label) showLabel "$2"; shift;shift ;; -p|--process) chkProcess "$2";shift 2;; -h|--help) showHelp; exit 0;;