#!/bin/bash
#< Nagios plugin to monitor Postfix mail queue
AWK="/usr/bin/awk"
BASENAME="/usr/bin/basename"
ECHO="/bin/echo"
EGREP="/bin/egrep"
POSTQUEUE="/usr/sbin/postqueue"
SED="/usr/bin/sed"
THISPROG=$( ${BASENAME} $0 )
CRIT=0
WARN=0
VERBOSE=0
E_SUCCESS="0"
E_WARNING="1"
E_CRITICAL="2"
E_UNKNOWN="3"
function print_error {
${ECHO} "Error: $@" >&2
}
function printv {
(( VERBOSE )) && {
${ECHO} "--> $@"
}
}
function print_usage {
{
${ECHO} "Usage: ${THISPROG} [-hv]"
${ECHO} " -h Display this usage message"
${ECHO} " -v Verbose mode"
} >&2
}
function check_args {
if [ "${CRIT}" -eq "0" -o "${WARN}" -eq "0" ]; then
${ECHO} "UNKNOWN: WARN and CRIT are mandatory and must be >0"
exit ${E_UNKNOWN}
fi
${ECHO} "${WARN}" | ${EGREP} -q "^[0-9]+$"
if [ "$?" -ne "0" ]; then
${ECHO} "UNKNOWN: WARN must be an integer"
exit ${E_UNKNOWN}
fi
${ECHO} "${CRIT}" | ${EGREP} -q "^[0-9]+$"
if [ "$?" -ne "0" ]; then
${ECHO} "UNKNOWN: CRIT must be an integer"
exit ${E_UNKNOWN}
fi
if [ "${CRIT}" -le "${WARN}" ]; then
${ECHO} "UNKNOWN: CRIT must be > WARN"
exit ${E_UNKNOWN}
fi
}
function do_check {
MAILQ_ITEMS=$( ${POSTQUEUE} -p | ${SED} -n '$p' | ${AWK} '{print $5}' )
if [ "${MAILQ_ITEMS}" = "" ]; then
${ECHO} "OK: mailq is empty|mailq=0;${WARN};${CRIT}" && exit ${E_SUCCESS}
fi
if [ "${MAILQ_ITEMS}" -ge "${CRIT}" ]; then
${ECHO} "CRITICAL: ${MAILQ_ITEMS} messages in mailq|mailq=${MAILQ_ITEMS};${WARN};${CRIT}" && exit ${E_CRITICAL}
elif [ "${MAILQ_ITEMS}" -ge "${WARN}" ]; then
${ECHO} "WARNING: ${MAILQ_ITEMS} messages in mailq|mailq=${MAILQ_ITEMS};${WARN};${CRIT}" && exit ${E_WARNING}
else
${ECHO} "OK: ${MAILQ_ITEMS} messages in mailq|mailq=${MAILQ_ITEMS};${WARN};${CRIT}" && exit ${E_SUCCESS}
fi
}
#
# main()
#
while getopts ":hvc:w:" OPTION; do
case ${OPTION} in
"c") CRIT=${OPTARG} ;;
"w") WARN=${OPTARG} ;;
"h") print_usage && exit 0 ;;
"v") VERBOSE=1 ;;
* ) print_usage && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [ "$#" -ne "0" ]; then
print_usage && exit ${E_UNKNOWN}
fi
check_args
do_check
# not reached
exit ${E_SUCCESS}