#!/bin/bash
# ########################################################
# Written by Open dsi  info@open-dsi.fr		         #
# ########################################################

STATUS_OK="0"
STATUS_WARNING="1"
STATUS_CRITICAL="2"
STATUS_UNKNOWN="3"

# #####################################################################
# Program usage
# #####################################################################
print_usage() {
PROGPATH=`dirname $0`
echo "Usage: $PROGPATH/check_iodelay.sh -h for help (this message)
   -w <your warnlevel>
   -c <your critlevel>
Example: $PROGPATH/check_iodelay.sh -w 10 -c 20"
}

# #####################################################################
# Check if commandline arguments are given
# #####################################################################
if [ -z "$1" ];then
        echo "Error: No arguments found."
        print_usage
        exit $STATUS_UNKNOWN
fi

# #####################################################################
# Process commandline arguments
# #####################################################################
while test -n "$1"; do
    case "$1" in
        -w)
            warn=$2
            shift
            ;;
        -c)
            crit=$2
            shift
            ;;
        -h)
            print_usage
            exit $STATUS_UNKNOWN
            ;;
        *)
            echo "Error: Unknown argument $1"
            print_usage
            exit $STATUS_UNKNOWN
            ;;
    esac
  shift
done

# #####################################################################
# Error handling for missing arguments
# #####################################################################
if [ -z ${crit} ] ||  [ -z ${warn} ]; then
        echo "Error: missing arguments."
        print_usage
        exit $STATUS_UNKNOWN
fi

# #####################################################################
# Main program
# #####################################################################
count=0            # total of blocked IP
long_out=""         # long output
add_perf=""         # extra perf data

#first generate data
iostat -c 1 2 > /tmp/tempiostat
count=$(awk 'NR==7' /tmp/tempiostat | tr -s ' ' ';' | cut -d ';' -f5 )
count=$(echo ${count%%.*})
if [ "$count" -ge ${warn} ] && [ "$count" -lt ${crit} ]; then
        State="WARNING"
elif [ "$count" -ge ${warn} ];then
        State="CRITICAL"
else
        State="OK"
fi

OUTPUT="${State}: ${count}  iodelay"

# #####################################################################
# Add SERVICEPERFDATA
# format: 'label'=value[unit-of-measure];[warn];[crit];[min];[max]
# #####################################################################
OUTPUT="$OUTPUT|iodelay=${count};${warn};${crit};;"

# #####################################################################
# Add LONGSERVICEOUTPUT, format: jail_name
# #####################################################################
# #####################################################################
# Add performance data
# format: 'label'=value[unit-of-measure];[warn];[crit];[min];[max]
# #####################################################################
#OUTPUT="$OUTPUT|$add_perf"

echo -e $OUTPUT

# #####################################################################
# Set the program return code
# #####################################################################
if [ ${State} == "WARNING" ];then 
        exit ${STATUS_WARNING}
elif [ ${State} == "CRITICAL" ];then 
        exit ${STATUS_CRITICAL}
elif [ ${State} == "UNKNOWN" ];then 
        exit ${STATUS_UNKNOWN}
else
        exit ${STATUS_OK}
fi
