Compare commits

...

4 commits

Author SHA1 Message Date
d02ae5e2ff Fix version queries.
Add month to WHERE clause, use bind values.

Signed-off-by: Thomas Hochstein <thh@thh.name>
2025-05-31 09:43:32 +02:00
07e4543717 Fix typos.
Signed-off-by: Thomas Hochstein <thh@thh.name>
2025-05-31 01:11:23 +02:00
0102b72971 Remove whitespace from client and version.
Signed-off-by: Thomas Hochstein <thh@thh.name>
2025-05-31 01:09:51 +02:00
ed3fb3cda0 Truncate overlong clients or versions.
Signed-off-by: Thomas Hochstein <thh@thh.name>
2025-05-31 01:09:27 +02:00
4 changed files with 20 additions and 8 deletions

View file

@ -215,10 +215,14 @@ while (my ($Month, $Key, $Value) = $DBQuery->fetchrow_array) {
# output client versions # output client versions
if ($OptVersions) { if ($OptVersions) {
### get client versions ### get client versions
# $SQLWhereClause without 'ALL' version # $SQLWhereClause without 'ALL' version, with client and month set
$SQLWhereClause = SQLBuildClause('where',$SQLWherePeriod,$SQLWhereNames, $SQLWhereClause = SQLBuildClause('where',$SQLWherePeriod,$SQLWhereNames,
$ExcludeSums,"version != 'ALL'","client = '$Client'", $ExcludeSums,"version != 'ALL'",
'client = ?','month = ?',
&SQLSetBounds('default',$LowBound,$UppBound)); &SQLSetBounds('default',$LowBound,$UppBound));
# push client and month to @SQLVersBindNames
my @SQLVersBindNames = @SQLBindNames;
push (@SQLVersBindNames, ($Client, $Month));
# save length of longest client # save length of longest client
my $ClientMaxLenght = $MaxLength; my $ClientMaxLenght = $MaxLength;
@ -227,7 +231,7 @@ while (my ($Month, $Key, $Value) = $DBQuery->fetchrow_array) {
# for formatting purposes # for formatting purposes
my ($MaxLength,$MaxValLength) = &GetMaxLength($DBHandle,$Conf{'DBTable'}, my ($MaxLength,$MaxValLength) = &GetMaxLength($DBHandle,$Conf{'DBTable'},
'version','postings',$SQLWhereClause, 'version','postings',$SQLWhereClause,
'',@SQLBindNames); '',@SQLVersBindNames);
if ($MaxLength) { if ($MaxLength) {
# add lenght of '- ' # add lenght of '- '
$MaxLength += 2; $MaxLength += 2;
@ -242,7 +246,7 @@ while (my ($Month, $Key, $Value) = $DBQuery->fetchrow_array) {
$SQLWhereClause,$SQLGroupClause, $SQLWhereClause,$SQLGroupClause,
$SQLOrderClause)); $SQLOrderClause));
# execute query # execute query
$DBVersQuery->execute(@SQLBindNames) $DBVersQuery->execute(@SQLVersBindNames)
or &Bleat(2,sprintf("Can't get version data for %s from %s.%s: %s\n", or &Bleat(2,sprintf("Can't get version data for %s from %s.%s: %s\n",
$CaptionPeriod,$Conf{'DBDatabase'},$Conf{'DBTable'}, $CaptionPeriod,$Conf{'DBDatabase'},$Conf{'DBTable'},
$DBI::errstr)); $DBI::errstr));

View file

@ -497,9 +497,15 @@ sub ClientStats {
foreach (@Clients) { foreach (@Clients) {
# filter agents for User-Agent with multiple agents # filter agents for User-Agent with multiple agents
next if $#Clients && exists($DropAgent{lc($_->{'agent'})}); next if $#Clients && exists($DropAgent{lc($_->{'agent'})});
# remove whitespace
$_->{'agent'} =~ s/^\s+|\s+$//g;
$_->{'version'} =~ s/^\s+|\s+$//g if $_->{'version'};
# encode to utf-8, if necessary # encode to utf-8, if necessary
$_->{'agent'} = encode('UTF-8', $_->{'agent'}) if $_->{'agent'} =~ /[\x80-\x{ffff}]/; $_->{'agent'} = encode('UTF-8', $_->{'agent'}) if $_->{'agent'} =~ /[\x80-\x{ffff}]/;
$_->{'version'} = encode('UTF-8', $_->{'version'}) if $_->{'version'} and $_->{'version'} =~ /[\x80-\x{ffff}]/; $_->{'version'} = encode('UTF-8', $_->{'version'}) if $_->{'version'} and $_->{'version'} =~ /[\x80-\x{ffff}]/;
# truncate overlong clients or versions
$_->{'agent'} = substr($_->{'agent'}, 0, 150) if length($_->{'agent'}) > 150;
$_->{'version'} = substr($_->{'version'}, 0, 50) if $_->{'version'} and length($_->{'version'}) > 50;
# special cases # special cases
# Mozilla # Mozilla
$_->{'agent'} = 'Mozilla' if $_->{'agent'} eq '•Mozilla'; $_->{'agent'} = 'Mozilla' if $_->{'agent'} eq '•Mozilla';
@ -661,8 +667,7 @@ sub RemoveComments {
# remove superfluous whitespace in header # remove superfluous whitespace in header
# and whitespace around header # and whitespace around header
$Header =~ s/\s+/ /g; $Header =~ s/\s+/ /g;
$Header =~ s/^\s+//; $Header =~ s/^\s+|\s+$//g;
$Header =~ s/\s+$//;
return $Header; return $Header;
} }

View file

@ -134,7 +134,7 @@ wenn Sie ermittelbar sind; daher kann die Summe der Newsreader-Versionen
kleiner sein als die Postingzahl fuer den Newsreader. Ausserdem koennen kleiner sein als die Postingzahl fuer den Newsreader. Ausserdem koennen
an einem Beitrag mehrere Clients beteiligt sein, bspw. der Newsreader an einem Beitrag mehrere Clients beteiligt sein, bspw. der Newsreader
und ein lokaler Server wie der Hamster. Daher kann die Summe aller und ein lokaler Server wie der Hamster. Daher kann die Summe aller
Newsreader groesser sein als die Summer der Postings; auch ergeben die Newsreader groesser sein als die Summe der Postings; auch ergeben die
Prozentzahlen dementsprechend in der Summe mehr als 100%. Prozentzahlen dementsprechend in der Summe mehr als 100%.
CLIENTSOUT CLIENTSOUT

View file

@ -9,7 +9,10 @@ NewsStats 0.4.0 (unreleased)
* Add clientstats (for clients). * Add clientstats (for clients).
* Add ClientStats to postingstats. * Add ClientStats to postingstats.
* gatherstats: Don't die on parsing errors. * gatherstats: Don't die on parsing errors.
* DBClnts: set version length to to 50. * DBClnts: set version length to 50.
* gatherstats: Truncate overlong clients or versions.
* gatherstats: Remove whitespace from client and version.
* Fix version queries.
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.