class Pebbles::River::RateLimiter
Simple queueless token-bucket limiter.
Public Class Methods
new(max_rate, window_seconds)
click to toggle source
# File lib/pebbles/river/rate_limiter.rb, line 7 def initialize(max_rate, window_seconds) @last_check = Time.now @max_rate = @allowance = max_rate @window_seconds = window_seconds end
Public Instance Methods
increment()
click to toggle source
# File lib/pebbles/river/rate_limiter.rb, line 13 def increment now = Time.now time_passed = now - @last_check @last_check = now @allowance += time_passed * (@max_rate / @window_seconds) if @allowance > @max_rate @allowance = @max_rate end if @allowance < 1 sleep((1 - @allowance) * (@window_seconds / @max_rate)) @allowance = 0 else @allowance -= 1 end end