# Register routine with plugin registery
$CHECKFUNCS{'mailq'} = \&check_mailq;

# Sendmail mailq check for mail servers. If checks the numeber of mail
# message queue against the $MAILQWARN AND $MAILQCRIT variables

# $Id: check_mailq,v 1.5 2002/01/22 15:08:07 sljohnson Exp $

use Spong::SafeExec qw(safe_exec);

use File::Basename;

sub check_mailq {
   my($mqcnt, $message, $color, $summary );
   my(%qcnt,$singleq,@problems);

   $singlq = 0;
   my @msg = safe_exec($MAILQ);
   $mqcnt = 0;
   while ($_ = shift @msg) {
       if (/Mail Queue\s+\((\d+)/) { $mqcnt = $1; $singleq=1;  }
       elsif (/Total Requests:\s+(\d+)/) { $mqcnt = $1; }
       elsif (/\s+(\S+)\s+\((\d+)\s+requests\)/) { $qcnt{$1} = $2; }
       elsif (/(\S+)\s+is empty/) { $qcnt{$1} = 0; }

       # If sendmail is pre 8.10, just grab the first few entries for message
       if ($singleq) {
          # Grab the first 10 entries.
          if (++$lines <= 35) { $message .= $_; } else {last;};
       }
   }

   $color = "green";
   if ($mqcnt > $MAILQWARN) { $color = "yellow"; }
   if ($mqcnt > $MAILQCRIT) { $color = "red"; }
   $summary = "Mail Queue count = $mqcnt";

   if ( ! $singleq) {
      for my $q (sort(keys %qcnt)) {
         $message .= "queue $q ($qcnt{$q} requests)\n";

         if ( defined $MAILQ_SUBQ_CRIT && $qcnt{$q} >= $MAILQ_SUBQ_CRIT ) {
            $color = "red";
            push @problems,$q;
         }
         elsif ( defined $MAILQ_SUBQ_WARN && $qcnt{$q} >= $MAILQ_SUBQ_WARN ) {
            $color = "yellow" unless $color eq "red";
            push @problems,$q;
         }
      }

      if( $#problems == 0 ) {
         my $baseq = basename($problems[0]);
         $summary .= ", que $baseq has " . $qcnt{$problems[0]} . " requests";
      }
      elsif( $#problems > 0 ) {
         $summary .= ", multiple problems: ";
         foreach my $q (@problems) {
            my $baseq = basename($q);
            $summary .= "que $baseq (" . $qcnt{$q} . "),";
         }
      }
   }

   &debug("mailq - $color, $summary");
   &status( $SPONGSERVER, $HOST, "mailq", $color, $summary, $message );
}

# I'm include perl code, I need this line.
1;

