Update documentation.

- Fix clientstats doc (copied from hoststats).
- Add some more examples ro README.

Signed-off-by: Thomas Hochstein <thh@thh.name>
This commit is contained in:
Thomas Hochstein 2025-06-01 16:39:25 +02:00
parent 0b87e81b08
commit 66890b68d8
11 changed files with 329 additions and 263 deletions

View file

@ -275,7 +275,7 @@ clientstats - create reports on client usage
=head1 SYNOPSIS =head1 SYNOPSIS
B<clientstats> [B<-Vhcs> B<--comments>] [B<-m> I<YYYY-MM>[:I<YYYY-MM>] | I<all>] [B<-n> I<client(s)>] [B<-r> I<report type>] [B<-l> I<lower boundary>] [B<-u> I<upper boundary>] [B<-g> I<group by>] [B<-o> I<order by>] [B<-f> I<output format>] [B<--filetemplate> I<filename template>] [B<--db> I<database table>] [B<--conffile> I<filename>] B<clientstats> [B<-Vhcsv> B<--comments>] [B<-m> I<YYYY-MM>[:I<YYYY-MM>] | I<all>] [B<-n> I<client(s)>] [B<-r> I<report type>] [B<-l> I<lower boundary>] [B<-u> I<upper boundary>] [B<-g> I<group by>] [B<-o> I<order by>] [B<-f> I<output format>] [B<--filetemplate> I<filename template>] [B<--db> I<database table>] [B<--conffile> I<filename>]
=head1 REQUIREMENTS =head1 REQUIREMENTS
@ -323,18 +323,19 @@ details and exceptions, please see below.
The results will be formatted as a kind of table; you can change the The results will be formatted as a kind of table; you can change the
output format to a simple list or just a list of names and number of output format to a simple list or just a list of names and number of
postings with the B<--format> option. Captions will be added by means of postings with the B<--format> option. Captions will be added by means
the B<--caption> option; all comments (and captions) can be supressed by of the B<--caption> option; all comments (and captions) can be
using B<--nocomments>. supressed by using B<--nocomments>.
Last but not least you can redirect all output to a number of files, e.g. Last but not least you can redirect all output to a number of files,
one for each month, by submitting the B<--filetemplate> option, see below. e.g. one for each month, by submitting the B<--filetemplate> option,
see below.
=head2 Configuration =head2 Configuration
B<clientstats> will read its configuration from F<newsstats.conf> B<clientstats> will read its configuration from F<newsstats.conf>
which should be present in etc/ via Config::Auto or from a configuration file which should be present in etc/ via Config::Auto or from a configuration
submitted by the B<--conffile> option. file submitted by the B<--conffile> option.
See doc/INSTALL for an overview of possible configuration options. See doc/INSTALL for an overview of possible configuration options.
@ -346,32 +347,47 @@ You can override some configuration options via the B<--db> option.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all> =item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all>
Set processing period to a single month in YYYY-MM format or to a time Set processing period to a single month in YYYY-MM format or to a time
period between two month in YYYY-MM:YYYY-MM format (two month, separated period between two month in YYYY-MM:YYYY-MM format (two month, separated
by a colon). By using the keyword I<all> instead, you can set no by a colon). By using the keyword I<all> instead, you can set no
processing period to process the whole database. processing period to process the whole database. Defaults to last month.
=item B<-n>, B<--names> I<name(s)> =item B<-n>, B<--names> I<name(s)>
Limit processing to a certain set of client names. I<names(s)> Limit processing to a certain set of client names. I<names(s)>
can be a single name (eternal-september.org), a group of names can be a single name (Thunderbird), a group of names (Ice*) or a list
(*.inka.de) or a list of either of these, separated by colons, for of either of these, separated by colons, for example
example
eternal-september.org:solani.org:*.inka.de Forte Agent:Thunderbird:Ice*
Spaces or special characters like "*" need to be quoted from the shell,
like
-n 'Forte Agent:Thunderbird:Ice*'
There is no way to limit processing to a specific version, but you can
alway grep through the output.
=item B<-s>, B<--sums|--nosums> (sum per month) =item B<-s>, B<--sums|--nosums> (sum per month)
Include "virtual" clients named "ALL" for every month in output, Include "virtual" clients named "ALL" for every month in output,
containing the sum of all detected clients for that month. containing the sum of all detected clients for that month. False
by default.
=item B<-v>, B<--versions|--noversions> (client versions)
Include a list of all observed versions of each client in output.
Version information will be displayed with indents ('-') below each
client, sorted in the same way (by postings or alphanumeric). False
by default.
=item B<-r>, B<--report> I<default|sums> =item B<-r>, B<--report> I<default|sums>
@ -379,7 +395,7 @@ Choose the report type: I<default> or I<sums>
By default, B<clientstats> will report the number of postings for each By default, B<clientstats> will report the number of postings for each
client in each month. But it can also report the total sum of postings client in each month. But it can also report the total sum of postings
per client for all months. per client for all months. Sums of B<--versions> can be included.
For report type I<sums>, the B<group-by> option has no meaning and For report type I<sums>, the B<group-by> option has no meaning and
will be silently ignored (see below). will be silently ignored (see below).
@ -395,10 +411,10 @@ Set the upper boundary.
By default, all clients with more postings per month than the By default, all clients with more postings per month than the
upper boundary and/or less postings per month than the lower boundary upper boundary and/or less postings per month than the lower boundary
will be excluded from further processing. For the default report that will be excluded from further processing. For the default report that
means each month only /clients with a number of postings between means each month only clients with a number of postings between the
the boundaries will be displayed. For the sums report, /clients boundaries will be displayed. For the sums report, clients with a
with a number of postings exceeding the boundaries in all (!) months number of postings exceeding the boundaries in all (!) months will
will not be considered. not be considered.
=item B<-g>, B<--group-by> I<month[-desc]|name[-desc]> =item B<-g>, B<--group-by> I<month[-desc]|name[-desc]>
@ -406,38 +422,38 @@ By default, all results are grouped by month, sorted chronologically in
ascending order, like this: ascending order, like this:
# ----- 2012-01: # ----- 2012-01:
arcor-online.net : 9379 40tude_Dialog: 5873
individual.net : 19525 Forte Agent : 7735
news.albasani.net: 9063 Thunderbird : 20925
# ----- 2012-02: # ----- 2012-02:
arcor-online.net : 8606 40tude_Dialog: 4142
individual.net : 16768 Forte Agent : 5895
news.albasani.net: 7879 Thunderbird : 19091
The results can be grouped by client instead via The results can be grouped by client instead via
B<--group-by> I<name>: B<--group-by> I<name>:
----- individual.net # ----- 40tude_Dialog:
2012-01: 19525 2012-01: 5873
2012-02: 16768 2012-02: 4142
----- arcor-online.net # ----- Forte Agent:
2012-01: 9379 2012-01: 7735
2012-02: 8606 2012-02: 5895
----- news.albasani.net # ----- Thunderbird:
2012-01: 9063 2012-01: 20925
2012-02: 7879 2012-02: 19091
By appending I<-desc> to the group-by option parameter, you can reverse By appending I<-desc> to the group-by option parameter, you can reverse
the sort order - e.g. B<--group-by> I<month-desc> will give: the sort order - e.g. B<--group-by> I<month-desc> will give:
# ----- 2012-02: # ----- 2012-02:
arcor-online.net : 8606 40tude_Dialog: 4142
individual.net : 16768 Forte Agent : 5895
news.albasani.net: 7879 Thunderbird : 19091
# ----- 2012-01: # ----- 2012-01:
arcor-online.net : 9379 40tude_Dialog: 5873
individual.net : 19525 Forte Agent : 7735
news.albasani.net: 9063 Thunderbird : 20925
Sums reports (see above) will always be grouped by months; this option Sums reports (see above) will always be grouped by months; this option
will therefore be ignored. will therefore be ignored.
@ -449,41 +465,57 @@ the report will be sorted by name (or month) in ascending alphabetical
order by default. You can change the sort order to descending or sort order by default. You can change the sort order to descending or sort
by number of postings instead. by number of postings instead.
=item B<-f>, B<--format> I<pretty|list|dump> By default, output is sorted alphabetically:
Select the output format, I<pretty> being the default:
# ----- 2012-01: # ----- 2012-01:
arcor-online.net : 9379 40tude_Dialog: 5873
individual.net : 19525 Forte Agent : 7735
Thunderbird : 20925
Using B<--order-by> I<postings[-desc]>, it will be sorted from most
to least postings:
# ----- 2012-01:
Thunderbird : 20925
Forte Agent : 7735
40tude_Dialog: 5873
=item B<-f>, B<--format> I<pretty|list|dump>
Select the output format, I<pretty> (a kind of table) being the default:
# ----- 2012-01:
40tude_Dialog: 5873
Forte Agent : 7735
# ----- 2012-02: # ----- 2012-02:
arcor-online.net : 8606 40tude_Dialog: 4142
individual.net : 16768 Forte Agent : 5895
I<list> format looks like this: I<list> format looks like this (each client preceded by month):
2012-01 arcor-online.net 9379 2012-01 40tude_Dialog 5873
2012-01 individual.net 19525 2012-01 Forte Agent 7735
2012-02 arcor-online.net 8606 2012-02 40tude_Dialog 4142
2012-02 individual.net 16768 2012-02 Forte Agent 5895
And I<dump> format looks like this: And I<dump> format looks like this:
# 2012-01: # 2012-01:
arcor-online.net 9379 40tude_Dialog 5873
individual.net 19525 Forte Agent 7735
# 2012-02: # 2012-02:
arcor-online.net 8606 40tude_Dialog 4142
individual.net 16768 Forte Agent 5895
You can remove the comments by using B<--nocomments>, see below. You can remove the comments (lines after '#') by using B<--nocomments>,
see below.
=item B<-c>, B<--captions|--nocaptions> =item B<-c>, B<--captions|--nocaptions>
Add captions to output, like this: Add captions to output, like this:
----- Report for 2012-01 to 2012-02 (number of postings for each month) ----- Report for 2012-01 to 2012-02 (number of postings for each month)
----- Names: individual.net ----- Names: Thunderbird
----- Threshold: 8000 => x (counting only month fulfilling this condition) ----- Threshold: 8000 => x (counting only month fulfilling this condition)
----- Grouped by Month (ascending), sorted by number of postings descending ----- Grouped by Month (ascending), sorted by number of postings descending
@ -491,11 +523,11 @@ False by default.
=item B<--comments|--nocomments> =item B<--comments|--nocomments>
Add comments (group headers) to I<dump> and I<pretty> output. True by default Add comments (group headers) to I<dump> and I<pretty> output. True by
as logn as B<--filetemplate> is not set. default as long as B<--filetemplate> is not set.
Use I<--nocomments> to suppress anything except client names or months and Use I<--nocomments> to suppress anything except client names or months
numbers of postings. and numbers of postings.
=item B<--filetemplate> I<filename template> =item B<--filetemplate> I<filename template>
@ -515,7 +547,7 @@ Override I<DBTableClnts> or I<DBTableClnts> from F<newsstats.conf>.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back
@ -525,26 +557,26 @@ See L<doc/INSTALL>.
=head1 EXAMPLES =head1 EXAMPLES
Show number of postings per group for lasth month in I<pretty> format: Show number of postings per client for lasth month in I<pretty> format:
clientstats clientstats
Show that report for January of 2010 and *.inka plus individual.net: Show that report for January of 2010 and Thunderbird plus Ice*:
clientstats --month 2010-01 --names *.inka:individual.net: clientstats --month 2010-01 --names 'Thunderbird:Ice*'
Only show clients with 30 postings or less last month, ordered Only show clients with at least 30 postings last month and the versions
by number of postings, descending, in I<pretty> format: of those clients, ordered each by number of postings, descending,
in I<pretty> format:
clientstats --upper 30 --order-by postings-desc clientstats --lower 30 --versions --order-by postings-desc
List number of postings per host for each month of 2010 and redirect List number of postings per client for each month of 2010 and redirect
output to one file for each month, named hosts-2010-01 and so on, in output to one file for each month, named hosts-2010-01 and so on, in
machine-readable form (without formatting): machine-readable form (without formatting):
clientstats -m 2010-01:2010-12 -f dump --filetemplate hosts clientstats -m 2010-01:2010-12 -f dump --filetemplate hosts
=head1 FILES =head1 FILES
=over 4 =over 4

View file

@ -168,7 +168,7 @@ INSTALL
my $Upgrade =''; my $Upgrade ='';
if ($OptUpdate) { if ($OptUpdate) {
$Upgrade = <<UPGRADE; $Upgrade = <<UPGRADE;
---------- ----------
Your installation was upgraded from $OptUpdate to $VERSION. Your installation was upgraded from $OptUpdate to $VERSION.
@ -218,16 +218,7 @@ if (!$OptUpdate) {
} else { } else {
##### upgrade mode ##### upgrade mode
print "----------\nStarting upgrade process.\n"; print "----------\nStarting upgrade process.\n";
my $PackageVersion = '0.03'; # TBD
if ($OptUpdate < $PackageVersion) {
if ($OptUpdate < 0.02) {
# 0.01 -> 0.02
# &DoMySQL('...;');
# print "v0.02: Database upgrades ...\n";
# &PrintInstructions('0.02',<<" INSTRUCTIONS");
# INSTRUCTIONS
};
};
# Display general upgrade instructions # Display general upgrade instructions
print $Upgrade; print $Upgrade;
}; };
@ -307,11 +298,11 @@ See L<doc/INSTALL> for an overview of possible configuration options.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-u>, B<--update> I<version> =item B<-u>, B<--update> I<version>
@ -319,7 +310,7 @@ Don't do a fresh install, but update from I<version>.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back

View file

@ -167,8 +167,9 @@ time.
All reporting is done to I<syslog> via I<news> facility. If B<feedlog> All reporting is done to I<syslog> via I<news> facility. If B<feedlog>
fails to initiate a database connection at startup, it will log to fails to initiate a database connection at startup, it will log to
I<syslog> with I<CRIT> priority and go in an endless loop, as I<syslog> with I<CRIT> priority and go in an endless loop, trying again
terminating would only result in a rapid respawn. to connect every 5 seconds, as terminating would only result in a rapid
respawn.
=head2 Configuration =head2 Configuration
@ -184,15 +185,15 @@ See L<doc/INSTALL> for an overview of possible configuration options.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-d>, B<--debug> =item B<-d>, B<--debug>
Output debugging information to STDERR while parsing STDIN. You'll Print debugging information to STDERR while parsing STDIN. You'll
find that information most probably in your B<INN> F<errlog> file. find that information most probably in your B<INN> F<errlog> file.
=item B<-q>, B<--quiet> =item B<-q>, B<--quiet>
@ -201,7 +202,7 @@ Suppress logging to syslog.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back

View file

@ -803,12 +803,12 @@ override that default through the B<--clientsdb> option.
=head2 Configuration =head2 Configuration
B<gatherstats> will read its configuration from F<newsstats.conf> B<gatherstats> will read its configuration from F<newsstats.conf>
which should be present in etc/ via Config::Auto or from a configuration file which should be present in etc/ via Config::Auto or from a configuration
submitted by the B<--conffile> option. file submitted by the B<--conffile> option.
See L<doc/INSTALL> for an overview of possible configuration options. See L<doc/INSTALL> for an overview of possible configuration options.
You can override configuration options via the B<--hierarchy>, You can override configuration options by using the B<--hierarchy>,
B<--rawdb>, B<--groupsdb>, B<--clientsdb> and B<--hostsdb> options, B<--rawdb>, B<--groupsdb>, B<--clientsdb> and B<--hostsdb> options,
respectively. respectively.
@ -818,15 +818,15 @@ respectively.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-d>, B<--debug> =item B<-d>, B<--debug>
Output debugging information to STDOUT while processing (number of Print debugging information to STDOUT while processing (number of
postings per group). postings per group).
=item B<-t>, B<--test> =item B<-t>, B<--test>
@ -838,15 +838,17 @@ conjunction with B<--test> ... everything else seems a bit pointless.
Set processing period to a single month in YYYY-MM format or to a time Set processing period to a single month in YYYY-MM format or to a time
period between two month in YYYY-MM:YYYY-MM format (two month, separated period between two month in YYYY-MM:YYYY-MM format (two month, separated
by a colon). by a colon). Defaults to last month.
=item B<-s>, B<--stats> I<type> =item B<-s>, B<--stats> I<type>
Set processing type to one of I<all>, I<groups> or I<hosts>. Defaults Set processing type to one of I<all>, I<groups>, I<hosts> or I<clients>.
to all. Defaults to I<all>.
=item B<-c>, B<--checkgroups> I<filename template> =item B<-c>, B<--checkgroups> I<filename template>
Relevant only for newsgroup stats (I<groups>).
Check each group against a list of valid newsgroups read from a file, Check each group against a list of valid newsgroups read from a file,
one group on each line and ignoring everything after the first one group on each line and ignoring everything after the first
whitespace (so you can use a file in checkgroups format or (part of) whitespace (so you can use a file in checkgroups format or (part of)
@ -889,7 +891,7 @@ Override I<DBTableClnts> from F<newsstats.conf>.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back

View file

@ -283,7 +283,7 @@ See L<doc/README>.
=head1 DESCRIPTION =head1 DESCRIPTION
This script create reports on newsgroup usage (number of postings per This script creates reports on newsgroup usage (number of postings per
group per month) taken from result tables created by group per month) taken from result tables created by
B<gatherstats.pl>. B<gatherstats.pl>.
@ -291,16 +291,16 @@ B<gatherstats.pl>.
=head3 Time period and newsgroups =head3 Time period and newsgroups
The time period to act on defaults to last month; you can assign another The time period to act on defaults to last month; you can assign
time period or a single month (or drop all time constraints) via the another time period or a single month (or drop all time constraints)
B<--month> option (see below). via the B<--month> option (see below).
B<groupstats> will process all newsgroups by default; you can limit B<groupstats> will process all newsgroups by default; you can limit
processing to only some newsgroups by supplying a list of those groups via processing to only some newsgroups by supplying a list of those groups
B<--newsgroups> option (see below). You can include hierarchy levels in via B<--newsgroups> option (see below). You can include hierarchy
the output by adding the B<--sums> switch (see below). Optionally levels in the output by adding the B<--sums> switch (see below).
newsgroups not present in a checkgroups file can be excluded from output, Optionally newsgroups not present in a checkgroups file can be excluded
sse B<--checkgroups> below. from output, sse B<--checkgroups> below.
=head3 Report type =head3 Report type
@ -321,26 +321,27 @@ below.
=head3 Sorting and formatting the output =head3 Sorting and formatting the output
By default, all results are grouped by month; you can group results by By default, all results are grouped by month; you can group results by
newsgroup instead via the B<--groupy-by> option. Within those groups, the newsgroup instead via the B<--groupy-by> option. Within those groups,
list of newsgroups (or months) is sorted alphabetically (or the list of newsgroups (or months) is sorted alphabetically (or
chronologically, respectively) ascending. You can change that order (and chronologically, respectively) ascending. You can change that order
sort by number of postings) with the B<--order-by> option. For details and (and sort by number of postings) with the B<--order-by> option. For
exceptions, please see below. details and exceptions, please see below.
The results will be formatted as a kind of table; you can change the The results will be formatted as a kind of table; you can change the
output format to a simple list or just a list of newsgroups and number of output format to a simple list or just a list of newsgroups and number
postings with the B<--format> option. Captions will be added by means of of postings with the B<--format> option. Captions will be added by means
the B<--caption> option; all comments (and captions) can be supressed by of the B<--caption> option; all comments (and captions) can be supressed
using B<--nocomments>. by using B<--nocomments>.
Last but not least you can redirect all output to a number of files, e.g. Last but not least you can redirect all output to a number of files,
one for each month, by submitting the B<--filetemplate> option, see below. e.g. one for each month, by submitting the B<--filetemplate> option,
see below.
=head2 Configuration =head2 Configuration
B<groupstats> will read its configuration from F<newsstats.conf> B<groupstats> will read its configuration from F<newsstats.conf>
which should be present in etc/ via Config::Auto or from a configuration file which should be present in etc/ via Config::Auto or from a configuration
submitted by the B<--conffile> option. file submitted by the B<--conffile> option.
See doc/INSTALL for an overview of possible configuration options. See doc/INSTALL for an overview of possible configuration options.
@ -352,18 +353,18 @@ You can override some configuration options via the B<--groupsdb> option.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all> =item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all>
Set processing period to a single month in YYYY-MM format or to a time Set processing period to a single month in YYYY-MM format or to a time
period between two month in YYYY-MM:YYYY-MM format (two month, separated period between two month in YYYY-MM:YYYY-MM format (two month, separated
by a colon). By using the keyword I<all> instead, you can set no by a colon). By using the keyword I<all> instead, you can set no
processing period to process the whole database. processing period to process the whole database. Defaults to last month.
=item B<-n>, B<--newsgroups> I<newsgroup(s)> =item B<-n>, B<--newsgroups> I<newsgroup(s)>
@ -388,17 +389,20 @@ See the B<gatherstats> man page for details.
This option does not work together with the B<--checkgroups> option as This option does not work together with the B<--checkgroups> option as
all "virtual" groups will not be present in the checkgroups file. all "virtual" groups will not be present in the checkgroups file.
False by default.
=item B<--checkgroups> I<filename> =item B<--checkgroups> I<filename>
Restrict output to those newgroups present in a file in checkgroups format Restrict output to those newgroups present in a file in checkgroups
(one newgroup name per line; everything after the first whitespace on each format (one newgroup name per line; everything after the first
line is ignored). All other newsgroups will be removed from output. whitespace on each line is ignored). All other newsgroups will be
removed from output.
Contrary to B<gatherstats>, I<filename> is not a template, but refers to Contrary to B<gatherstats>, I<filename> is not a template, but refers
a single file in checkgroups format. to a single file in checkgroups format.
The B<--sums> option will not work together with this option as "virtual" The B<--sums> option will not work together with this option as
groups will not be present in the checkgroups file. "virtual" groups will not be present in the checkgroups file.
=item B<-r>, B<--report> I<default|average|sums> =item B<-r>, B<--report> I<default|average|sums>
@ -406,8 +410,8 @@ Choose the report type: I<default>, I<average> or I<sums>
By default, B<groupstats> will report the number of postings for each By default, B<groupstats> will report the number of postings for each
newsgroup in each month. But it can also report the average number of newsgroup in each month. But it can also report the average number of
postings per group for all months or the total sum of postings per group postings per group for all months or the total sum of postings per
for all months. group for all months.
For report types I<average> and I<sums>, the B<group-by> option has no For report types I<average> and I<sums>, the B<group-by> option has no
meaning and will be silently ignored (see below). meaning and will be silently ignored (see below).
@ -426,12 +430,13 @@ Set the boundary type to one of I<default>, I<level>, I<average> or
I<sums>. I<sums>.
By default, all newsgroups with more postings per month than the upper By default, all newsgroups with more postings per month than the upper
boundary and/or less postings per month than the lower boundary will be boundary and/or less postings per month than the lower boundary will
excluded from further processing. For the default report that means each be
month only newsgroups with a number of postings between the boundaries excluded from further processing. For the default report that means
will be displayed. For the other report types, newsgroups with a number of each month only newsgroups with a number of postings between the
postings exceeding the boundaries in all (!) months will not be boundaries will be displayed. For the other report types, newsgroups
considered. with a number of postings exceeding the boundaries in all (!) months
will not be considered.
For example, lets take a list of newsgroups like this: For example, lets take a list of newsgroups like this:
@ -461,22 +466,23 @@ month. If you want to list all newsgroups with more than 25 postings
I<in total>, you'll have to set the boundary type to I<sum>, see below. I<in total>, you'll have to set the boundary type to I<sum>, see below.
A boundary type of I<level> will show only those newsgroups - at all - A boundary type of I<level> will show only those newsgroups - at all -
that satisfy the boundaries in each and every single month. With the above that satisfy the boundaries in each and every single month. With the
list of newsgroups and above list of newsgroups and
C<groupstats --month 2012-01:2012-03 --lower 25 --boundary level --report sums>, C<groupstats --month 2012-01:2012-03 --lower 25 --boundary level --report sums>,
you'll get this result: you'll get this result:
----- All months: ----- All months:
de.comp.datenbanken.ms-access 293 de.comp.datenbanken.ms-access 293
de.comp.datenbanken.mysql has not been considered because it had less than de.comp.datenbanken.mysql has not been considered because it had less
25 postings in 2012-02 (only). than 25 postings in 2012-02 (only).
You can use that to get a list of newsgroups that have more (or less) then You can use that to get a list of newsgroups that have more (or less)
x postings in every month during the whole reporting period. then x postings in every month during the whole reporting period.
A boundary type of I<average> will show only those newsgroups - at all -that A boundary type of I<average> will show only those newsgroups - at
satisfy the boundaries on average. With the above list of newsgroups and all - that satisfy the boundaries on average. With the above list of
newsgroups and
C<groupstats --month 2012-01:2012-03 --lower 25 --boundary avg --report sums>, C<groupstats --month 2012-01:2012-03 --lower 25 --boundary avg --report sums>,
you'll get this result: you'll get this result:
@ -491,8 +497,8 @@ The average number of postings in the three groups is:
de.comp.datenbanken.mysql 48.33 de.comp.datenbanken.mysql 48.33
Last but not least, a boundary type of I<sums> will show only those Last but not least, a boundary type of I<sums> will show only those
newsgroups - at all - that satisfy the boundaries with the total sum of newsgroups - at all - that satisfy the boundaries with the total sum
all postings during the reporting period. With the above list of of all postings during the reporting period. With the above list of
newsgroups and newsgroups and
C<groupstats --month 2012-01:2012-03 --lower 25 --boundary sum --report sums>, C<groupstats --month 2012-01:2012-03 --lower 25 --boundary sum --report sums>,
you'll finally get this result: you'll finally get this result:
@ -505,8 +511,8 @@ you'll finally get this result:
=item B<-g>, B<--group-by> I<month[-desc]|newsgroups[-desc]> =item B<-g>, B<--group-by> I<month[-desc]|newsgroups[-desc]>
By default, all results are grouped by month, sorted chronologically in By default, all results are grouped by month, sorted chronologically
ascending order, like this: in ascending order, like this:
----- 2012-01: ----- 2012-01:
de.comp.datenbanken.ms-access 84 de.comp.datenbanken.ms-access 84
@ -525,8 +531,8 @@ B<--group-by> I<newsgroup>:
2012-01 88 2012-01 88
2012-02 21 2012-02 21
By appending I<-desc> to the group-by option parameter, you can reverse By appending I<-desc> to the group-by option parameter, you can
the sort order - e.g. B<--group-by> I<month-desc> will give: reverse the sort order - e.g. B<--group-by> I<month-desc> will give:
----- 2012-02: ----- 2012-02:
de.comp.datenbanken.ms-access 126 de.comp.datenbanken.ms-access 126
@ -541,9 +547,9 @@ this option will therefore be ignored.
=item B<-o>, B<--order-by> I<default[-desc]|postings[-desc]> =item B<-o>, B<--order-by> I<default[-desc]|postings[-desc]>
Within each group (a single month or single newsgroup, see above), the Within each group (a single month or single newsgroup, see above), the
report will be sorted by newsgroup names in ascending alphabetical order report will be sorted by newsgroup names in ascending alphabetical
by default. You can change the sort order to descending or sort by number order by default. You can change the sort order to descending or sort
of postings instead. by number of postings instead.
=item B<-f>, B<--format> I<pretty|list|dump> =item B<-f>, B<--format> I<pretty|list|dump>
@ -587,19 +593,19 @@ False by default.
=item B<--comments|--nocomments> =item B<--comments|--nocomments>
Add comments (group headers) to I<dump> and I<pretty> output. True by default Add comments (group headers) to I<dump> and I<pretty> output. True by
as logn as B<--filetemplate> is not set. default as long as B<--filetemplate> is not set.
Use I<--nocomments> to suppress anything except newsgroup names/months and Use I<--nocomments> to suppress anything except newsgroup names/months
numbers of postings. and numbers of postings.
=item B<--filetemplate> I<filename template> =item B<--filetemplate> I<filename template>
Save output to file(s) instead of dumping it to STDOUT. B<groupstats> will Save output to file(s) instead of dumping it to STDOUT. B<groupstats>
create one file for each month (or each newsgroup, accordant to the will create one file for each month (or each newsgroup, according to
setting of B<--group-by>, see above), with filenames composed by adding the setting of B<--group-by>, see above), with filenames composed by
year and month (or newsgroup names) to the I<filename template>, for adding year and month (or newsgroup names) to the I<filename template>,
example with B<--filetemplate> I<stats>: for example with B<--filetemplate> I<stats>:
stats-2012-01 stats-2012-01
stats-2012-02 stats-2012-02
@ -611,7 +617,7 @@ Override I<DBTableGrps> from F<newsstats.conf>.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back
@ -635,9 +641,9 @@ by number of postings, descending, in I<pretty> format:
groupstats --upper 30 --order-by postings-desc groupstats --upper 30 --order-by postings-desc
Show the total of all postings for the year of 2010 for all groups that Show the total of all postings for the year of 2010 for all groups
had 30 postings or less in every single month in that year, ordered by that had 30 postings or less in every single month in that year,
number of postings in descending order: ordered by number of postings in descending order:
groupstats -m 2010-01:2010-12 -u 30 -b level -r sums -o postings-desc groupstats -m 2010-01:2010-12 -u 30 -b level -r sums -o postings-desc
@ -651,7 +657,6 @@ machine-readable form (without formatting):
groupstats -m 2010-01:2010-12 -f dump --filetemplate stats groupstats -m 2010-01:2010-12 -f dump --filetemplate stats
=head1 FILES =head1 FILES
=over 4 =over 4

View file

@ -197,7 +197,7 @@ See L<doc/README>.
=head1 DESCRIPTION =head1 DESCRIPTION
This script create reports on newsgroup usage (number of postings from This script creates reports on newsgroup usage (number of postings from
each host) taken from result tables created by B<gatherstats.pl>. each host) taken from result tables created by B<gatherstats.pl>.
=head2 Features and options =head2 Features and options
@ -236,18 +236,19 @@ please see below.
The results will be formatted as a kind of table; you can change the The results will be formatted as a kind of table; you can change the
output format to a simple list or just a list of names and number of output format to a simple list or just a list of names and number of
postings with the B<--format> option. Captions will be added by means of postings with the B<--format> option. Captions will be added by means
the B<--caption> option; all comments (and captions) can be supressed by of the B<--caption> option; all comments (and captions) can be
using B<--nocomments>. supressed by using B<--nocomments>.
Last but not least you can redirect all output to a number of files, e.g. Last but not least you can redirect all output to a number of files,
one for each month, by submitting the B<--filetemplate> option, see below. e.g. one for each month, by submitting the B<--filetemplate> option,
see below.
=head2 Configuration =head2 Configuration
B<hoststats> will read its configuration from F<newsstats.conf> B<hoststats> will read its configuration from F<newsstats.conf>
which should be present in etc/ via Config::Auto or from a configuration file which should be present in etc/ via Config::Auto or from a configuration
submitted by the B<--conffile> option. file submitted by the B<--conffile> option.
See doc/INSTALL for an overview of possible configuration options. See doc/INSTALL for an overview of possible configuration options.
@ -259,18 +260,18 @@ You can override some configuration options via the B<--db> option.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all> =item B<-m>, B<--month> I<YYYY-MM[:YYYY-MM]|all>
Set processing period to a single month in YYYY-MM format or to a time Set processing period to a single month in YYYY-MM format or to a time
period between two month in YYYY-MM:YYYY-MM format (two month, separated period between two month in YYYY-MM:YYYY-MM format (two month, separated
by a colon). By using the keyword I<all> instead, you can set no by a colon). By using the keyword I<all> instead, you can set no
processing period to process the whole database. processing period to process the whole database. Defaults to last month.
=item B<-n>, B<--names> I<name(s)> =item B<-n>, B<--names> I<name(s)>
@ -284,7 +285,8 @@ example
=item B<-s>, B<--sums|--nosums> (sum per month) =item B<-s>, B<--sums|--nosums> (sum per month)
Include a "virtual" host named "ALL" for every month in output, Include a "virtual" host named "ALL" for every month in output,
containing the sum of all detected hosts for that month. containing the sum of all detected hosts for that month. False
by default.
=item B<-r>, B<--report> I<default|sums> =item B<-r>, B<--report> I<default|sums>
@ -315,8 +317,8 @@ considered.
=item B<-g>, B<--group-by> I<month[-desc]|name[-desc]> =item B<-g>, B<--group-by> I<month[-desc]|name[-desc]>
By default, all results are grouped by month, sorted chronologically in By default, all results are grouped by month, sorted chronologically
ascending order, like this: in ascending order, like this:
# ----- 2012-01: # ----- 2012-01:
arcor-online.net : 9379 arcor-online.net : 9379
@ -339,8 +341,8 @@ The results can be grouped by host instead via B<--group-by> I<name>:
2012-01: 9063 2012-01: 9063
2012-02: 7879 2012-02: 7879
By appending I<-desc> to the group-by option parameter, you can reverse By appending I<-desc> to the group-by option parameter, you can
the sort order - e.g. B<--group-by> I<month-desc> will give: reverse the sort order - e.g. B<--group-by> I<month-desc> will give:
# ----- 2012-02: # ----- 2012-02:
arcor-online.net : 8606 arcor-online.net : 8606
@ -427,7 +429,7 @@ Override I<DBTableHosts> from F<newsstats.conf>.
=item B<--conffile> I<filename> =item B<--conffile> I<filename>
Load configuration from I<filename> instead of F<newsstats.conf>. Read configuration from I<filename> instead of F<newsstats.conf>.
=back =back
@ -437,7 +439,7 @@ See L<doc/INSTALL>.
=head1 EXAMPLES =head1 EXAMPLES
Show number of postings per group for lasth month in I<pretty> format: Show number of postings per host for lasth month in I<pretty> format:
hoststats hoststats

View file

@ -268,7 +268,7 @@ postingstats - format and post reports
=head1 SYNOPSIS =head1 SYNOPSIS
B<postingstats> B<-t> I<groups|hosts|clients> [B<-Vh> [B<-m> I<YYYY-MM>] B<postingstats> [B<-Vh>] [B<-t> I<groups|hosts|clients>] [B<-m> I<YYYY-MM>]
=head1 REQUIREMENTS =head1 REQUIREMENTS
@ -285,11 +285,13 @@ message that can be posted to Usenet.
B<postingstats> will create a table with entries numbered from most B<postingstats> will create a table with entries numbered from most
to least and percentages calculated from the sum total of all values. to least and percentages calculated from the sum total of all values.
It depends on a sorted list on STDIN in I<dump> format with I<sums>. It depends on a sorted list on STDIN in I<dump> format with I<sums>;
I<versions> from B<clientstas.pl> are optional.
B<postingstats> needs a B<--type> and a B<--month> to create a caption B<postingstats> needs a B<--type> and a B<--month> to create a caption
and select matching lead-ins and lead-outs. B<--type> is also needed and select matching lead-ins and lead-outs. B<--type> is also needed
to catch the correct sum total from input. to catch the correct sum total from input which differs between I<groups>
on one hand and I<hosts> or I<clients> on the other hand.
It will default to posting statistics (number of postings per group) It will default to posting statistics (number of postings per group)
and last month. and last month.
@ -308,7 +310,7 @@ C<----- configuration -----> section.
=item C<$TLH> =item C<$TLH>
Top level hierarchy the report was created for. Used for display and Top level hierarchy the report was created for. Used for display and
sum total. sum total (only for I<groups>).
=item C<%Heading> =item C<%Heading>
@ -327,13 +329,13 @@ Output will be truncated otherwise.
=item C<%LeadIn> =item C<%LeadIn>
Hash with keys for I<GroupStats>, I<HostStats> and I<ClientStats>. Hash with keys for I<GroupStats>, I<HostStats> and I<ClientStats>.
Used to create the headers for our posting. Can contain other text Used to create the headers for the postings. Can contain other text
that will be shown before C<%Heading>. that will be shown before C<%Heading>.
=item C<%LeadOut> =item C<%LeadOut>
Hash with keys for I<GroupStats>, I<HostStats> and I<ClientStats>. Hash with keys for I<GroupStats>, I<HostStats> and I<ClientStats>.
Will be shown at the end of our posting. Will be shown at the end of the posting.
=back =back
@ -343,11 +345,11 @@ Will be shown at the end of our posting.
=item B<-V>, B<--version> =item B<-V>, B<--version>
Print out version and copyright information and exit. Display version and copyright information and exit.
=item B<-h>, B<--help> =item B<-h>, B<--help>
Print this man page and exit. Display this man page and exit.
=item B<-t>, B<--type> I<groups|hosts|clients> =item B<-t>, B<--type> I<groups|hosts|clients>
@ -356,7 +358,7 @@ statistics accordingly.
=item B<-m>, B<--month> I<YYYY-MM> =item B<-m>, B<--month> I<YYYY-MM>
Set month for display. Set month (for display only).
=back =back
@ -372,7 +374,7 @@ Create a posting from a posting statistics report for last month:
Create a posting from a posting statistics report for 2012-01: Create a posting from a posting statistics report for 2012-01:
groupstats.pl --nocomments --sums --format dump | postingstats.pl -t groups -m 2012-01 groupstats.pl --nocomments --sums --format dump -m 2012-01 | postingstats.pl -t groups -m 2012-01
Create a posting from a host statistics report for last month: Create a posting from a host statistics report for last month:

View file

@ -16,6 +16,7 @@ NewsStats 0.4.0 (unreleased)
* Add ClientStats to dopostingstats. * Add ClientStats to dopostingstats.
* Let dopostingstats default to last month. * Let dopostingstats default to last month.
* Set executable bit for new scripts. * Set executable bit for new scripts.
* Update documentation.
NewsStats 0.3.0 (2025-05-18) NewsStats 0.3.0 (2025-05-18)
* Extract GroupStats (in gatherstats) to subroutine. * Extract GroupStats (in gatherstats) to subroutine.

View file

@ -1,11 +1,12 @@
NewsStats (c) 2010-2013, 2025 Thomas Hochstein <thh@thh.name> NewsStats (c) 2010-2013, 2025 Thomas Hochstein <thh@thh.name>
NewsStats is a software package used to gather statistical information NewsStats is a software package that can be used to collect
from a live Usenet feed and for its subsequent examination. statistical information from a live Usenet feed and then analyze it
to create statistical reports.
This script package is free software; you can redistribute it and/or This package is free software; you can redistribute it and/or modify
modify it under the terms of the GNU Public License as published by it under the terms of the GNU Public License as published by the Free
the Free Software Foundation. Software Foundation.
--------------------------------------------------------------------- ---------------------------------------------------------------------
@ -16,9 +17,10 @@ INSTALLATION INSTRUCTIONS
* Download the current version of NewsStats from * Download the current version of NewsStats from
<https://th-h.de/net/software/newsstats/>. <https://th-h.de/net/software/newsstats/>.
* Untar it into a directory of your choice: * Untar it into a directory of your choice, i.e. /srv/newsstats:
# tar -xzf newsstats-nn.tar.gz $ cd /srv
$ tar -xzf newsstats-n.n.n.tar.gz
Scripts in this path - at least feedlog.pl - should be executable by the Scripts in this path - at least feedlog.pl - should be executable by the
news user. news user.
@ -28,8 +30,8 @@ INSTALLATION INSTRUCTIONS
* Copy the sample configuration file newsstats.conf.sample to * Copy the sample configuration file newsstats.conf.sample to
newsstats.conf and modify it for your purposes: newsstats.conf and modify it for your purposes:
# cp etc/newsstats.conf.sample etc/newsstats.conf $ cp etc/newsstats.conf.sample etc/newsstats.conf
# vim etc/newsstats.conf $ vim etc/newsstats.conf
a) Mandatory configuration options a) Mandatory configuration options
@ -60,6 +62,9 @@ INSTALLATION INSTRUCTIONS
* DBTableHosts = hosts_de * DBTableHosts = hosts_de
Table holding data on postings per server. Table holding data on postings per server.
* DBTableClnts = clients_de
Table holding data on postings per client.
b) Optional configuration options b) Optional configuration options
* TLH = de.alt,news.admin * TLH = de.alt,news.admin
@ -68,19 +73,21 @@ INSTALLATION INSTRUCTIONS
3) Database (mysql) setup 3) Database (mysql) setup
* Setup your database server with a username, password and * Setup your database server with an username, a password and
database matching the NewsStats configuration (see 2 a). (optionally) a database matching the NewsStats configuration
(see 2 a).
* Start the database creation script: * Start the database creation script:
# bin/dbcreate.pl $ bin/dbcreate.pl
It will setup the necessary database tables and display some It will create the database (if not already present), create the
information on the next steps. necessary database tables and display some information on the
next steps.
4) Feed (INN) setup 4) Feed (INN) setup
You have to setup an INN feed to feedlog.pl. You have to set up an INN feed to feedlog.pl.
* Edit your 'newsfeeds' file and insert something like * Edit your 'newsfeeds' file and insert something like
@ -90,39 +97,39 @@ INSTALLATION INSTRUCTIONS
:Tc,WmtfbsPNH,Ac:/path/to/feedlog.pl :Tc,WmtfbsPNH,Ac:/path/to/feedlog.pl
* You should only feed that hierarchy (those hierarchies ...) to * You should only feed that hierarchy (those hierarchies ...) to
feedlog.pl you'll want to cover with your statistical feedlog.pl that you want to cover with your statistical analysis.
examination. It may be a good idea to setup different feeds (to It may be a good idea to setup different feeds (to different
different databases ...) for different hierarchies. databases ...) for different hierarchies.
* Please double check that your path to feedlog.pl is correct and * Please double check that your path to feedlog.pl is correct and
feedlog.pl can be executed by the news user feedlog.pl can be executed by the news user
* Check your 'newsfeeds' syntax: * Check your 'newsfeeds' syntax:
# ctlinnd checkfile $ ctlinnd checkfile
* Reload 'newsfeeds': * Reload 'newsfeeds':
# ctlinnd reload newsfeeds 'Adding newsstats! feed' $ ctlinnd reload newsfeeds 'Adding newsstats! feed'
* Watch your 'news.notice' and 'errlog' files: * Watch your 'news.notice' and 'errlog' files:
# tail -f /var/log/news/news.notice $ tail -f /var/log/news/news.notice
... ...
# tail -f /var/log/news/errlog $ tail -f /var/log/news/errlog
Everything should be going smoothly now. Everything should be going smoothly now.
* If INN is spewing error messages to 'errlog' or reporting * If INN is spewing error messages to 'errlog' or reporting
continous respawns of feedlog.pl to 'news.notice', stop your feed: continous respawns of feedlog.pl to 'news.notice', stop your feed:
# ctlinnd drop 'newsstats!' $ ctlinnd drop 'newsstats!'
and investigate. 'errlog' may be helpful here. and investigate. 'errlog' may be helpful here.
* You can restart the feed with * You can restart the feed with
# ctlinnd begin 'newsstats!' $ ctlinnd begin 'newsstats!'
later. later.

View file

@ -1,21 +1,21 @@
NewsStats (c) 2010-2013, 2025 Thomas Hochstein <thh@thh.name> NewsStats (c) 2010-2013, 2025 Thomas Hochstein <thh@thh.name>
NewsStats is a software package for gathering statistical data live NewsStats is a software package for gathering statistical data live
from a Usenet feed and subsequent examination. from a Usenet feed and subsequent analysis.
This script package is free software; you can redistribute it and/or This package is free software; you can redistribute it and/or modify
modify it under the terms of the GNU Public License as published by it under the terms of the GNU Public License as published by the Free
the Free Software Foundation. Software Foundation.
--------------------------------------------------------------------- ---------------------------------------------------------------------
What's that? What's that?
There's a multitude of tools for the statistical examination of There's a multitude of tools to create statistics about newsgroup
newsgroups: number of postings per month or per person, longest usage: number of postings per month or per person, longest threads,
threads, and so on (see <https://th-h.de/net/usenet/stats/> and so on (see <https://th-h.de/net/usenet/stats/> [German language]
[German language] for an incomplete list). Most of them use a per- for an incomplete list). Most of them use a per-newsgroup approach
newsgroup approach while NewsStats is hierarchy oriented. while NewsStats is hierarchy oriented.
NewsStats will accumulate data from a live INN feed, allowing you NewsStats will accumulate data from a live INN feed, allowing you
to process the saved information later on. to process the saved information later on.
@ -40,7 +40,9 @@ Prerequisites
* Perl 5.8.x with standard modules * Perl 5.8.x with standard modules
- Cwd - Cwd
- Encode
- File::Basename - File::Basename
- Getopt::Long
- Sys::Syslog - Sys::Syslog
* Perl modules from CPAN * Perl modules from CPAN
@ -50,7 +52,7 @@ Prerequisites
* mysql 5.0.x * mysql 5.0.x
* working installation of INN * a working installation of INN
Installation instructions Installation instructions
@ -67,15 +69,52 @@ Getting Started
table. See the feedlog.pl man page for more information. table. See the feedlog.pl man page for more information.
You can process that data via 'gatherstats.pl'; currently the You can process that data via 'gatherstats.pl'; currently the
tabulation of postings per group and injection server per month is tabulation of postings per group, injection server and posting
supported. Tabulation of clients (newsreaders) is planned. See agent (newsreader) per month is supported. See the gatherstats.pl
the gatherstats.pl man page for more information. man page for more information.
Example:
bin/gatherstats.pl
will parse raw data from the last month and save the results in
tables for postings per group, server and client, respectively.
Report generation is handled by specialised scripts for each Report generation is handled by specialised scripts for each
report type. Currently reports on the number of postings per group report type: 'groupstats.pl' for postings per group
and month and injection server and month are supported; you can (s), 'hoststats.pl' for postings per injection server
use 'groupstats.pl' and 'hoststats.pl' for that. See the (s) and 'clientstats.pl' for postings per posting agent. See the
groupstats.pl and hoststats.pl man pages for more information. groupstats.pl, hoststats.pl and clientstats.pl man pages for more
information.
Example:
bin/groupstats.pl -o postings-desc
bin/hoststats.pl -o postings-desc
bin/clientstats.pl -o postings-desc -v
will show reports for postings per group, per injection server and
per client (with detailed client versions) for the last month,
using the result tables filled by gatherstats.
To post those reports to Usenet, change postingstats.pl according
to your needs (sender, newsgroups and other headers, translation
of table headers and text templates) and display a test posting
by piping report data into postingstats.pl:
bin/groupstats.pl --nocomments -s -f dump | bin/postingstats.pl
If the result is to your liking, add a pipe to a inews
implementation.
Example:
bin/groupstats.pl --nocomments -s -f dump | bin/postingstats.pl | contrib/tinews.pl -X
More information
See the man pages for 'gatherstats' and the report generating
scripts.
Reporting Bugs Reporting Bugs
@ -87,7 +126,7 @@ Reporting Bugs
Development Development
This program is maintained using the Git version control system at This package is maintained using the Git version control system at
<https://code.virtcomm.de/thh/newsstats/>. <https://code.virtcomm.de/thh/newsstats/>.
Related projects Related projects

View file

@ -1,12 +1,10 @@
NewsStats To-Do List NewsStats To-Do List
==================== ====================
This is a list of planned bug fixes, improvements and enhancements for This is a list of possible bug fixes, improvements and enhancements for
NewsStats. NewsStats.
* General * General
- Improve Documentation
The documentation is rather sparse and could use some improvement.
- Add a test suite - Add a test suite
There is currently no kind of test suite or regression tests. Something like There is currently no kind of test suite or regression tests. Something like
that is badly needed. that is badly needed.
@ -27,8 +25,6 @@ NewsStats.
for late creation and deletion), optionally including the previously for late creation and deletion), optionally including the previously
mentioned information; and you should be able to get the history of any mentioned information; and you should be able to get the history of any
group. group.
- Add other reports
NewsStats should include some other kinds of reports (stats on used clients)
- Add tools for database management - Add tools for database management
NewsStats should offer tools e.g. to inject postings into the 'raw' database, NewsStats should offer tools e.g. to inject postings into the 'raw' database,
or to split databases. or to split databases.
@ -53,23 +49,11 @@ NewsStats.
Some other tests - working database connection, valid database and table Some other tests - working database connection, valid database and table
names - would be nice. names - would be nice.
+ install/install.pl
- Read current version from a file dropped and updated by installer
- Add / enhance / test error handling
- General tests and optimisations
+ feedlog.pl
- Add / enhance / test error handling
- General tests and optimisations
+ gatherstats.pl + gatherstats.pl
- Use hierarchy information (see GroupInfo above) - Use hierarchy information (see GroupInfo above)
- Add gathering of other stats (clients, ...)
- better modularisation (code reuse for other reports!)
- Add / enhance / test error handling - Add / enhance / test error handling
- General tests and optimisations
+ groupstats.pl + groupstats.pl, hoststats.pl, clientstats.pl
- better modularisation (code reuse for other reports!) - better modularisation (code reuse)
- Add / enhance / test error handling - Add / enhance / test error handling
- General tests and optimisations - General tests and optimisations