cd $(dirname "$0") . setup/parameters.sh function nagios_find_host { echo "$@" | grep -oP '\-H\s*\K[^\s]*' } function find_host_param { local id="$1" && shift local pname="$1" && shift local defval="$1" && shift local val=$(cat setup/${pname}.txt | grep -P "^$id" | awk '{ print $2 }') [ -n "$val" ] || val="$defval" echo -n "$val" } function nagios_find_host_param { local pname="$1" && shift local defval="$1" && shift local host=$(nagios_find_host "$@") find_host_param "$host" "$pname" "$defval" } function resolve_fqdn { local host="$1" && shift if [[ ! $host =~ \. ]]; then local domain=$(find_host_param "$host" domains "$default_domain") host+=".$domain" fi echo -n $host } function resolve_ip { local host="$1" && shift if [[ ! "$host" =~ ^[[:digit:]] ]]; then local fqdn=$(resolve_fqdn "$host") host=$(dig +short "$fqdn" A | head -n 1 | tr -d '\n') if [ $? -ne 0 -o -z "$host" ]; then echo "DNS resolution for host ($fqdn) failed: $(dig +short "$fqdn" A 2>&1)" exit 2 fi fi echo -n "$host" } function nagios_run { if [[ "$1" =~ ^- ]]; then cmd=${nagios_plugins}/$(basename $0) else cmd=$1 && shift [[ "$cmd" =~ ^/ ]] || cmd="${nagios_plugins}/$cmd" fi ARGS="" while [[ $# -gt 0 ]]; do key="$1" && shift case "$key" in -H) host="$1" && shift ip=$(resolve_ip "$host") if [ $? -eq 0 -a -n "$ip" ]; then ARGS+=" ${key} $ip" else echo "$ip" exit $? fi ;; *) ARGS+=" $key" esac done [ -n "$debug" ] && echo "$(date) $cmd" "$ARGS" >> /tmp/nagios.log eval "$cmd" "$ARGS" } function nagios_parse { cmd="$1"; shift output=$($cmd "$@") exit_code=$? if [ $exit_code -eq 0 ]; then last_line=$(echo "$output" | tail -1) status=$(echo $last_line | cut -d ' ' -f 1) [[ "$status" =~ ^[0-9]$ ]] || status=0 echo -n ${last_line#$status} else status=0 fi if [ $status -ne 1 ]; then echo -n " -- " lines=$(echo "$output" | sed '/^[[:space:]]*$/d' | wc -l) if [ $lines -gt 1 ]; then echo "$output" | sed '/^[[:space:]]*$/d' | head -n 1 | tr -d '\n' echo " ... " echo "------------------" echo "$output" | head -n -1 else echo "$output" | sed '/^[[:space:]]*$/d' | head -n -1 fi else echo fi if [ "$status" -eq 0 ]; then exit "2" elif [ "$status" -eq 1 ]; then exit "0" else exit "1" fi }