discourse/app/models/concerns/stats_cacheable.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

42 lines
997 B
Ruby

# frozen_string_literal: true
module StatsCacheable
extend ActiveSupport::Concern
module ClassMethods
def stats_cache_key
raise 'Stats cache key has not been set.'
end
def fetch_stats
raise 'Not implemented.'
end
# Could be configurable, multisite need to support it.
def recalculate_stats_interval
30 # minutes
end
def fetch_cached_stats
# The scheduled Stats job is responsible for generating and caching this.
stats = $redis.get(stats_cache_key)
stats = refresh_stats if !stats
JSON.parse(stats).with_indifferent_access
end
def refresh_stats
stats = fetch_stats.to_json
set_cache(stats)
stats
end
private
def set_cache(stats)
# Add some extra time to the expiry so that the next job run has plenty of time to
# finish before previous cached value expires.
$redis.setex stats_cache_key, (recalculate_stats_interval + 5).minutes, stats
end
end
end