packages: nagios-plugin-check_mailman_qfiles/check_mailman_qfiles.pl (NEW) ...
glen
glen at pld-linux.org
Mon Jul 27 01:44:21 CEST 2009
Author: glen Date: Sun Jul 26 23:44:21 2009 GMT
Module: packages Tag: HEAD
---- Log message:
- raw from http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=1347&cf_id=24
http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Mailman/check_mailman_qfiles/details
---- Files affected:
packages/nagios-plugin-check_mailman_qfiles:
check_mailman_qfiles.pl (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/nagios-plugin-check_mailman_qfiles/check_mailman_qfiles.pl
diff -u /dev/null packages/nagios-plugin-check_mailman_qfiles/check_mailman_qfiles.pl:1.1
--- /dev/null Mon Jul 27 01:44:21 2009
+++ packages/nagios-plugin-check_mailman_qfiles/check_mailman_qfiles.pl Mon Jul 27 01:44:16 2009
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+
+## check_mailman_qfiles
+#
+# Simple perl script to check the various mailman qfiles directories for old,
+# unprocessed items and report on freshness.
+#
+# Eric Waters <ewaters at xmission.com> 27-Apr-2007
+
+use strict;
+use warnings;
+use File::Find::Rule;
+use Getopt::Long;
+
+my $qfiles_base = '/var/lib/mailman/qfiles';
+my %opts = (
+ warning => 5, # 5 minutes
+ critical => 20, # 20 minutes
+);
+GetOptions(
+ 'warning=i' => \$opts{warning},
+ 'critical=i' => \$opts{critical},
+);
+
+# convert to seconds
+$opts{warning} *= 60;
+$opts{critical} *= 60;
+
+my %problems;
+my $problem_status;
+
+foreach my $qdir (qw(archive bounces commands in news out retry)) {
+ # Get all the 'pickle' files in the queue directory
+ my @files = File::Find::Rule->file->name('*.pck')->in("$qfiles_base/$qdir");
+ next unless @files;
+
+ # Get the modification times of the files, sorted desc
+ my @mtimes = sort { $a <=> $b } map { (stat($_))[9] } @files;
+
+ # Age of the oldest file in queue
+ my $diff = time - $mtimes[0];
+
+ if ($diff > $opts{critical}) {
+ $problems{$qdir} = [ 'CRITICAL' ];
+ $problem_status = 'CRITICAL';
+ }
+ elsif ($diff > $opts{warning}) {
+ $problems{$qdir} = [ 'WARNING' ];
+ $problem_status = 'WARNING' if ! $problem_status;;
+ }
+
+ if ($problems{$qdir}) {
+ $problems{$qdir}[1] = sprintf "%d tasks, oldest %s", int(@files), describe_diff($diff);
+ }
+}
+
+if (! $problem_status) {
+ print "all normal\n";
+ exit 0;
+}
+
+print join('; ', map { "$_ has $problems{$_}[1]" } sort keys %problems)."\n";;
+
+exit ($problem_status eq 'CRITICAL' ? 2 : 1);
+
+sub describe_diff {
+ my $diff = shift;
+
+ my $units = 'sec';
+ if ($diff > 60) {
+ $diff /= 60;
+ $units = 'min';
+ }
+ if ($units eq 'min' && $diff > 60) {
+ $diff /= 60;
+ $units = 'hr';
+ }
+ if ($units eq 'day' && $diff > 24) {
+ $diff /= 24;
+ $units = 'day';
+ }
+ return sprintf "%.1f %s%s", $diff, $units, $diff == 1 ? '' : 's';
+}
================================================================
More information about the pld-cvs-commit
mailing list