#!/usr/bin/perl
#
#
my $syntax = "./check_mailman <outgoing warn> <outgoing crit> <incoming warn> <incoming crit> [base]";
my $out_warn = shift || die "$syntax";
my $out_crit = shift || die "$syntax";
my $in_warn = shift || die "$syntax";
my $in_crit = shift || die "$syntax";

my @bases = ();

if (my $base = shift) {
	push @bases, $base;
} else {
	for my $base ( `/bin/ls /usr/local/dh/mailman | egrep -v '^(template|logs)\$'` ) {
		chomp $base;

		push @bases, '/usr/local/dh/mailman/' . $base;
	}
}

for my $base (@bases) {
	unless (-d $base) {
		print "$base: not found\n";
		next;
	}

	my $n_out = `sudo ls $base/qfiles/out/ | wc -l`;
	my $n_in = `sudo ls $base/qfiles/in/ | wc -l`;
	my $warn = 0;
	my $crit = 0;
	chomp($n_out);
	chomp($n_in);
	$n_out=~s/\s//g; 
	$n_in=~s/\s//g;

	if (($n_out > $out_warn) && ($n_out < $out_crit)) { 
		$warn = 1;
	} elsif ($n_out > $out_crit) { 
		$crit = 1; 
	}

	if (($n_in > $in_warn) && ($n_in < $in_crit)) { 
		$warn = 1; 
	} elsif ($n_in >= $in_crit) {
		$crit = 1;
	}

	my $service_running = `sudo ps -ef | grep "$base/bin/qrunner" | grep -v grep | wc -l`;

	my $service = 'mailman-' . $1 if $base =~ m{ [\w/]+/(\w+?)$ }xs;

	if ($service_running lt 1) {
		print "$service is not running\n";
		exit 2 if $base eq $bases[$#bases];
	} elsif ($crit eq '1') {
		print "$service crit out($n_out) in($n_in)\n";
		exit 2 if $base eq $bases[$#bases];
	} elsif (($warn eq '1') &&  ($crit ne '1')) {
		print "$service warn out($n_out) in($n_in)\n";
		exit 1 if $base eq $bases[$#bases];
	} elsif (($warn eq '0') && ($crit eq '0')) { 
		print "$service ok\n";
		exit 0 if $base eq $bases[$#bases];
	}
}
