class RProxy::UsageManager
Public Class Methods
new(config, cache_pool, redis)
click to toggle source
# File lib/r_proxy/usage_manager.rb, line 3 def initialize(config, cache_pool, redis) @enable_cache = config.enable_cache @cache_pool = cache_pool @redis = redis @no_cache_below = config.no_cache_below @check_snapshot_service = RProxy::CheckSnapshotService.new(@redis, config) end
Public Instance Methods
auth_user(user, pass)
click to toggle source
# File lib/r_proxy/usage_manager.rb, line 11 def auth_user(user, pass) value = fetch_usage(user, pass) return value if !value.nil? && value.to_i > 0 nil end
report_usage(user, pass, value)
click to toggle source
# File lib/r_proxy/usage_manager.rb, line 18 def report_usage(user, pass, value) return if user.nil? || pass.nil? || value.nil? key = proxy_key(user, pass) cache = @cache_pool[key] if cache.nil? || !@cache_pool.writable? @redis.decrby(key, value) else tmp = cache[:used] @cache_pool[key][:used] = tmp + value end end
Private Instance Methods
fetch_usage(user, pass)
click to toggle source
# File lib/r_proxy/usage_manager.rb, line 34 def fetch_usage(user, pass) key = proxy_key(user, pass) if !@enable_cache || !@cache_pool.writable? value = @redis.get(key) @check_snapshot_service.call(user, pass, value) return value end cache = @cache_pool[key] if cache.nil? value = @redis.get(key) if !value.nil? @check_snapshot_service.call(user, pass, value) return value if value.to_i <= @no_cache_below end @cache_pool[key] = { usage: value, used: 0 } return value end cache[:usage] end
proxy_key(user, pass)
click to toggle source
# File lib/r_proxy/usage_manager.rb, line 66 def proxy_key(user, pass) "proxy:#{user}-#{pass}" end