summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-02-01 17:26:01 +0200
committerPaul Buetow <paul@buetow.org>2025-02-01 17:26:01 +0200
commit5a368f5debfb8f73c278a39942df3ad5033233c6 (patch)
treeab47c0d75f04eeb61d779ca6bed10b8ded5cdb4f
parent402bb8d48a17d14829c68dbbb64b2c05148192bf (diff)
fix
-rw-r--r--foostats.pl24
1 files changed, 19 insertions, 5 deletions
diff --git a/foostats.pl b/foostats.pl
index 1b9c777..5d51195 100644
--- a/foostats.pl
+++ b/foostats.pl
@@ -423,14 +423,18 @@ package Foostats::Reporter {
use Data::Dumper; # TODO: UNDO
sub report ($stats_dir) {
- report_for_date($stats_dir, $_) for DateHelper::last_month_dates;
+ my @report;
+ push @report, report_for_date($stats_dir, $_) for DateHelper::last_month_dates;
+ local $, = "\n";
+ print @report;
}
sub report_for_date ($stats_dir, $date) {
+ printf "Reporting for date %s\n", $date;
my @stats = stats_for_date($stats_dir, $date);
my %data = report_feed_subscribers(@stats);
- printf "%s: Total:%d\n", $date, $data{Total};
+ return sprintf "%s: Total subscribers:%d", $date, $data{Total};
}
sub merge_ips ($a, $b) {
@@ -441,24 +445,33 @@ package Foostats::Reporter {
}
}
+ my $is_num = qr/^\d+(\.\d+)?$/;
+
while (my ($key, $val) = each %$b) {
if (not exists $a->{$key}) {
$a->{$key} = $val;
+
} elsif (ref($a->{$key}) eq 'HASH' && ref($val) eq 'HASH') {
merge($a->{$key}, $val);
+
+ } elsif ($a->{$key} =~ $is_num && $val =~ $is_num) {
+ $a->{$key} += $val;
+
} else {
- printf "Not merging key '%s': '%s' with '%s'", $key, $a->{$key}, $val;
+ die "Not merging key '%s' (ref:%s): '%s' (ref:%s) with '%s' (ref:%s)\n",
+ $key, ref($key), $a->{$key}, ref($a->{$key}), $val, ref($val);
}
}
- }
+ }
sub report_feed_subscribers (@stats) {
my (%gemini, %web);
for my $stats (@stats) {
my $merge = $stats->{proto} eq 'web' ? \%web : \%gemini;
+ printf "Merging proto %s feed IPs\n", $stats->{proto};
merge_ips($merge, $stats->{feed_ips});
- }
+ }
my %total;
merge_ips(\%total, $web{$_}) for keys %web;
@@ -480,6 +493,7 @@ package Foostats::Reporter {
for my $proto (qw(gemini web)) {
for my $path (<$stats_dir/${proto}_${date}.*.json.gz>) {
+ # printf "Reading %s\n", $path;
push @stats, FileHelper::read_json_gz($path);
# TODO: Is there a shortcut?
$stats[-1]->{proto} = $proto;