diff --git a/check_conn b/check_conn new file mode 100755 index 0000000000000000000000000000000000000000..0e90305f780c074444977cdc1f18335f88415d08 --- /dev/null +++ b/check_conn @@ -0,0 +1,148 @@ +#!/usr/bin/env bash +# ====================================================================== +# +# Check connection ... is a host available on a given port via tcp or udp +# +# requirements: +# - none +# +# ---------------------------------------------------------------------- +# 2021-11-05 v0.0 <axel.hahn@iml.unibe.ch> +# ====================================================================== + + +. `dirname $0`/inc_pluginfunctions + +cfgfile=$( dirname $0 )/$( basename $0 ).cfg + + +out="" + +# ---------------------------------------------------------------------- +# functions +# ---------------------------------------------------------------------- + +function getChecks(){ + while [ $# -gt 0 ]; do + test -r "$1" && grep -E "^(tcp|udp)/" "$1" 2>&1 + shift 1 + done +} + + +function showHelp(){ +cat <<EOF +______________________________________________________________________ + +CHECK_CONN check if is a host available on a given port via tcp or udp +from local machine $( hostname -f ). + +(c) Institute for Medical Education - Univerity of Bern +Licence: GNU GPL 3 +______________________________________________________________________ + + +SYNTAX: +`basename $0` OPTIONS + +You can create a file named $cfgfile +and add your connections there. +To start you can copy the file $cfgfile.dist + +OPTIONS: + + -h or --help show this help. + -t CONNECTION test given connection; This param ignores entries + in the config file. For multiple connection tests + quote the parameter value and set spaces between + the connections. + +PARAMETERS: + + CONNECTION Connection in the same syntax like in the config: + tcp/host/port + udp/host/port +EXAMPLES: + +`basename $0` If no param is given it checks entries in $cfgfile + +`basename $0` -t "tcp/api.example.com/443" + Check a single connection + +`basename $0` -t "tcp/api.example.com/443 tcp/localhost/3306" + Check multiple connections. + +EOF +} +# ---------------------------------------------------------------------- +# MAIN +# ---------------------------------------------------------------------- + +# --- check required tools +# ph.require bc top + + +# --- check param -h +case "$1" in + "--help"|"-h") + showHelp + exit 0 + ;; + *) +esac + +configline=$( ph.getValueWithParam "" t "$@" ) + +test -z "$configline" || cfgfile="" + + + +typeset -i iWarnings=0 +typeset -i iErrors=0 +typeset -i iOK=0 +typeset -i iCount=0 + +for myline in $( echo $configline; getChecks $cfgfile ) +do + + iCount=$iCount+1 + + out="$out +$myline" + + # --- syntax check of config entry + echo "$myline" | grep -E "^(tcp|udp)/[a-z][a-z0-9\.\-]*/[0-9]*$" >/dev/null 2>&1 + if [ $? -ne 0 ]; then + out="$out SKIP: INVALID ENTRY" + iWarnings=$iWarnings+1 + else + >/dev/$myline + if [ $? -ne 0 ]; then + out="$out FAILED" + iErrors=$iErrors+1 + else + out="$out OK" + iOK=$iOK+1 + fi + fi +done + +# ----- output +if [ $iCount -eq 0 ]; then +ph.setStatus "unknown" +ph.status "tcp check - NO checks" +test $iCount -eq 0 && echo " +No config entry was found. Create a file named $cfgfile +and add your connections i.e. +tcp/www.example.com/443" +else + test $iWarnings -gt 0 && ph.setStatus "warning" + test $iErrors -gt 0 && ph.setStatus "critical" + ph.status "tcp check - $iCount checks - $iOK OK; $iWarnings warnings; $iErrors errors $out" +fi + +# ----- CLEANUP AND BYE! + +ph.exit + +# ---------------------------------------------------------------------- diff --git a/check_conn.cfg.dist b/check_conn.cfg.dist new file mode 100644 index 0000000000000000000000000000000000000000..2f1aa58b712b6c757f57914ad19abaca0f8f5e34 --- /dev/null +++ b/check_conn.cfg.dist @@ -0,0 +1,19 @@ +# ---------------------------------------------------------------------- +# +# This is an example file for check_tcp +# You need to rename it and then make your changes. +# +# lines not starting with tcp or udp will be ignored. So feel free +# to use # or ; as commented lines or add empty lines for spacing. +# +# ---------------------------------------------------------------------- + + +# check if a needed api server is reachable +tcp/api.example.com/80 +tcp/api.example.com/443 + +# check local mysql port +tcp/localhost/3306 + +# ----------------------------------------------------------------------