class Berater::RateLimiter
Constants
- LUA_SCRIPT
Public Class Methods
new(key, capacity, interval, **opts)
click to toggle source
Calls superclass method
Berater::Limiter::new
# File lib/berater/rate_limiter.rb, line 4 def initialize(key, capacity, interval, **opts) super(key, capacity, interval, **opts) self.interval = interval end
Public Instance Methods
interval()
click to toggle source
# File lib/berater/rate_limiter.rb, line 9 def interval args[0] end
to_s()
click to toggle source
# File lib/berater/rate_limiter.rb, line 91 def to_s msg = if interval.is_a? Numeric if interval == 1 "every second" else "every #{interval} seconds" end else "per #{interval}" end "#<#{self.class}(#{key}: #{capacity} #{msg})>" end
Protected Instance Methods
acquire_lock(capacity, cost)
click to toggle source
# File lib/berater/rate_limiter.rb, line 74 def acquire_lock(capacity, cost) # timestamp in milliseconds ts = (Time.now.to_f * 10**3).to_i count, allowed = LUA_SCRIPT.eval( redis, [ cache_key ], [ ts, capacity, @interval, cost ] ) count = count.include?('.') ? count.to_f : count.to_i raise Overloaded unless allowed Lock.new(capacity, count) end
Private Instance Methods
interval=(interval)
click to toggle source
# File lib/berater/rate_limiter.rb, line 13 def interval=(interval) @interval = Berater::Utils.to_msec(interval) unless @interval > 0 raise ArgumentError, 'interval must be > 0' end end