From a15365dd8fab0e731191930412617df3ed0c33df Mon Sep 17 00:00:00 2001 From: Rico Sagner Date: Sat, 6 Feb 2010 13:54:24 +0100 Subject: [PATCH] Initial version --- plugins/other/postgrey-new | 160 +++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100755 plugins/other/postgrey-new diff --git a/plugins/other/postgrey-new b/plugins/other/postgrey-new new file mode 100755 index 00000000..73912086 --- /dev/null +++ b/plugins/other/postgrey-new @@ -0,0 +1,160 @@ +#! /usr/bin/perl +################################################################### +# Munins Plugin to monitor actions of postgrey greylisting daemon # +# Version 0.1 # +################################################################### + +######################### Configuration ########################### +# Usually this plugin will look in /var/log/mail.log for the # +# output of postgrey. You can change that by setting env.logfile # +# The state file is /var/lib/munin/plugin-state/postgrey-new.state# +# This can be changed by setting env.statefile # +# Keep in mind to grant enough rigths in order to open the # +# logfiles etc. # +# Parameters understood by this plugin # +# # +# config (required) # +# autoconf (optional) # +# # +################################################################### +# This plgin works with postgrey 1.31 but should also do with 1.32# +# Tested under Debian lenny # +################################################################### + + +### Author Rico Sagner hellriegel@sund-xplosion.de +### Please send bug reports to this address + +use strict; +use warnings; + +my $maillog= $ENV{'logfile'} || "/var/log/mail.log"; +my $statefile= $ENV{'statefile'} || "/var/lib/munin/plugin-state/postgrey-new.state"; + +my $greylisted=0; +my $greylisted_old=0; +my $passes=0; +my $passes_old=0; +my $passes_white=0; +my $passes_white_old=0; +my $retry=0; +my $retry_old=0; +my $grey_new=0; +my $pass_new=0; +my $retry_new=0; +my $passes_white_new=0; + +if(defined $ARGV[0] and $ARGV[0] eq "autoconf") { + if ( -f $maillog) { + print "yes\n"; + exit 0; + } + else { + print "no\n"; + exit 1 + } +} + + +if(defined $ARGV[0] and $ARGV[0] eq "config") { + print "graph_title Postgrey Actions\n"; + print "graph_order greylisted retry_early passed passed_w\n"; + print "graph_category mail\n"; + print "graph_vlabel Count\n"; + print "graph_scale no\n"; + + print "greylisted.label greylisted_reason_new\n"; + print "greylisted.type GAUGE\n"; + print "greylisted.draw AREA\n"; + print "greylisted.min 0\n"; + print "retry_early.label greylisted_retry_early\n"; + print "retry_early.type GAUGE\n"; + print "retry_early.draw AREA\n"; + print "retry_early.min 0\n"; + print "passed.label passed_found\n"; + print "passed.type GAUGE\n"; + print "passed.draw AREA\n"; + print "passed.min 0\n"; + print "passed_w.label passed_whitelisted\n"; + print "passed_w.type GAUGE\n"; + print "passed_w.draw AREA\n"; + print "passed_w.min 0\n"; + exit 0; +} + +if( -f $statefile) { + open ( STATE ,"<$statefile"); + defined($greylisted_old=) or $greylisted_old=0; + defined($passes_old=) or $passes_old=0; + defined($retry_old=) or $retry_old=0; + defined($passes_white_old=) or $passes_white_old=0; + chomp($greylisted_old); + chomp($passes_old); + chomp($retry_old); + chomp($passes_white_old); + close STATE; +} + + + +open (LOG ,"<$maillog") or die "Cannot open Maillog"; +while(my $line = ) +{ + if($line=~m/postgrey\[/) + { + if($line=~m/action=greylist/) { + if($line=~m/reason=new/) + { + $greylisted++; + } + elsif($line=~m/reason=early-retry/) + { + $retry++; + } + } + elsif($line=~m/action=pass/) { + if($line=~m/reason=triplet/) + { + $passes++; + } + elsif($line=~m/reason=client/) + { + $passes_white++; + } + } + + + } +} +close(LOG); + + +open (STATE2,">$statefile"); +print STATE2 "$greylisted\n"; +print STATE2 "$passes\n"; +print STATE2 "$retry\n"; +print STATE2 "$passes_white\n"; +close STATE2; + +if($greylisted_old>$greylisted) { $grey_new=$greylisted; } +elsif($greylisted_old eq $greylisted) { $grey_new=0;} +else { $grey_new=$greylisted-$greylisted_old; } + +if($passes_old>$passes) { $pass_new=$passes;} +elsif( $passes_old eq $passes) { $pass_new=0; } +else { $pass_new=$passes-$passes_old; } + +if($retry_old>$retry) { $retry_new=$retry;} +elsif($retry_old eq $retry) { $retry_new=0;} +else { $retry_new=$retry-$retry_old; } + +if($passes_white_old>$passes_white) { $passes_white_new=$passes_white;} +elsif($passes_white_old eq $passes_white) { $passes_white_new=0;} +else { $passes_white_new=$passes_white-$passes_white_old; } + +print "greylisted.value $grey_new\n"; +print "retry_early.value $retry_new\n"; +print "passed.value $pass_new\n"; +print "passed_w.value $passes_white_new\n"; + +exit 0;