X-Git-Url: https://code.th-h.de/?p=usenet%2Fnewsstats.git;a=blobdiff_plain;f=groupstats.pl;h=bed36e2bc0d912a276c3d937f84e767d8434ec5e;hp=c5b8b7d66af2922fe39534227d8fd3eb8104e798;hb=d3b6810d3d09c7a1dffaef75731624fd9712d914;hpb=78389b28e945178cad3f43a63e5d1091334e8dab diff --git a/groupstats.pl b/groupstats.pl index c5b8b7d..bed36e2 100755 --- a/groupstats.pl +++ b/groupstats.pl @@ -3,7 +3,7 @@ # groupstats.pl # # This script will get statistical data on newgroup usage -# form a database. +# from a database. # # It is part of the NewsStats package. # @@ -62,8 +62,8 @@ if ($Options{'b'} or $Options{'l'}) { }; ### check output type -# default output type to 'dump' -$Options{'o'} = 'dump' if !$Options{'o'}; +# default output type to 'pretty' +$Options{'o'} = 'pretty' if !$Options{'o'}; # fail if more than one newsgroup is combined with 'dumpgroup' type die ("$MySelf: E: You cannot combine newsgroup lists (-n) with more than one group with '-o dumpgroup'!\n") if ($Options{'o'} eq 'dumpgroup' and defined($Options{'n'}) and $Options{'n'} =~ /:|\*/); # accept 'dumpgroup' only with -n @@ -72,10 +72,15 @@ if ($Options{'o'} eq 'dumpgroup' and !defined($Options{'n'})) { warn ("$MySelf: W: You must submit exactly one newsgroup ('-n news.group') for '-o dumpgroup'. Output type was set to 'dump'.\n"); }; # set output type to 'pretty' for -l -if ($Options{'l'}) { +if ($Options{'l'} and $Options{'o'} ne 'pretty') { $Options{'o'} = 'pretty'; warn ("$MySelf: W: Output type forced to '-o pretty' due to usage of '-l'.\n"); }; +# set output type to 'dump' for -f +if ($Options{'f'} and $Options{'o'} ne 'dump') { + $Options{'o'} = 'dump'; + warn ("$MySelf: W: Output type forced to '-o dump' due to usage of '-f'.\n"); +}; ### init database my $DBHandle = InitDB(\%Conf,1); @@ -94,7 +99,9 @@ if ($Options{'a'}) { } else { ($StartMonth,$EndMonth) = &GetTimePeriod($Options{'m'},$Options{'p'}); }; -# if time period is more than one month: set output type to '-o pretty' or '-o dumpgroup' +# if -p or -a are set: drop -m +undef $Options{'m'} if ($Options{'p'} or $Options{'a'}); +# if time period is more than one month: force output type to '-o pretty' or '-o dumpgroup' if ($Options{'o'} eq 'dump' and ($Options{'p'} or $Options{'a'})) { if (defined($Options{'n'}) and $Options{'n'} !~ /:|\*/) { # just one newsgroup is defined @@ -144,7 +151,7 @@ my $WhereClause = sprintf('month BETWEEN ? AND ? AND %s AND %s %s',$QueryGroupLi # get length of longest newsgroup delivered by query for formatting purposes # FIXME -my $MaxLength = &GetMaxLenght($DBHandle,$Conf{'DBTableGrps'},'newsgroup',$WhereClause,$StartMonth,$EndMonth,(@GroupList,@Params)); +my $MaxLength = &GetMaxLength($DBHandle,$Conf{'DBTableGrps'},'newsgroup',$WhereClause,$StartMonth,$EndMonth,(@GroupList,@Params)); my ($OrderClause,$DBQuery); # -b (best of / top list) defined? @@ -202,10 +209,10 @@ $DBQuery->execute($StartMonth,$EndMonth,@GroupList,@Params) undef($Options{'c'}) if $Options{'f'}; # print caption (-c) with time period if -m or -p is set if ($Options{'c'}) { - if ($Options{'p'}) { - printf ("----- Report from %s to %s\n",$StartMonth,$EndMonth); - } elsif ($Options{'m'}) { + if ($Options{'m'}) { printf ("----- Report for %s\n",$StartMonth); + } else { + printf ("----- Report from %s to %s %s\n",$StartMonth,$EndMonth,$Options{'a'} ? '(all months)' : ''); }; }; # print caption (-c) with newsgroup list if -n is set @@ -296,10 +303,9 @@ period by using B<-l> (together with B as needed). Last but not least you can create a "best of" list of the top x newsgroups via B<-b> (or a "worst of" list by adding B). -By default, B will dump a very simple alphabetical list of -newsgroups, one per line, followed by the number of postings in that -month. This output format of course cannot sensibly be combined with -time periods, so you can set the output format by using B<-o> (see +By default, B will dump an alphabetical list of newsgroups, +one per line, followed by the number of postings in that group, for +every month. You can change the output format by using B<-o> (see below). Captions can be added by setting the B<-c> switch. =head2 Configuration @@ -395,10 +401,18 @@ See the B man page for details. =item B<-o> I (output format) -Set output format. Default is I, consisting of an alphabetical -list of newsgroups, each on a new line, followed by the number of -postings in that month. This default format can't be used with time -periods of more than one month. +Set output format. Default is I, which will print a header for +each new month, followed by an alphabetical list of newsgroups, each +on a new line, followed by the number of postings in that month. +B will try to align newsgroup names and posting counts. +Usage of B<-b> will force this format; it cannot be used together with +B<-f>. + +I format is used to create an easily parsable output consisting +of an alphabetical list of newsgroups, each on a new line, followed by +the number of postings in that month, without any alignment. This +default format can't be used with time periods of more than one month. +Usage of B<-f> will force this format. I format is like I, but will print the month in front of the newsgroup name. @@ -407,11 +421,6 @@ I format can only be use with a group list (see B<-n>) of exactly one newsgroup and is like I, but will output months, followed by the number of postings. -If you don't need easily parsable output, you'll mostly use I -format, which will print a header for each new month and try to align -newsgroup names and posting counts. Usage of B<-b> will force this -format. - =item B<-c> (captions) Add captions to output (reporting period, newsgroups list, threshold