summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-23 14:45:49 +0300
committerPaul Buetow <paul@buetow.org>2025-09-23 14:45:49 +0300
commit7c0ae2b8bae5b31b869e5fdbfc6a5777d03b5758 (patch)
treefc719232e027dc1a32cb4e32de2409905410b50c
parent4d159e1394f219dcf2ca5270a505e895cf573da8 (diff)
fix tests
-rw-r--r--Justfile2
-rw-r--r--foostats.pl34
-rw-r--r--t/tmp_filter_log114
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...