#!/usr/bin/bash
#
# Nagios read data from /tmp/sar.txt
#
# Description: Check any Data from /tmp/sar.txt.
#              The plugin was written and testet on Solaris 8/10
#              and now on RHEL 4/5/6 by Julian Jost
#
# Author     : Peter Tuschy, Julian Jost (Linux Part)
# Version    : 1.1
# Date       : 2011-08-24
# 
#
	      
LANG=C
export LANG

REVISION="Version: 1.1"

# where we are started
WHERE=`dirname $0`

# setting default exit values
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

# import exit values from utils.sh if we found one
if   [ -f ${WHERE}/utils.sh ] ; then
    . ${WHERE}/utils.sh
elif [ -f ${WHERE}/../utils.sh ] ; then
    . ${WHERE}/../utils.sh
fi

usage() {
    echo "Usage: $0 -l <label> -d <description> -p <parameter> [-w <warning>] [-c <critical>]"
    echo "$REVISION"
    exit $STATE_UNKNOWN
}

# command line parsing
while [ "$1" != "" ];
do
	case $1 in
	-w)
	    shift
	    warning=$1
	    ;;
	-c)
	    shift
	    critical=$1
	    ;;
	-l)
	    shift
	    label=$1
	    ;;
	-d)
	    shift
	    description=$1
	    ;;
	-p)
	    shift
	    parameter=$1
	    ;;
	--help|-h)
	    usage
	    ;;
	-*)
	    usage
	    ;;
	*)
	    usage
	esac
	shift
done

if [ -z "${label}" -o -z "${description}" -o -z "${parameter}" ] ; then
    usage
    exit $STATE_UNKNOWN
fi

if [ ! -z "$warning" -a ! -z "$critical" ] ; then
	if [ $warning -gt $critical ] ; then
    		echo "UNKNOWN - Warning value must be less than the critical value"
    		exit $STATE_UNKNOWN
	fi
fi

# 
# 

outdated() {
    echo "${label} UNKNOWN - outdated data in $1"
    exit $STATE_UNKNOWN
}
missing() {
    echo "${label} UNKNOWN - missing ${WHERE}/current_time or sar.txt"
    exit $STATE_UNKNOWN
}

OS=`uname`
case "${OS}" in
    SunOS )
        if [ -x "${WHERE}/current_time" -a -f /tmp/sar.txt ] ; then
            TCURRENT=`${WHERE}/current_time -65`
            TSAMPLE=`awk /^SampleTime/'{ print $2 }' /tmp/sar.txt`
            if [ $TCURRENT -lt $TSAMPLE ] ; then
                USESAR=/tmp/sar.txt
	    else
		outdated /tmp/sar.txt
            fi
	else
	    missing
        fi

	value=`awk "/^${parameter}/"'{ print $2 }' ${USESAR}`
	;;
    Linux )
	if [ -x "${WHERE}/current_time" -a -f /tmp/sar.txt ] ; then
            TCURRENT=`${WHERE}/current_time -65`
            TSAMPLE=`awk /^SampleTime/'{ print $2 }' /tmp/sar.txt`
            if [ $TCURRENT -lt $TSAMPLE ] ; then
                USESAR=/tmp/sar.txt
            else
                outdated /tmp/sar.txt
            fi
	else
            missing
        fi
 
	value=`awk "/^${parameter}/"'{ print $2 }' ${USESAR}`
        ;;   

    *)
	echo "OS ${OS} not supportet by this check"
	exit $STATE_UNKNOWN
esac


if [ -z "${value}" ]; then
        echo "${label} UNKNOWN - no data found matching ${parameter} in /tmp/sar.txt"
	exit $STATE_UNKNOWN
fi

PERFDATA="SAR=${value};${warning};${critical};;;"
PLUGDATA=${description}
OUTPUT=${value}

#elif [ `echo "if( ${OUTPUT} >= ${SAR_WARNING} ) {1}" | bc` ]; then
if [ ! -z "$critical" ]; then
	if [ $OUTPUT -ge $critical ]; then
       		echo "${label} CRITICAL - ${value} ${PLUGDATA} | ${PERFDATA}"
		exit $STATE_CRITICAL
	fi
fi
if [ ! -z "$warning" ]; then 
	if [ $OUTPUT -ge $warning ]; then
      		echo "${label} WARNING - ${value} ${PLUGDATA} | ${PERFDATA}"
        	exit $STATE_WARNING
	fi
fi

echo "${label} OK - ${value} ${PLUGDATA} | ${PERFDATA}"
exit 0
