#!/bin/bash

set -e

. /usr/lib/nagios/plugins/utils.sh
ECHO=echo

usage_error() {
	cat <<_ >&2
$1

USAGE: $0 [Optionen]

Moegliche Optionen sind:

-c Minuten  Critical-Schwelle fuer maximales Eintragsalter
-w Minuten  Warning-Schwelle fuer maximales Eintragsalter

-a          Ueberpruefung der Schwellenwerte nur an Arbeitstagen
-s Stunde   erste Stunde des Tages, in der eine Ueberpruefung stattfinden soll
-e Stunde   Stunde des Tages, ab der keine Ueberpruefung mehr stattfinden soll

-h Host      \
-u Benutzer   \
-p Kennwort    \ Was soll eigentlich abgefragt werden?
-d Datenbank   /
-t Tabelle    /
-f Spalte    /

-n Name     Bezeichnung des zu ueberwachenden Eintrags;
	    Default: "Der letzte Eintrag"


Das Plugin ermittelt das Alter des letzten Datumseintrags in einer MySQL-
Tabelle und erzeugt einen Fehlerstatus, wenn dieses zu hoch ist.

_
	exit $STATE_UNKNOWN
}

name='Der letzte Eintrag'
while getopts ac:d:e:f:h:n:p:s:t:u:w: opt; do
	case "$opt" in
		a)
			check_if_workday=1 ;;
		c)
			critical_minutes="$OPTARG" ;;
		d)
			mysql_args[${#mysql_args[@]}]="$OPTARG" ;;
		e)
			work_end="$OPTARG" ;;
		f)
			q_column="\`$OPTARG\`" ;;
		h|p|u)
			mysql_args[${#mysql_args[@]}]="-$opt$OPTARG" ;;
		n)
			name="$OPTARG" ;;
		s)
			work_start="$OPTARG" ;;
		t)
			table="$OPTARG" ;;
		w)
			warnings_minutes="$OPTARG" ;;
		?)
			usage_error "Unknown option -$opt."
	esac
done

[ -z "$q_column" ] &&
	echo usage_error 'Es muss mit -f ein Datenbankfeld angegeben werden.'
[ -z "$table" ] &&
	echo usage_error 'Es muss mit -t eine Datenbanktablle angegeben werden.'

last_call=$(
	mysql -s "${mysql_args[@]}" \
	      -e "SELECT ROUND(TIME_TO_SEC(TIMEDIFF(NOW(),MAX($q_column)))/60), MAX($q_column) FROM $table"
           )
minutes_since_last_call="${last_call%	*}"
last_call_date="${last_call#*	}"

message="$name wurde um $last_call_date protokolliert, also vor $minutes_since_last_call Minute"
[ $minutes_since_last_call -ne 1 ] && message="${message}n"
$ECHO "$message."

hour=$( date +%k )

if [ -n "$work_start" ] && [ $hour -lt "$work_start" ] ||
   [ -n "$work_end"   ] && [ $hour -ge "$work_end"   ] ||
   [ -z "$check_if_workday" ] || ! /usr/bin/is_workday
then
	exit $STATE_OK
elif [ -n "$critical_minutes" ] && [ $minutes_since_last_call -gt "$critical_minutes" ]; then
	exit $STATE_CRITICAL
elif [ -n "$warnings_minutes" ] && [ $minutes_since_last_call -gt "$warnings_minutes" ]; then
	exit $STATE_WARNING
else
	exit $STATE_OK
fi
