diff options
author | Claire <claire.github-309c@sitedethib.com> | 2021-10-14 20:55:16 +0200 |
---|---|---|
committer | Claire <claire.github-309c@sitedethib.com> | 2021-10-14 21:44:57 +0200 |
commit | 694c073d1f94a54a0ccf19299e06f1de849c6edb (patch) | |
tree | 77e9855f70000396b8a6b793ac8a8dbb61c82783 /app/lib/activity_tracker.rb | |
parent | ebf2c3195615bb524f6908e84f99887c8775cbc3 (diff) | |
parent | 9b978872cc1a86c7d82afda4060c909dc7ca2536 (diff) |
Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/controllers/admin/dashboard_controller.rb`: Upstream completely redesigned the admin dashboard. glitch-soc tracked extra features, but that list is gone. Followed upstram. - `app/views/admin/dashboard/index.html.haml` Upstream completely redesigned the admin dashboard. glitch-soc tracked extra features, but that list is gone. Followed upstram.
Diffstat (limited to 'app/lib/activity_tracker.rb')
-rw-r--r-- | app/lib/activity_tracker.rb | 70 |
1 files changed, 57 insertions, 13 deletions
diff --git a/app/lib/activity_tracker.rb b/app/lib/activity_tracker.rb index 81303b715..6d3401b37 100644 --- a/app/lib/activity_tracker.rb +++ b/app/lib/activity_tracker.rb @@ -1,29 +1,73 @@ # frozen_string_literal: true class ActivityTracker + include Redisable + EXPIRE_AFTER = 6.months.seconds - class << self - include Redisable + def initialize(prefix, type) + @prefix = prefix + @type = type + end - def increment(prefix) - key = [prefix, current_week].join(':') + def add(value = 1, at_time = Time.now.utc) + key = key_at(at_time) - redis.incrby(key, 1) - redis.expire(key, EXPIRE_AFTER) + case @type + when :basic + redis.incrby(key, value) + when :unique + redis.pfadd(key, value) end - def record(prefix, value) - key = [prefix, current_week].join(':') + redis.expire(key, EXPIRE_AFTER) + end - redis.pfadd(key, value) - redis.expire(key, EXPIRE_AFTER) + def get(start_at, end_at = Time.now.utc) + (start_at.to_date...end_at.to_date).map do |date| + key = key_at(date.to_time(:utc)) + + value = begin + case @type + when :basic + redis.get(key).to_i + when :unique + redis.pfcount(key) + end + end + + [date, value] + end + end + + def sum(start_at, end_at = Time.now.utc) + keys = (start_at.to_date...end_at.to_date).flat_map { |date| [key_at(date.to_time(:utc)), legacy_key_at(date)] }.uniq + + case @type + when :basic + redis.mget(*keys).map(&:to_i).sum + when :unique + redis.pfcount(*keys) end + end - private + class << self + def increment(prefix) + new(prefix, :basic).add + end - def current_week - Time.zone.today.cweek + def record(prefix, value) + new(prefix, :unique).add(value) end end + + private + + def key_at(at_time) + "#{@prefix}:#{at_time.beginning_of_day.to_i}" + end + + def legacy_key_at(at_time) + "#{@prefix}:#{at_time.to_date.cweek}" + end end |