Add graphs and retention metrics to admin dashboard (#16829)
This commit is contained in:
parent
959f7fc580
commit
07341e7aa6
46 changed files with 1650 additions and 257 deletions
|
@ -1,29 +1,73 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ActivityTracker
|
||||
include Redisable
|
||||
|
||||
EXPIRE_AFTER = 6.months.seconds
|
||||
|
||||
def initialize(prefix, type)
|
||||
@prefix = prefix
|
||||
@type = type
|
||||
end
|
||||
|
||||
def add(value = 1, at_time = Time.now.utc)
|
||||
key = key_at(at_time)
|
||||
|
||||
case @type
|
||||
when :basic
|
||||
redis.incrby(key, value)
|
||||
when :unique
|
||||
redis.pfadd(key, value)
|
||||
end
|
||||
|
||||
redis.expire(key, EXPIRE_AFTER)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
class << self
|
||||
include Redisable
|
||||
|
||||
def increment(prefix)
|
||||
key = [prefix, current_week].join(':')
|
||||
|
||||
redis.incrby(key, 1)
|
||||
redis.expire(key, EXPIRE_AFTER)
|
||||
new(prefix, :basic).add
|
||||
end
|
||||
|
||||
def record(prefix, value)
|
||||
key = [prefix, current_week].join(':')
|
||||
|
||||
redis.pfadd(key, value)
|
||||
redis.expire(key, EXPIRE_AFTER)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def current_week
|
||||
Time.zone.today.cweek
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue