#!@@GOODSH@@
# -*- sh -*-

: << EOF

=head1 NAME

exim_mailqueue - Plugin to monitor exim queue size

=head1 CONFIGURATION

This plugin needs to run as a user that has access to run exiqgrep and
examine the queue directories.  This is done like this for example:

  [exim_*]
    user exim

Configuration parameters for a file in @@CONFDIR@@/plugin-conf.d/
if you need to override the defaults below:

  [exim_mailqueue]
    env.exiqgrep   - Use if exiqgrep is not in $PATH
    env.graphtitle - Title of the graph
    env.queuewarn  - When to warn (of undelivered mails)
    env.queuecrit  - When to crit (of undelivered mails)
    env.frozenwarn - When to warn (of frozen mails)
    env.frozencrit - When to crit (of frozen mails)

=head2 DEFAULT CONFIGURATION

  [exim_mailqueue]
    env.graphtitle Exim Mailqueue
    env.exiqgrep  <autodetected>
    env.queuewarn 100
    env.queuecrit 200
    env.frozenwarn 100
    env.frozencrit 200

=head1 AUTHOR

The original author was Audun Ytterdal, though the plugin has been heavily
modified by lots of people since then.

=head1 LICENSE

GPLv2

=begin comment

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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.

=end comment

=head1 MAGIC MARKERS

=begin comment

These magic markers are used by munin-node-configure when installing
munin-node.

=end comment

  #%# family=auto
  #%# capabilities=autoconf

=cut

EOF

# You cannot trust the exit status of which
EXIQGREP=$(which exiqgrep 2>/dev/null)
case $EXIQGREP:$? in
    *:1|no*) EXIQGREP=''
esac

GRAPHTITLE='Exim Mailqueue'

EXIQGREP=${exiqgrep:-$EXIQGREP}
GRAPHTITLE=${graphtitle:-$GRAPHTITLE}

QUEUEWARN=${queuewarn:-100}
QUEUECRIT=${queuecrit:-200}
FROZENWARN=${frozenwarn:-100}
FROZENCRIT=${frozencrit:-200}

if [ "$1" = "autoconf" ]; then
    if [ -z "$EXIQGREP" ]; then
	echo "no (no exiqgrep)"
	exit 0
    else
        echo yes
        exit 0
    fi
fi
	
if [ "$1" = "config" ]; then
	echo "graph_title $GRAPHTITLE"
	echo 'graph_args --base 1000 -l 0'
	echo 'graph_vlabel mails in queue'
	echo 'graph_category exim'

	echo 'mails.label queued mails'
	# Use "AREASTACK" in munin 1.3.3 and later
	echo 'mails.draw AREA'
	echo "mails.warning 0:$QUEUEWARN"
	echo "mails.critical 0:$QUEUECRIT"
	echo 'mails.colour 00AA00'

	echo 'frozen.label frozen mails'
	# Use "AREASTACK" in munin 1.3.3 and later
	echo 'frozen.draw STACK'
	echo "frozen.warning 0:$FROZENWARN"
	echo "frozen.critical 0:$FROZENCRIT"
	echo 'frozen.colour 0022FF'

	exit 0
fi

$EXIQGREP -cz | awk '
  BEGIN { frozen=mails="U"; }
  /[0-9]+ matches out of [0-9]+ messages/ { frozen=$1; mails=($5-$1); }
  END { printf("frozen.value %s\nmails.value %s\n",frozen,mails); }
'
