#! /usr/bin/perl -w

use strict;
use File::Basename;
use Getopt::Long;
use lib "/usr/lib/nagios/plugins";
use utils qw (%ERRORS &print_revision &support);

sub print_help();
sub print_usage();

my $ME = basename $0;
my ( $opt_w, $opt_c, $opt_s, $opt_V, $opt_h, $opt_b );
my ( $result, $mailq );

$opt_s = "86400";
$opt_w = "10";
$opt_c = "20";
$opt_b = "/usr/sbin/exipick";

Getopt::Long::Configure('bundling');
GetOptions(
    "V"          => \$opt_V,
    "version"    => \$opt_V,
    "h"          => \$opt_h,
    "help"       => \$opt_h,
    "b=s"        => \$opt_b,
    "binary"     => \$opt_b,
    "s=i"        => \$opt_s,
    "seconds"    => \$opt_s,
    "w=i"        => \$opt_w,
    "warning=i"  => \$opt_w,
    "c=i"        => \$opt_c,
    "critical=i" => \$opt_c
);

if ($opt_V) {
    print_revision( $ME, "0.1" );
    exit $ERRORS{"OK"};
}

if ($opt_h) {
    print_help();
    exit $ERRORS{"OK"};
}

if ( $opt_w > $opt_c ) {
    print
      "MAILQ CRITICAL: Warning (-w) cannot be greater than Critical (-c)!\n";
    exit $ERRORS{"CRITICAL"};
}

# check exipick binary
unless ( -x $opt_b ) {
    print "MAILQ CRITICAL: exipick not found or not executable - $opt_b\n";
    exit $ERRORS{"CRITICAL"};
}

# check the mailq
`$opt_b -o $opt_s -c` =~ /^(\d+).*/;
$mailq = $1;

SWITCH: {
    $mailq < $opt_w  and $result = "OK",       last;
    $mailq >= $opt_c and $result = "CRITICAL", last;
    $mailq >= $opt_w and $result = "WARNING",  last;
}

print
"MAILQ $result: ($mailq) queued mails older than $opt_s sec.|unsent=$mailq;$opt_w;$opt_c;0;0\n";
exit $ERRORS{$result};

sub print_usage() {
    print "Usage:\n";
    print "  $ME [-b <binary>] [-s <sec>] [-w <warn>] [-c <crit>]\n";
    print "  $ME [-h | --help]\n";
    print "  $ME [-V | --version]\n";
}

sub print_help() {
    print_revision( $ME, "0.1" );
    print "Copyright (c) 2008 Christian Arnold\n\n";
    print "This plugin checks the number of messages, which are longer than\n";
    print "an specified time holding in the mail queue.\n\n";
    print_usage();
    print "\n";
    print "  -b, --binary <binary>\n";
    print "     Path of exipick binary (default: /usr/sbin/exipick)\n";
    print "  -s, --seconds <sec>\n";
    print "     Age of messages in seconds in the mail queue (default: 86400) one day\n";
    print "  -w, --warning <warn>\n";
    print "     Min. number of messages in the mail queue to generate warning alert (default: 10)\n";
    print "  -c, --critical <crit>\n";
    print "     Min. number of messages in the mail queue to generate critical alert (default: 20)\n";
    print "\n";
    print "Note: This plugin only works with exim4.\n\n";
    support();
}
