| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
use MLDBM qw(DB_File Storable); |
|---|
| 5 |
use POSIX qw(strftime); |
|---|
| 6 |
|
|---|
| 7 |
my %Files = ( |
|---|
| 8 |
db_hash => '/etc/mail/spamassassin/FuzzyOcr.db', |
|---|
| 9 |
db_safe => '/etc/mail/spamassassin/FuzzyOcr.safe.db', |
|---|
| 10 |
); |
|---|
| 11 |
|
|---|
| 12 |
my %Stats = (); |
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
my $diff = shift @ARGV || 0; |
|---|
| 16 |
my $gctr = shift @ARGV || 5; |
|---|
| 17 |
my $time = time; |
|---|
| 18 |
my $days = int($time/86400) - $diff; |
|---|
| 19 |
|
|---|
| 20 |
foreach my $f (keys %Files) { |
|---|
| 21 |
my %DB; my $err = 0; |
|---|
| 22 |
tie %DB, 'MLDBM', $Files{$f} or ++$err; |
|---|
| 23 |
next if $err; my @Top = (); |
|---|
| 24 |
foreach my $k (keys %DB) { |
|---|
| 25 |
my $db = $DB{$k}; |
|---|
| 26 |
$Stats{$f}{'images'}++; |
|---|
| 27 |
$Stats{$f}{'score'} += $db->{score}; |
|---|
| 28 |
if (int($db->{check}/86400) == $days) { |
|---|
| 29 |
$Stats{$f}{'today'}++; |
|---|
| 30 |
$Stats{$f}{'score2'} += $db->{score}; |
|---|
| 31 |
my @basic = split(':',$db->{basic}); |
|---|
| 32 |
my $line; |
|---|
| 33 |
if ($db->{score}) { |
|---|
| 34 |
$line = sprintf "%5d Time(s) -> %8.3f %9d %dx%dx%d" |
|---|
| 35 |
,$db->{match}+1,$db->{score},@basic; |
|---|
| 36 |
} else { |
|---|
| 37 |
$line = sprintf "%5d Time(s) -> %9d %dx%dx%d" |
|---|
| 38 |
,$db->{match}+1,@basic; |
|---|
| 39 |
} |
|---|
| 40 |
foreach my $t (qw/fname ctype/) { |
|---|
| 41 |
$line .= sprintf ' %s',$db->{$t} if defined $db->{$t}; |
|---|
| 42 |
} |
|---|
| 43 |
push @Top,$line; |
|---|
| 44 |
} |
|---|
| 45 |
$Stats{$f}{'oldest'} = $db->{input} |
|---|
| 46 |
unless $Stats{$f}{'oldest'}; |
|---|
| 47 |
$Stats{$f}{'oldest'} = $db->{input} |
|---|
| 48 |
if ($Stats{$f}{'oldest'} > $db->{input}); |
|---|
| 49 |
} |
|---|
| 50 |
my $s = $Stats{$f}; |
|---|
| 51 |
next unless $$s{'images'}; |
|---|
| 52 |
|
|---|
| 53 |
my $p1 = sprintf "%6.2f%%",$$s{'today'}/($$s{'images'}/100); |
|---|
| 54 |
my $p2 = sprintf "%12.2f",$$s{'score'}/$$s{'images'} if ($$s{'images'}); |
|---|
| 55 |
my $p3 = sprintf "%12.2f",$$s{'score2'}/$$s{'today'} if ($$s{'today'}); |
|---|
| 56 |
|
|---|
| 57 |
my @stat = stat($Files{$f}); |
|---|
| 58 |
printf "\n<<%s>>\n",$f; |
|---|
| 59 |
printf "File Size : %9d Bytes\n",$stat[7]; |
|---|
| 60 |
printf "File Name : %s\n",$Files{$f}; |
|---|
| 61 |
printf "Oldest Hash : %s\n",scalar(localtime($$s{'oldest'})); |
|---|
| 62 |
printf "Average Score: %s\n",$p2 if ($$s{'score'}); |
|---|
| 63 |
printf "Images in DB : %9d\n",$$s{'images'}; |
|---|
| 64 |
printf "\n%s\n",strftime("%a, %b %d, %Y",localtime($time)); |
|---|
| 65 |
printf "Matched : %9d [%s]\n",$$s{'today'},$p1; |
|---|
| 66 |
printf "Avg. Score: %s\n",$p3 if ($$s{'score2'}); |
|---|
| 67 |
my $count = $gctr; |
|---|
| 68 |
foreach (reverse sort @Top) { |
|---|
| 69 |
printf "%s\n",$_; |
|---|
| 70 |
last if (--$count == 0); |
|---|
| 71 |
} |
|---|
| 72 |
} |
|---|