Add postingstats to tools.
postingstats.pl will parse groupstats output and create a posting ready to post to de.admin.news.misc. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
c6346470f9
commit
53c2032850
99
tools/postingstats.pl
Normal file
99
tools/postingstats.pl
Normal file
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# postingstats.pl
|
||||
#
|
||||
# This script will create a posting statistic for de.admin.lists
|
||||
# from NewsStats output.
|
||||
#
|
||||
# It is part of the NewsStats package.
|
||||
#
|
||||
# Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
|
||||
#
|
||||
# It can be redistributed and/or modified under the same terms under
|
||||
# which Perl itself is published.
|
||||
#
|
||||
# $~ groupstats.pl --nocomments --sums --format dump | postingstats.pl xxxx-xx
|
||||
#
|
||||
|
||||
use strict;
|
||||
use constant TABLEWIDTH => 28; # width of table without newsgroup name
|
||||
|
||||
our $VERSION = '0.01';
|
||||
|
||||
##### ----- subroutines -----
|
||||
|
||||
sub percentage {
|
||||
# calculate percentage rate from base value and percentage
|
||||
my ($base,$percentage) = @_;
|
||||
return ($percentage * 100 / $base);
|
||||
}
|
||||
|
||||
sub divider {
|
||||
# build a divider line of $symbol as wide as the table is
|
||||
my ($symbol,$maxlength) = @_;
|
||||
return ':' . $symbol x ($maxlength+TABLEWIDTH) . ":\n";
|
||||
}
|
||||
|
||||
##### ----- main loop -----
|
||||
|
||||
# get $month from ARGV
|
||||
my $month = shift;
|
||||
|
||||
# read from STDIN
|
||||
my (%postings, $hierarchy, $maxlength);
|
||||
|
||||
while(<>) {
|
||||
my ($group, $postings) = split;
|
||||
$hierarchy = $postings if $group eq 'de.ALL';
|
||||
next if $group =~ /ALL$/;
|
||||
$postings{$group} = $postings;
|
||||
$maxlength = length($group) if length($group) > $maxlength;
|
||||
}
|
||||
|
||||
# print to STDOUT
|
||||
my $heading = ' Postingstatistik fuer de.* im Monat '.$month;
|
||||
my $padding = ' ' x (($maxlength+TABLEWIDTH-2-length($heading))/2);
|
||||
my $timestamp = time;
|
||||
my $counter = 0;
|
||||
|
||||
print <<HEADER;
|
||||
From: Thomas Hochstein <thh\@inter.net>
|
||||
Newsgroups: de.admin.news.misc
|
||||
Subject: Postingstatistik fuer de.* im Monat $month
|
||||
Message-ID: <destat-postings-$month.$timestamp\@mid.news.szaf.org>
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset=ISO-8859-1
|
||||
Content-Transfer-Encoding: 7bit
|
||||
User-Agent: postingstats.pl/$VERSION (NewsStats)
|
||||
|
||||
HEADER
|
||||
|
||||
print ÷r('=',$maxlength);
|
||||
printf(": %s%s%s :\n",$padding,$heading,$padding);
|
||||
print ÷r('=',$maxlength);
|
||||
printf(": Nr. : Anzahl : Prozent : %-*s :\n",$maxlength,'Newsgroup');
|
||||
print ÷r('-',$maxlength);
|
||||
|
||||
foreach my $group (sort { $postings{$b} <=> $postings {$a}} keys %postings) {
|
||||
$counter++;
|
||||
printf(": %3u. : %6u : %6.2f%% : %-*s :\n",$counter,$postings{$group},&percentage($hierarchy,$postings{$group}),$maxlength,$group);
|
||||
}
|
||||
|
||||
print ÷r('-',$maxlength);
|
||||
printf(": : %6u : %s : %-*s :\n",$hierarchy,'100.00%',$maxlength,'de.*');
|
||||
print ÷r('=',$maxlength);
|
||||
|
||||
print <<LEADOUT;
|
||||
|
||||
Alle Zahlen wurden ermittelt auf einem Newsserver mit redundanter Anbin-
|
||||
dung fuer de.* unter Anwendung ueblicher Filtermassnahmen. Steuernach-
|
||||
richten werden nicht erfasst; Postings, die supersedet oder gecancelt
|
||||
wurden, bleiben erfasst, sofern sie das System ueberhaupt (und vor der
|
||||
Loeschnachricht) erreicht haben. Crosspostings werden in jeder Gruppe,
|
||||
in die sie gerichtet sind, gezaehlt, aber bei Ermittlung der Summe be-
|
||||
reinigt; daher ist die Postinganzahl fuer de.* gesamt niedriger als die
|
||||
Summe der Postinganzahlen der Einzelgruppen.
|
||||
|
||||
Die Daten stehen graphisch aufbereitet unter <http://usenet.dex.de/> zur
|
||||
Verfuegung.
|
||||
LEADOUT
|
Loading…
Reference in a new issue