#!/usr/local/bin/perl #----- use MLDBM qw(DB_File Storable); use POSIX qw(strftime); my %Files = ( db_hash => '/etc/mail/spamassassin/FuzzyOcr.db', db_safe => '/etc/mail/spamassassin/FuzzyOcr.safe.db', ); my %Stats = (); #Days my $diff = shift @ARGV || 0; my $gctr = shift @ARGV || 5; my $time = time; my $days = int($time/86400) - $diff; foreach my $f (keys %Files) { my %DB; my $err = 0; tie %DB, 'MLDBM', $Files{$f} or ++$err; next if $err; my @Top = (); foreach my $k (keys %DB) { my $db = $DB{$k}; $Stats{$f}{'images'}++; $Stats{$f}{'score'} += $db->{score}; if (int($db->{check}/86400) == $days) { $Stats{$f}{'today'}++; $Stats{$f}{'score2'} += $db->{score}; my @basic = split(':',$db->{basic}); my $line = sprintf "%5d Time(s) -> %9d %dx%dx%d",$db->{match}+1,@basic; foreach my $t (qw/fname ctype/) { $line .= sprintf ' %s',$db->{$t} if defined $db->{$t}; } push @Top,$line; } $Stats{$f}{'oldest'} = $db->{input} unless $Stats{$f}{'oldest'}; $Stats{$f}{'oldest'} = $db->{input} if ($Stats{$f}{'oldest'} > $db->{input}); } my $s = $Stats{$f}; next unless $$s{'images'}; my $p1 = sprintf "%6.2f%%",$$s{'today'}/($$s{'images'}/100); my $p2 = sprintf "%12.2f",$$s{'score'}/$$s{'images'} if ($$s{'images'}); my $p3 = sprintf "%12.2f",$$s{'score2'}/$$s{'today'} if ($$s{'today'}); my @stat = stat($Files{$f}); printf "\n<<%s>>\n",$f; printf "File Size : %9d Bytes\n",$stat[7]; printf "File Name : %s\n",$Files{$f}; printf "Oldest Hash : %s\n",scalar(localtime($$s{'oldest'})); printf "Average Score: %s\n",$p2 if ($$s{'score'}); printf "Images in DB : %9d\n",$$s{'images'}; printf "\n%s\n",strftime("%a, %b %d, %Y",localtime($time)); printf "Matched : %9d [%s]\n",$$s{'today'},$p1; printf "Avg. Score: %s\n",$p3 if ($$s{'score2'}); my $count = $gctr; foreach (reverse sort @Top) { printf "%s\n",$_; last if (--$count == 0); } }