summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xplugins-scripts/check_mailq.pl46
1 files changed, 23 insertions, 23 deletions
diff --git a/plugins-scripts/check_mailq.pl b/plugins-scripts/check_mailq.pl
index 49156af..26336b9 100755
--- a/plugins-scripts/check_mailq.pl
+++ b/plugins-scripts/check_mailq.pl
@@ -1,7 +1,7 @@
1#!@PERL@ -w 1#!@PERL@ -w
2 2
3# check_mailq - check to see how many messages are in the smtp queue awating 3# check_mailq - check to see how many messages are in the smtp queue awating
4# transmittal. 4# transmittal.
5# 5#
6# Initial version support sendmail's mailq command 6# Initial version support sendmail's mailq command
7# Support for multiple sendmail queues (Carlos Canau) 7# Support for multiple sendmail queues (Carlos Canau)
@@ -42,7 +42,7 @@ sub print_usage ();
42sub process_arguments (); 42sub process_arguments ();
43 43
44$ENV{'PATH'}='@TRUSTED_PATH@'; 44$ENV{'PATH'}='@TRUSTED_PATH@';
45$ENV{'BASH_ENV'}=''; 45$ENV{'BASH_ENV'}='';
46$ENV{'ENV'}=''; 46$ENV{'ENV'}='';
47$PROGNAME = "check_mailq"; 47$PROGNAME = "check_mailq";
48$mailq = 'sendmail'; # default 48$mailq = 'sendmail'; # default
@@ -84,7 +84,7 @@ alarm($opt_t);
84 84
85if ($mailq eq "sendmail") { 85if ($mailq eq "sendmail") {
86 86
87 ## open mailq 87 ## open mailq
88 if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { 88 if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
89 if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { 89 if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
90 print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; 90 print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
@@ -170,7 +170,7 @@ if ($mailq eq "sendmail") {
170 170
171 my $this_msg_q = 0; 171 my $this_msg_q = 0;
172 while (<MAILQ>) { 172 while (<MAILQ>) {
173 173
174 # match email addr on queue listing 174 # match email addr on queue listing
175 if ( (/<.*@.*\.(\w+\.\w+)>/) || (/<.*@(\w+\.\w+)>/) ) { 175 if ( (/<.*@.*\.(\w+\.\w+)>/) || (/<.*@(\w+\.\w+)>/) ) {
176 my $domain = $1; 176 my $domain = $1;
@@ -180,21 +180,21 @@ if ($mailq eq "sendmail") {
180 } 180 }
181 next; 181 next;
182 } 182 }
183 183
184 # 184 #
185 # ... 185 # ...
186 # sendmail considers a message with more than one destiny, say N, to the same MX 186 # sendmail considers a message with more than one destiny, say N, to the same MX
187 # to have N messages in queue. 187 # to have N messages in queue.
188 # we will only consider one in this code 188 # we will only consider one in this code
189 if (( /\s\(reply:\sread\serror\sfrom\s.*\.(\w+\.\w+)\.$/ ) || ( /\s\(reply:\sread\serror\sfrom\s(\w+\.\w+)\.$/ ) || 189 if (( /\s\(reply:\sread\serror\sfrom\s.*\.(\w+\.\w+)\.$/ ) || ( /\s\(reply:\sread\serror\sfrom\s(\w+\.\w+)\.$/ ) ||
190 ( /\s\(timeout\swriting\smessage\sto\s.*\.(\w+\.\w+)\.:/ ) || ( /\s\(timeout\swriting\smessage\sto\s(\w+\.\w+)\.:/ ) || 190 ( /\s\(timeout\swriting\smessage\sto\s.*\.(\w+\.\w+)\.:/ ) || ( /\s\(timeout\swriting\smessage\sto\s(\w+\.\w+)\.:/ ) ||
191 ( /\s\(host\smap:\slookup\s\(.*\.(\w+\.\w+)\):/ ) || ( /\s\(host\smap:\slookup\s\((\w+\.\w+)\):/ ) || 191 ( /\s\(host\smap:\slookup\s\(.*\.(\w+\.\w+)\):/ ) || ( /\s\(host\smap:\slookup\s\((\w+\.\w+)\):/ ) ||
192 ( /\s\(Deferred:\s.*\s.*\.(\w+\.\w+)\.\)/ ) || ( /\s\(Deferred:\s.*\s(\w+\.\w+)\.\)/ ) ) { 192 ( /\s\(Deferred:\s.*\s.*\.(\w+\.\w+)\.\)/ ) || ( /\s\(Deferred:\s.*\s(\w+\.\w+)\.\)/ ) ) {
193 193
194 print "$utils::PATH_TO_MAILQ = dstdomain = $1 \n" if $verbose ; 194 print "$utils::PATH_TO_MAILQ = dstdomain = $1 \n" if $verbose ;
195 $dstdomains{$1} ++; 195 $dstdomains{$1} ++;
196 } 196 }
197 197
198 if (/\s+\(I\/O\serror\)/) { 198 if (/\s+\(I\/O\serror\)/) {
199 print "$utils::PATH_TO_MAILQ = dstdomain = UNKNOWN \n" if $verbose ; 199 print "$utils::PATH_TO_MAILQ = dstdomain = UNKNOWN \n" if $verbose ;
200 $dstdomains{'UNKNOWN'} ++; 200 $dstdomains{'UNKNOWN'} ++;
@@ -221,13 +221,13 @@ if ($mailq eq "sendmail") {
221 $msg_q += $1 ; 221 $msg_q += $1 ;
222 } 222 }
223 } 223 }
224 224
225 } 225 }
226 226
227 227
228 ## close mailq 228 ## close mailq
229 229
230 close (MAILQ); 230 close (MAILQ);
231 231
232 if ( $? ) { 232 if ( $? ) {
233 print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/; 233 print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
@@ -246,7 +246,7 @@ if ($mailq eq "sendmail") {
246 $state = $ERRORS{'OK'}; 246 $state = $ERRORS{'OK'};
247 } else { 247 } else {
248 print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose; 248 print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
249 249
250 # overall queue length 250 # overall queue length
251 if ($msg_q < $opt_w) { 251 if ($msg_q < $opt_w) {
252 $msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)"; 252 $msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
@@ -261,12 +261,12 @@ if ($mailq eq "sendmail") {
261 261
262 # check for domain specific queue lengths if requested 262 # check for domain specific queue lengths if requested
263 if (defined $opt_W) { 263 if (defined $opt_W) {
264 264
265 # Apply threshold to queue lengths FROM domain 265 # Apply threshold to queue lengths FROM domain
266 my @srckeys = sort { $srcdomains{$b} <=> $srcdomains{$a} } keys %srcdomains; 266 my @srckeys = sort { $srcdomains{$b} <=> $srcdomains{$a} } keys %srcdomains;
267 my $srcmaxkey = $srckeys[0]; 267 my $srcmaxkey = $srckeys[0];
268 print "src max is $srcmaxkey with $srcdomains{$srcmaxkey} messages\n" if $verbose; 268 print "src max is $srcmaxkey with $srcdomains{$srcmaxkey} messages\n" if $verbose;
269 269
270 if ($srcdomains{$srcmaxkey} >= $opt_W && $srcdomains{$srcmaxkey} < $opt_C) { 270 if ($srcdomains{$srcmaxkey} >= $opt_W && $srcdomains{$srcmaxkey} < $opt_C) {
271 if ($state == $ERRORS{'OK'}) { 271 if ($state == $ERRORS{'OK'}) {
272 $msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)"; 272 $msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
@@ -300,7 +300,7 @@ if ($mailq eq "sendmail") {
300 my @dstkeys = sort { $dstdomains{$b} <=> $dstdomains{$a} } keys %dstdomains; 300 my @dstkeys = sort { $dstdomains{$b} <=> $dstdomains{$a} } keys %dstdomains;
301 my $dstmaxkey = $dstkeys[0]; 301 my $dstmaxkey = $dstkeys[0];
302 print "dst max is $dstmaxkey with $dstdomains{$dstmaxkey} messages\n" if $verbose; 302 print "dst max is $dstmaxkey with $dstdomains{$dstmaxkey} messages\n" if $verbose;
303 303
304 if ($dstdomains{$dstmaxkey} >= $opt_W && $dstdomains{$dstmaxkey} < $opt_C) { 304 if ($dstdomains{$dstmaxkey} >= $opt_W && $dstdomains{$dstmaxkey} < $opt_C) {
305 if ($state == $ERRORS{'OK'}) { 305 if ($state == $ERRORS{'OK'}) {
306 $msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)"; 306 $msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
@@ -419,7 +419,7 @@ elsif ( $mailq eq "postfix" ) {
419} # end of ($mailq eq "postfix") 419} # end of ($mailq eq "postfix")
420elsif ( $mailq eq "qmail" ) { 420elsif ( $mailq eq "qmail" ) {
421 421
422 # open qmail-qstat 422 # open qmail-qstat
423 if ( defined $utils::PATH_TO_QMAIL_QSTAT && -x $utils::PATH_TO_QMAIL_QSTAT ) { 423 if ( defined $utils::PATH_TO_QMAIL_QSTAT && -x $utils::PATH_TO_QMAIL_QSTAT ) {
424 if (! open (MAILQ, "$sudo $utils::PATH_TO_QMAIL_QSTAT | " ) ) { 424 if (! open (MAILQ, "$sudo $utils::PATH_TO_QMAIL_QSTAT | " ) ) {
425 print "ERROR: could not open $utils::PATH_TO_QMAIL_QSTAT \n"; 425 print "ERROR: could not open $utils::PATH_TO_QMAIL_QSTAT \n";
@@ -471,7 +471,7 @@ elsif ( $mailq eq "qmail" ) {
471 $state = $ERRORS{'OK'}; 471 $state = $ERRORS{'OK'};
472 } else { 472 } else {
473 print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose; 473 print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
474 474
475 # overall queue length 475 # overall queue length
476 if ($msg_q < $opt_w) { 476 if ($msg_q < $opt_w) {
477 $msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)"; 477 $msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
@@ -486,7 +486,7 @@ elsif ( $mailq eq "qmail" ) {
486 486
487 # check messages not yet preprocessed (only compare is $opt_W and $opt_C 487 # check messages not yet preprocessed (only compare is $opt_W and $opt_C
488 # are defined) 488 # are defined)
489 489
490 if (defined $opt_W) { 490 if (defined $opt_W) {
491 $msg .= "[Preprocessed = $msg_p]"; 491 $msg .= "[Preprocessed = $msg_p]";
492 if ($msg_p >= $opt_W && $msg_p < $opt_C ) { 492 if ($msg_p >= $opt_W && $msg_p < $opt_C ) {
@@ -495,13 +495,13 @@ elsif ( $mailq eq "qmail" ) {
495 $state = $ERRORS{"CRITICAL"} ; 495 $state = $ERRORS{"CRITICAL"} ;
496 } 496 }
497 } 497 }
498 } 498 }
499 499
500 500
501 501
502} # end of ($mailq eq "qmail") 502} # end of ($mailq eq "qmail")
503elsif ( $mailq eq "exim" ) { 503elsif ( $mailq eq "exim" ) {
504 ## open mailq 504 ## open mailq
505 if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { 505 if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
506 if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { 506 if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
507 print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; 507 print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
@@ -677,7 +677,7 @@ sub process_arguments(){
677 $mailq = 'sendmail'; 677 $mailq = 'sendmail';
678 } 678 }
679 } 679 }
680 680
681 return $ERRORS{'OK'}; 681 return $ERRORS{'OK'};
682} 682}
683 683