use strict; use warnings; use Test::More; ok( do './foostats.pl', 'loaded foostats.pl' ); # Ensure odds file exists before creating filter/aggregator open my $odd, '>', 't/tmp_odds.txt' or die $!; print $odd "\n"; close $odd; my $agg = Foostats::Aggregator->new( 't/tmp_odds.txt', 't/tmp_filter_log' ); my $date = 20250101; my $events = [ { proto => 'web', host => 'example.org', ip_hash => 'ip1', ip_proto => 'IPv4', date => $date, time => '120000', uri_path => '/gemfeed/atom.xml', status => 200 }, { proto => 'gemini', host => 'example.org', ip_hash => 'ip2', ip_proto => 'IPv6', date => $date, time => '120100', uri_path => '/gemfeed/', status => 20 }, { proto => 'web', host => 'example.org', ip_hash => 'ip3', ip_proto => 'IPv4', date => $date, time => '120200', uri_path => '/gemfeed/index.gmi', status => 200 }, { proto => 'web', host => 'example.org', ip_hash => 'ip4', ip_proto => 'IPv4', date => $date, time => '120300', uri_path => '/index.html', status => 200 }, ]; $agg->add($_) for @$events; my $stats = $agg->{stats}{ "web_" . $date }; ok( $stats, 'have web stats for date' ); use Test::More; diag( "web stats: ", join( ',', sort keys %{ $stats->{feed_ips}{atom_feed} } ) ); is( scalar( keys %{ $stats->{feed_ips}{atom_feed} } ), 1, 'one atom feed IP' ); is( scalar( keys %{ $stats->{feed_ips}{gemfeed} } ), 1, 'one gemfeed IP (from web)' ); my $gstats = $agg->{stats}{ "gemini_" . $date }; ok( $gstats, 'have gemini stats for date' ); diag( "gemini feed keys: ", join( ',', sort keys %{ $gstats->{feed_ips}{gemfeed} } ) ); is( scalar( keys %{ $gstats->{feed_ips}{gemfeed} } ), 1, 'one gemfeed IP (from gemini)' ); done_testing;