There are probably some adjustments to be made.
Use at your own risk. Enjoy.
If you improve on it, please make the improvements available
to the list.
Mike Andrews
[EMAIL PROTECTED]
Tired old sysadmin
#!/usr/bin/perl
#
# program to produce total mail item / spam (%) / discarded (%) / cleaned
# stats for each of a set of /var/log/maillog*gz files and for the set
# as a whole.
# Uses strings inserted into maillog files by MailScanner and SpamAssassin
# to determine number of messages that are spam (SpamAssassin) the number
# of dangerous attachments (MailScanner) that were cleaned. Also notes number
# of messages discarded (sendmail).
# Computes percentages and totals for each maillog*gz file read, and over
# all maillog*gz files read.
# total is the number of matches to /from=/
# spam is the number of matches to /is spam/
# discarded is the numnber of matches to /ruleset=/
# cleaned is the number of matches to /Cleaned/
# Reads directory "/var/log" and only selects files
# that match /maillog*.gz/
# 22Aug2003 added support for output of ClamAV antivirus/worm scanner
# use / FOUND\s$/ as pattern to match it.
#
# We'd like to put out *this* report:
#
# Mails spamassassin rejected scanner total mails
# Total says "spam" by ruleset says virus undelivered .
# Aug 18 5033 1076 (21.38%) 297 (5.90%) 0 (0.00%) 1373 (27.28%)
# Aug 19 6777 1459 (21.53%) 399 (5.89%) 0 (0.00%) 1858 (27.42%)
# Aug 20 7765 1630 (20.99%) 479 (6.17%) 175 (2.25%) 2284 (29.41%)
# Aug 21 6555 1310 (19.98%) 476 (7.26%) 759(11.58%) 2545 (38.83%)
# Aug 22 5342 1189 (22.26%) 416 (7.79%) 431 (8.07%) 2036 (38.11%)
# Aug 23 2515 1226 (48.75%) 233 (9.26%) 134 (5.33%) 1593 (63.34%)
# Aug 24 2359 995 (42.18%) 166 (7.04%) 211 (8.94%) 1372 (58.16%)
# Aug 25 5580 1156 (20.72%) 444 (7.96%) 636(11.40%) 2236 (40.07%)
use IO::File;
use POSIX qw(tmpnam);
use FileHandle;
my $path = "/var/log";
# formats for static headers
format HEADER0 =
Mail Statistics;
Produced by isdmon2:/home/mikea/bin/mailstats.pl; Run by isdmon2:/etc/crontab
.
format HEADER1 =
Mails spamassassin rejected scanner total mails
.
format HEADER2 =
Total says 'spam' by ruleset says virus undelivered
.
STDOUT->format_name("HEADER0");
write STDOUT;
STDOUT->format_name("HEADER1");
write STDOUT;
STDOUT->format_name("HEADER2");
write STDOUT;
# print "Mail Statistics;\n Produced by isdmon2:/home/mikea/bin/mailstats.pl;\n Run by
isdmon2:/etc/crontab \n\n\n";
opendir (DIR,$path) or die "opendir failed for $path: $! \n";
@files = readdir(DIR);
@files = grep /^maillog/ , @files;
@files = grep /\.gz$/ , @files ;
@files = sort @files;
# total, spam, ruleset, cleaned, undelivered
my $tt = 0; $st = 0; $dt = 0; $ct = 0; $ut = 0; #totals
# grand total percentages:
# %spam %ruleset %undelivered
my $stp ; my $dtp ; my $utp ;
$numfiles = @files;
for ( $fileno =0; $fileno < $numfiles; $fileno++)
{
# straight from the Perl Cookbook,
# section 7.5 Creating Temporary Files
# Try new temporary filenames until we get one that
# doesn't already exist
do { $name = tmpnam() }
until $FH = IO::File->new($name, O_RDWR|O_CREAT|O_EXCL);
$filename = "$path/"[EMAIL PROTECTED];
system "zcat $filename > $name";
open (FH, "$name");
@wholefile = <FH>;
# print "$wholefile[0] \n";
# grab the date and time (items 1 and 2)
# from the first line of the log, which is $wholefile[0])
($mo, $da, $junk) = split ' ', $wholefile[0], 3;
#
#print "mo = $mo \n";
#print "da = $da \n";
#print "\$wholefile[0] = $wholefile[0]\n";
my $t = grep /from=/, @wholefile; # total
my $s = grep /is spam/, @wholefile; # spam
my $d = grep /ruleset/, @wholefile; # ruleset
my $c = grep /Cleaned/, @wholefile; # cleaned
my $v = grep / FOUND $/, @wholefile; # virus found by ClamAV
my $u = $s + $d + $v; # undelivered
my $sp = (100*$s)/$t unless $t == 0;
my $dp = (100*$d)/$t unless $t == 0;
my $up = (100*$u)/$t unless $t == 0;
my $vp = (100*$v)/$t unless $t == 0;
my $spf = sprintf("%-5.2f",$sp);
my $dpf = sprintf("%-5.2f",$dp);
my $upf = sprintf("%-5.2f",$up);
my $upf = sprintf("%-5.2f",$up);
my $upf = sprintf("%-5.2f",$up);
my $vpf = sprintf("%-5.2f",$vp);
# Print static headers:
# print " Mails spamassassin rejected scanner total
mails\n";
# print " Total says 'spam' by ruleset says virus
undelivered\n";
$head1= " Mails spamassassin rejected scanner total
mails\n";
$head2= " Total says 'spam' by ruleset says virus
undelivered\n";
# 00000000011111111112222222222333333333344444444445555555555666666666
# 12345678901234567890123456789012345678901234567890123456789012345678
format DATA =
# $t $s $spf $d $dpf $v $vpf $u $upf
@>>>@>>>@[EMAIL PROTECTED] (@#.##%) @### (@#.##%) @### (@#.##%) @#### (@#.##%)
$mo $da $t $s $spf $d $dpf $v $vpf $u $upf
.
STDOUT->format_name("DATA");
write STDOUT;
$tt += $t; $st += $s; $dt += $d; $ct += $c; $ut += $u; $vt += $v;
# print
"================================================================================\n\n";
# delete the new tempfile.
unlink $name;
}
$stp = (100 * $st)/$tt unless $tt == 0; # total percentage spam
$dtp = (100 * $dt)/$tt unless $tt == 0; # was total percentage discarded, now
total percentage caught by ruleset
$utp = (100 * $ut)/$tt unless $tt == 0; # total percentage undelivered
$vtp = (100 * $vt)/$tt unless $tt == 0; # total percentage virus
$stpf = sprintf("%-5.2f",$stp); # formatted 5.2 string
$dtpf = sprintf("%-5.2f",$dtp); # formatted 5.2 string
$utpf = sprintf("%-5.2f",$utp); # formatted 5.2 string
$vtpf = sprintf("%-5.2f",$vtp); # formatted 5.2 string
# Install atexit-style handler so that when we exit or die,
# we delete the new tempfile.
END { unlink $name; }
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Spamassassin-talk mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/spamassassin-talk