From 7c0ae2b8bae5b31b869e5fdbfc6a5777d03b5758 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 23 Sep 2025 14:45:49 +0300 Subject: fix tests --- Justfile | 2 +- foostats.pl | 34 ++++++++++++++++- t/tmp_filter_log | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 2 deletions(-) diff --git a/Justfile b/Justfile index 64c2242..6dfff98 100644 --- a/Justfile +++ b/Justfile @@ -9,7 +9,7 @@ test: if command -v prove >/dev/null 2>&1; then \ prove -lr t; \ else \ - for f in t/*.t; do echo "== $$f =="; PERL5LIB=. perl "$$f" || exit 1; done; \ + for f in t/*.t; do echo "== $f =="; PERL5LIB=. perl "$f" || exit 1; done; \ fi # Syntax check diff --git a/foostats.pl b/foostats.pl index 6ddd6ee..eca3997 100644 --- a/foostats.pl +++ b/foostats.pl @@ -96,7 +96,7 @@ package DateHelper { my $today = localtime; my @dates; - for my $days_ago (0 .. 30) { + for my $days_ago (1 .. 31) { my $date = $today - ($days_ago * 24 * 60 * 60); push @dates, @@ -1465,6 +1465,7 @@ $content # Order: feed counts -> Top URLs -> daily top 3 for last 30 days -> other tables $report_content .= build_feed_statistics_section(\@dates, \%merged); + $report_content .= build_feed_statistics_daily_average_section(\@dates, \%merged); # Aggregate and add top lists my ($all_hosts, $all_urls) = aggregate_hosts_and_urls(\@dates, \%merged); @@ -1497,6 +1498,37 @@ $content } } + sub build_feed_statistics_daily_average_section { + my ($dates, $merged) = @_; + + my %totals; + my $days_with_stats = 0; + + for my $date (@$dates) { + my $stats = $merged->{$date}; + next unless $stats->{feed_ips}; + $days_with_stats++; + + for my $key (keys %{ $stats->{feed_ips} }) { + $totals{$key} += $stats->{feed_ips}{$key}; + } + } + + return "" unless $days_with_stats > 0; + + my @avg_rows; + for my $key (sort keys %totals) { + my $avg = sprintf("%.2f", $totals{$key} / $days_with_stats); + push @avg_rows, [ $key, $avg ]; + } + + my $content = "### Feed Statistics Daily Average (Last 30 Days)\n\n```\n"; + $content .= format_table([ 'Feed Type', 'Daily Average' ], \@avg_rows); + $content .= "\n```\n\n"; + + return $content; + } + # Sub: build_report_header # - Purpose: Header section for summary reports. # - Params: $today (Time::Piece), $days (int default 30). diff --git a/t/tmp_filter_log b/t/tmp_filter_log index 1b549e8..b07d7b8 100644 --- a/t/tmp_filter_log +++ b/t/tmp_filter_log @@ -26,3 +26,117 @@ WARN: same blocked due to excessive requesting... OK: /index.html appears fine... OK: /some/really/long/path/with/many/segments/and/query/parts/that/could/be/truncated/when/rendered/for/display/example.html appears fine... WARN: kztSAIRs7AaVHRqGWS7so4NFHc3bsTmarHBZvMDO8IreNJYorMG0T4VtDO7g32NwLamuggahn8zDDaQ8zptcug blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... +OK: /gemfeed/atom.xml appears fine... +OK: /gemfeed/ appears fine... +OK: /gemfeed/index.gmi appears fine... +OK: /index.html appears fine... +OK: /index.html appears fine... +WARN: same blocked due to excessive requesting... -- cgit v1.2.3