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