#!/bin/bash
#set -xv
#
# Script zum prüfen der SNMPTT Datenbank.
# in Anlehnung an
# https://www.netways.org/repositories/entry/plugins/addons/syslogread/trunk/check_snmp_traps?rev=5e8d06f27a51431427aaa1d97167afcb771b1086
# complemented by kdrexel@noris.net
# Date: 2012-10-18
# Reason: 12663561
#set -xv

MYSQL=/usr/bin/mysql
MYSQL_HOST=syslog.noris.net
MYSQL_USER=snmptt
MYSQL_DB=snmptt
MYSQL_PASS=Traps4net

PROGNAME=`/usr/bin/basename $0`
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION="0.0.4"

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

print_usage() {
    echo "Usage: $PROGNAME -H <hostname> -t <during last n minutes> (Default is 5) -u (look in unknown-Table) -e (extended Output)"
    echo "Usage: $PROGNAME --help"
    echo "Usage: $PROGNAME --version"
}
print_help() {
    print_revision 
    echo ""
    print_usage
    echo ""
    echo "Plugin zum auslesen von SNMP Traps aus der Mysql"
    echo "Datenbank von SNMPTT"
    echo "weitere Infos unter http://www.nagios-wiki.de/nagios/howtos/snmptt"
    echo ""
}

print_revision() {
    echo -e "$PROGNAME Version $REVISION\n"
    echo -e "The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\ncopies of the plugins under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.\n"
}

if [ $# -lt 1 ]; then
    print_usage
    exit $STATE_UNKNOWN
fi

unknown=0
extended=0
timelap=5
while test -n "$1"; do
    case "$1" in
        --help)
            print_help
            exit $STATE_OK
            ;;
        -h)
            print_help
            exit $STATE_OK
            ;;
        --version)
            print_revision $PROGNAME $VERSION
            exit $STATE_OK
            ;;
        -V)
            print_revision $PROGNAME $VERSION
            exit $STATE_OK
            ;;
        --hostname)
            HOST=$2
            shift
            shift
            ;;
        -H)
            HOST=$2
            shift
            shift
            ;;
	-t)	
	    timelap=$2
	    shift
	    shift
            ;;
	-e)
	    extended=1
	    shift
	    ;;
	-u)
	    unknown=1
	    shift
	    ;;
        *)
            echo "Unknown argument: $1"
            print_usage
            exit $STATE_UNKNOWN
            ;;
    esac
done

# Anzahl der Critical Traps
#COUNT_CRITICAL=`echo "select count(*) from snmptt where hostname like '%$HOST%' and severity = 'CRITICAL' and trapread = '0'" | mysql -s -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB`
COUNT_CRITICAL=`echo "select count(*) from snmptt where hostname like '%$HOST%' and severity = 'CRITICAL' and traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB`
if [ $? -gt 0 ]; then
   echo "UNKNOWN: SQL Select failed"
   exit $STATE_UNKNOWN
fi


# Anzahl der Warning Traps
#COUNT_WARNING=`echo "select count(*) from snmptt where hostname like '%$HOST%' and severity like 'WARNING' and trapread = '0'" | mysql -s -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB`
COUNT_WARNING=`echo "select count(*) from snmptt where hostname like '%$HOST%' and severity like 'WARNING' and traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB`

if [ $? -gt 0 ]; then
   echo "UNKNOWN: SQL Select failed"
   exit $STATE_UNKNOWN
fi

# Anzahl der Datenbank eintr�ge f�r den Host
COUNT=`echo "select count(*) from snmptt where hostname like '%$HOST%'" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB`

if [ $? -gt 0 ]; then
   echo "UNKNOWN: SQL Select failed"
   exit $STATE_UNKNOWN
fi

if [ $extended -eq 1 ]; then
	CRITICAL_MSG=$(echo "select trapoid,formatline from snmptt where hostname like '%$HOST%' and severity = 'CRITICAL' and traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB)
	WARNING_MSG=$(echo "select trapoid,formatline from snmptt where hostname like '%$HOST%' and severity = 'WARNING' and traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB)
fi

if [ $unknown -eq 1 ]; then
	COUNT_UNKNOWN1=$(echo "select count(*) from snmptt where hostname like '%$HOST%' and severity = 'UNKNOWN' and  traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB) 
	COUNT_UNKNOWN2=$(echo "select count(*) from snmptt_unknown where hostname like '%$HOST%' and  traptime>date_sub(now(), interval $timelap minute)" | mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB)
	if [ $extended -eq 1 ]; then
		UNKNOWN1_MSG=$(echo "select trapoid,formatline from snmptt where hostname like '%$HOST%' and severity = 'UNKNOWN' and traptime>date_sub(now(), interval $timelap minute)" |  mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB)
		UNKNOWN2_MSG=$(echo "select trapoid,formatline from snmptt_unknown where hostname like '%$HOST%'and traptime>date_sub(now(), interval $timelap minute)" |  mysql -s -h $MYSQL_HOST -u $MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB)
	fi
	if [ $COUNT_UNKNOWN1 -gt 0 ]; then
		echo "CRITICAL: $COUNT_UNKNOWN1 Unknown Traps for $HOST in Database snmptt"
   		if [ $extended -eq 1 ]; then
			echo "UNKNOWN1_MSG"
		fi
		exit $STATE_CRITICAL
	else
		if [ $COUNT_UNKNOWN2 -gt 0 ]; then
			echo "CRITICAL: $COUNT_UNKNOWN2 Unknown Traps for $HOST."
   			if [ $extended -eq 1 ]; then
				echo "UNKNOWN1_MSG"
			fi
			exit $STATE_CRITICAL
		fi
	fi
	echo "OK: No Unknown Traps for $HOST."
	exit $STATE_OK
fi # end $unknown -eq 1

if [ $COUNT_CRITICAL -gt 0 ]
   then
   echo "CRITICAL: $COUNT_CRITICAL Critical Traps for $HOST. $COUNT Traps in Database"
   if [ $extended -eq 1 ]; then
	echo $CRITICAL_MSG
   fi
   exit $STATE_CRITICAL
elif [ $COUNT_WARNING -gt 0 ]
   then 
   echo "WARNING: $COUNT_WARNING Warning Traps for $HOST. $COUNT Traps in Database"
   if [ $extended -eq 1 ]; then
	echo $WARNING_MSG
   fi
   exit $STATE_WARNING
else
   echo "OK: No Warning or Critical Traps for $HOST. $COUNT Traps in Database"
   exit $STATE_OK
fi
