Files
tuend-work 18736081c6 a
2025-11-13 08:41:45 +07:00

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+$//;
$_;
}