10 # Input lines look like this:
11 # May 23 19:00:02 chiark innduct[23236]: news.relativity.greenend.org.uk| info: completed feedfile read=76 (+bl=7,+err=0) missing=0 offered=76 (ch=76,nc=0) accepted=75 (ch=75,nc=0) unwanted=1 (id=1,bod=0,nc=0) rejected=0 (id=0,bod=0,nc=0) deferred=0 (id=0,bod=0,nc=0) missing=0 (id=0,bod=0,nc=0) connretry=0 (id=0,bod=0,nc=0)
13 if (@ARGV && $ARGV[0] =~ m/^\-/) {
14 die "$0: bad usage: no options supported\n";
23 (?: info | notice ):[ ]
24 (?: completed | processed )[ ]
33 my ($site,$strs) = ($1,$2);
34 die unless $strs =~ m/^ read=/;
38 my $c= \%{ $counts{$site} };
41 if ($strs =~ s/^[ ] (\w+) = (\d+) [ ]/ /x) {
48 \) [ ]/ sprintf " (%s) ", defined $3 ? $3 : '' /xe) {
49 $c->{"${cur}_$1"} += $2;
50 } elsif ($strs =~ s/^ \(\) / /) {
51 } elsif ($strs eq ' ') {
59 # foreach my $k (sort keys %$c) { printf " %s=%d", $k, $c->{$k}; }
63 #print STDERR Dumper(\%counts);;
69 foreach $site (sort keys %counts) {
71 $processed= $cwr->{offered} - $cwr->{deferred};
77 return undef unless defined($dend) and $dor;
78 return $dend * 100.0 / $dor;
83 return '' unless defined $v;
84 if ($v < 9999) { return sprintf "%4d ", $v; }
85 if ($v < 9999e3) { return sprintf "%4dk", ($v / 1e3); }
86 return sprintf "%4dm", ($v / 1e3);
90 offrd defer acctd unwtd rejtd df% ac% rj% nochk nc%
93 @>>>> @>>>> @>>>> @>>>> @>>>> ^## ^## ^## @>>>> ^## @<<<<<<<<<<<<<<<<<<<<<<<...
94 { (map { amt($cwr->{$_}) } qw(offered deferred accepted unwanted rejected)),
95 (pct($cwr->{deferred}, $cwr->{offered})),
96 (map { pct($cwr->{$_}, $processed) } qw(accepted rejected)),
97 ($cwr->{offered_nc} ? (amt($cwr->{offered_nc}),
98 pct($cwr->{offered_nc}, $processed))