157 lines
3.2 KiB
Perl
157 lines
3.2 KiB
Perl
#!/bin/perl
|
|
#
|
|
# Print various statistics about the Log file
|
|
#
|
|
# Todo: summarize admin commands
|
|
#
|
|
# Paul Close, April 1994
|
|
#
|
|
|
|
while (<>) {
|
|
if (($mon,$day,$time,$who,$cmd) =
|
|
/([A-Za-z]+) (\d+) ([\d:]+)\s+.*majordomo\[\d+\]\s+{(.*)} (.*)/)
|
|
{
|
|
@f = split(' ',$cmd);
|
|
$cmd = $f[0];
|
|
$f[1] =~ s/[<>]//g;
|
|
$f[2] =~ s/[<>]//g;
|
|
$count{$cmd}++;
|
|
|
|
# help
|
|
# lists
|
|
# which [address]
|
|
# approve PASSWD ...
|
|
if ($cmd eq "approve" ||
|
|
$cmd eq "help" ||
|
|
$cmd eq "lists" ||
|
|
$cmd eq "which")
|
|
{
|
|
${$cmd}++;
|
|
}
|
|
|
|
# index list
|
|
# info list
|
|
# who list
|
|
elsif ($cmd eq "index" ||
|
|
$cmd eq "info" ||
|
|
$cmd eq "who")
|
|
{
|
|
if ($#f == 1) {
|
|
$lists{$f[1]}++;
|
|
$f[1] =~ s/-//g;
|
|
${$f[1]}{$cmd}++;
|
|
} else {
|
|
$bad{$cmd}++;
|
|
}
|
|
}
|
|
|
|
# get list file
|
|
# newinfo list passwd
|
|
elsif ($cmd eq "get" ||
|
|
$cmd eq "newinfo")
|
|
{
|
|
if ($#f == 2) {
|
|
$lists{$f[1]}++;
|
|
$f[1] =~ s/-//g;
|
|
${$f[1]}{$cmd}++;
|
|
if ($cmd eq "get") {
|
|
$req = &ParseAddrs($who);
|
|
$long{$req} = $who;
|
|
$getcount{$req}++;
|
|
}
|
|
} else {
|
|
$bad{$cmd}++;
|
|
}
|
|
}
|
|
|
|
# subscribe list [address]
|
|
# unsubscribe list [address]
|
|
elsif ($cmd eq "subscribe" ||
|
|
$cmd eq "unsubscribe")
|
|
{
|
|
if ($#f >= 1) {
|
|
$lists{$f[1]}++;
|
|
$f[1] =~ s/-//g;
|
|
${$f[1]}{$cmd}++;
|
|
} else {
|
|
$bad{$cmd}++;
|
|
}
|
|
}
|
|
|
|
# request cmd list subscribe (for approval)
|
|
elsif ($cmd eq "request") {
|
|
if ($#f >= 2) {
|
|
$lists{$f[2]}++;
|
|
$f[2] =~ s/-//g;
|
|
${$f[2]}{$cmd}++;
|
|
} else {
|
|
$bad{$cmd}++;
|
|
}
|
|
}
|
|
|
|
else {
|
|
$unrecognized{$cmd}++;
|
|
}
|
|
} else {
|
|
warn "line $. didn't match!\n" if !/^$/;
|
|
}
|
|
}
|
|
|
|
#print "Command summary:\n";
|
|
#foreach $cmd (sort keys %count) {
|
|
# printf " %-20s %4d\n", $cmd, $count{$cmd};
|
|
#}
|
|
|
|
print "Global commands:\n";
|
|
printf(" %-15s %4d\n", "help", $help) if defined($help);
|
|
printf(" %-15s %4d\n", "lists", $lists) if defined($lists);
|
|
printf(" %-15s %4d\n", "which", $which) if defined($which);
|
|
print "\n";
|
|
|
|
#print "Unrecognized commands:\n";
|
|
#foreach $cmd (sort keys %unrecognized) {
|
|
# printf " %-15s %4d\n", $cmd, $unrecognized{$cmd};
|
|
#}
|
|
#print "\n";
|
|
|
|
if (defined(%bad)) {
|
|
print "Incomplete commands:\n";
|
|
foreach $cmd (sort keys %bad) {
|
|
printf " %-15s %4d\n", $cmd, $bad{$cmd};
|
|
}
|
|
print "\n";
|
|
}
|
|
|
|
# skip request and newinfo
|
|
print "List subscr unsub index get info who config approve\n";
|
|
foreach $list (sort keys %lists) {
|
|
printf "%-20s", substr($list,0,20);
|
|
$list =~ s/-//g;
|
|
%l = %{$list};
|
|
printf " %6d %6d %6d %6d %6d %6d %6d %6d\n", $l{subscribe}, $l{unsubscribe},
|
|
$l{index}, $l{get}, $l{info}, $l{who}, $l{config}, $l{approve};
|
|
}
|
|
print "\n";
|
|
|
|
@reqs = sort {$getcount{$b}<=>$getcount{$a};} keys %getcount;
|
|
if ($#reqs >= 0) {
|
|
print "Top requestors (get command):\n";
|
|
for ($i=0; $i < 5; $i++) {
|
|
printf " %5d %s\n", $getcount{$reqs[$i]}, $long{$reqs[$i]};
|
|
last if ($i == $#reqs);
|
|
}
|
|
}
|
|
|
|
# from majordomo.pl, modified to work on a single address
|
|
# $addrs = &ParseAddrs($addr_list)
|
|
sub ParseAddrs {
|
|
local($_) = shift;
|
|
1 while s/\([^\(\)]*\)//g; # strip comments
|
|
1 while s/"[^"]*"//g; # strip comments
|
|
1 while s/.*<(.*)>.*/\1/;
|
|
s/^\s+//;
|
|
s/\s+$//;
|
|
$_;
|
|
}
|
|
|