From 7e29c759da91cd97a0f1df648bd4cd5c4ad69583 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Tue, 16 Sep 2025 15:41:50 -0500 Subject: [PATCH] faster stats parsing --- migrations/132_add_stats_site_date_index.rb | 5 +++++ models/stat.rb | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 migrations/132_add_stats_site_date_index.rb diff --git a/migrations/132_add_stats_site_date_index.rb b/migrations/132_add_stats_site_date_index.rb new file mode 100644 index 00000000..bdead783 --- /dev/null +++ b/migrations/132_add_stats_site_date_index.rb @@ -0,0 +1,5 @@ +Sequel.migration do + change do + alter_table(:stats) { add_index [:site_id, :created_at], name: :stats_site_date_idx } + end +end \ No newline at end of file diff --git a/models/stat.rb b/models/stat.rb index 706ac41b..d7fd4f72 100644 --- a/models/stat.rb +++ b/models/stat.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'resolv' require 'zlib' +require 'set' class Stat < Sequel::Model FREE_RETAINMENT_DAYS = 30 @@ -50,7 +51,7 @@ class Stat < Sequel::Model hits: 0, views: 0, bandwidth: 0, - view_ips: [], + view_ips: Set.new, referrers: {}, paths: {} } unless site_logs[log_time][username] @@ -72,7 +73,7 @@ class Stat < Sequel::Model total_site_stats[log_time][:views] += 1 - site_logs[log_time][username][:view_ips] << ip + site_logs[log_time][username][:view_ips].add(ip) if referrer != '-' && !referrer.nil? site_logs[log_time][username][:referrers][referrer] ||= 0