#!/usr/bin/perl -w
#
# Rough shot at how much spam I'm getting
#
# Note the input, from.old, is just a procmail log file.
#
use Getopt::Long;
use strict;

my ( $mails, $mailbytes ) = ( 0, 0 );
my ( $spams, $spambytes ) = ( 0, 0 );
my %folders;
my $logfile;
my $mode = "mailshot";

GetOptions( "mode=s" => \$mode,
			"logfile=s" => \$logfile ) or die $!;

$logfile ||= "$ENV{'HOME'}/Mail/from.1";

if ( open( LOG, $logfile )) {
    while (<LOG>) {
        next unless /^\s*Folder:\s*(.*) (\d+)$/;
        my ( $folder, $bytes ) = ( $1, $2 );
        $folder =~ s/\s*$//;
        $mails++;
        $mailbytes += $bytes;
        if ( $folder =~ m{^caughtspam|^/dev/null$} ) {
            $spams++;
            $spambytes += $bytes;
        }
        my ( $folderbytes, $foldermails ) = ( 0, 0 );
        if ( defined( $folders{$folder})) {
            ( $folderbytes, $foldermails ) = @{$folders{$folder}};
        }
        $foldermails ++;
        $folderbytes += $bytes;
        $folders{$folder} = [ $folderbytes, $foldermails ];
    }

    if ( $mode eq "mailshot" ) {
        print "Total mail processed:\n $mails mail(s) ($mailbytes bytes)\n";
        printf " %3d spam(s) ($spambytes bytes)\n\n", $spams;
        if ( $mails and $mailbytes ) {
            for my $folder ( sort keys %folders ) {
                my ( $spambytes, $spams ) = @{$folders{$folder}};
                printf( "$folder:\n %d mail(s) (%.2g%%), %.2g%% by size\n",
                        $spams, $spams/$mails * 100, $spambytes/$mailbytes * 100 );
            }
        }
    } elsif ( $mode eq "mrtg" ) {
        print "$mails\n";
        print "$spams\n";
        print "quite some time\n";
        print "Waider's Mail Counter\n";
    }
}
