#!/bin/sh
###############################################
#
# Nagios script to check dovecot status
#
# Copyright 2007, 2008 Ian Yates
#
# See usage for command line switches
#
# Created: 2007-04-27 (i.yates@uea.ac.uk)
# Updated: 2007-04-27 (i.yates@uea.ac.uk)
# Updated: 2007-04-30 (i.yates@uea.ac.uk) - Added login availability check
# Updated: 2007-04-30 (i.yates@uea.ac.uk) - Changes ps options to return quicker
# Updated: 2008-11-27 (i.yates@uea.ac.uk) - Added GPLv3 licence
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
###############################################
. /usr/share/nagios/libexec/utils.sh
VERSION="1.3"
PS=/bin/ps
GREP=/usr/bin/grep
WC=/usr/bin/wc
FLAG_VERBOSE=FALSE
FLAG_DOVECOT=FALSE
FLAG_IMAP_LOGIN=FALSE
FLAG_IMAP=FALSE
FLAG_POP_LOGIN=FALSE
FLAG_POP=FALSE
LEVEL_WARN="0"
LEVEL_CRIT="0"
RESULT=""
EXIT_STATUS=$STATE_OK
DOVE_STATUS_TEXT=""
IMAP_STATUS_TEXT=""
POP_STATUS_TEXT=""
###############################################
#
## FUNCTIONS
#
## Print usage
usage() {
echo " check_dovecot $VERSION - Nagios dovecot check script"
echo ""
echo " Usage: check_dovecot [-d] ({-i|-p|-m|-o} -w -c ) [ -v ] [ -h ]"
echo ""
echo " -d Check dovecot general status"
echo " -i Check dovecot IMAP status"
echo " -p Check dovecot POP status"
echo " -m Check number of IMAP login processes"
echo " -o Check number of POP login processes"
echo " -w Number of connections at which a warning is triggered"
echo " -c Number of connections at which a critical is triggered"
echo " -v Verbose output (ignored for now)"
echo " -h Show this page"
echo ""
}
## Process command line options
doopts() {
if ( `test 0 -lt $#` )
then
while getopts dipmow:c:vh myarg "$@"
do
case $myarg in
h|\?)
usage
exit;;
d)
FLAG_DOVECOT=TRUE;;
i)
FLAG_IMAP=TRUE;;
p)
FLAG_POP=TRUE;;
m)
FLAG_IMAP_LOGIN=TRUE;;
o)
FLAG_POP_LOGIN=TRUE;;
w)
LEVEL_WARN=$OPTARG;;
c)
LEVEL_CRIT=$OPTARG;;
v)
FLAG_VERBOSE=TRUE;;
*) # Default
usage
exit;;
esac
done
else
usage
exit
fi
}
# Write output and return result
theend() {
echo $RESULT
exit $EXIT_STATUS
}
#
## END FUNCTIONS
#
#############################################
#
## MAIN
#
# Handle command line options
doopts $@
# Do the do
# Handle dovecot test
if test $FLAG_DOVECOT = "TRUE" ; then
TMPOUT=`$PS ax | $GREP dovecot | $GREP -v 'imap\|pop' | $GREP -v $$ | $GREP -v grep | $WC -l`
if test "$TMPOUT" -eq "0"; then
DOVE_STATUS_TEXT="Dovecot CRITICAL - master processes NOT running"
EXIT_STATUS=$STATE_CRITICAL
else
DOVE_STATUS_TEXT="Dovecot OK - master processes running"
fi
RESULT="$RESULT$DOVE_STATUS_TEXT | "
fi
# Handle IMAP login test
if test $FLAG_IMAP_LOGIN = "TRUE" ; then
if test -n "$LEVEL_WARN" -a -n "$LEVEL_CRIT" -a "$LEVEL_WARN" -gt "$LEVEL_CRIT" ; then
TMPOUT=`$PS ax | $GREP 'imap-login' | $GREP -v grep | $WC -l`
if test "$TMPOUT" -gt "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="IMAP login process OK - $TMPOUT connection(s) available."
else
if test "$TMPOUT" -le "$LEVEL_CRIT" ; then
IMAP_STATUS_TEXT="IMAP login process CRITICAL - $TMPOUT connection(s) available."
EXIT_STATUS=$STATE_CRITICAL
else
if test "$TMPOUT" -le "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="IMAP login process WARNING - $TMPOUT connection(s) available."
if test $EXIT_STATUS -ne $STATE_CRITICAL ; then EXIT_STATUS=$STATE_WARNING ; fi
fi
fi
fi
RESULT="$RESULT$IMAP_STATUS_TEXT | "
else
echo "ERROR: Invalid warning/critical values"
usage
exit
fi
fi
# Handle POP login test
if test $FLAG_POP_LOGIN = "TRUE" ; then
if test -n "$LEVEL_WARN" -a -n "$LEVEL_CRIT" -a "$LEVEL_WARN" -gt "$LEVEL_CRIT" ; then
TMPOUT=`$PS ax | $GREP 'pop3-login' | $GREP -v grep | $WC -l`
if test "$TMPOUT" -gt "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="POP login process OK - $TMPOUT connection(s) available."
else
if test "$TMPOUT" -le "$LEVEL_CRIT" ; then
IMAP_STATUS_TEXT="POP login process CRITICAL - $TMPOUT connection(s) available."
EXIT_STATUS=$STATE_CRITICAL
else
if test "$TMPOUT" -le "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="POP login process WARNING - $TMPOUT connection(s) available."
if test $EXIT_STATUS -ne $STATE_CRITICAL ; then EXIT_STATUS=$STATE_WARNING ; fi
fi
fi
fi
RESULT="$RESULT$IMAP_STATUS_TEXT | "
else
echo "ERROR: Invalid warning/critical values"
usage
exit
fi
fi
# Handle IMAP test
if test $FLAG_IMAP = "TRUE" ; then
if test -n "$LEVEL_WARN" -a -n "$LEVEL_CRIT" -a "$LEVEL_WARN" -lt "$LEVEL_CRIT" ; then
TMPOUT=`$PS ax | $GREP -v 'imap-login' | $GREP imap | $GREP -v grep | $WC -l`
if test "$TMPOUT" -lt "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="IMAP load OK - $TMPOUT IMAP connection(s)."
else
if test "$TMPOUT" -ge "$LEVEL_CRIT" ; then
IMAP_STATUS_TEXT="IMAP load CRITICAL - $TMPOUT IMAP connection(s)."
EXIT_STATUS=$STATE_CRITICAL
else
if test "$TMPOUT" -ge "$LEVEL_WARN" ; then
IMAP_STATUS_TEXT="IMAP load WARNING - $TMPOUT IMAP connection(s)."
if test $EXIT_STATUS -ne $STATE_CRITICAL ; then EXIT_STATUS=$STATE_WARNING ; fi
fi
fi
fi
RESULT="$RESULT$IMAP_STATUS_TEXT | "
else
echo "ERROR: Invalid warning/critical values"
usage
exit
fi
fi
# Handle POP test
if test $FLAG_POP = "TRUE" ; then
if test -n "$LEVEL_WARN" -a -n "$LEVEL_CRIT" -a "$LEVEL_WARN" -lt "$LEVEL_CRIT" ; then
TMPOUT=`$PS ax | $GREP -v 'pop3-login' | $GREP pop3 | $GREP -v grep | $WC -l`
if test "$TMPOUT" -lt "$LEVEL_WARN" ; then
POP_STATUS_TEXT="POP load OK - $TMPOUT POP connection(s)."
else
if test "$TMPOUT" -ge "$LEVEL_CRIT" ; then
POP_STATUS_TEXT="POP load CRITICAL - $TMPOUT POP connection(s)."
EXIT_STATUS=$STATE_CRITICAL
else
if test "$TMPOUT" -ge "$LEVEL_WARN" ; then
POP_STATUS_TEXT="POP load WARNING - $TMPOUT POP connection(s)."
if test $EXIT_STATUS -ne $STATE_CRITICAL ; then EXIT_STATUS=$STATE_WARNING ; fi
fi
fi
fi
RESULT="$RESULT$POP_STATUS_TEXT | "
else
echo "ERROR: Invalid warning/critical values"
usage
exit
fi
fi
# Quit and return information and exit status
theend