module FoundersToolkit::Util::RateLimitable
Public Instance Methods
rate_limiter(name, key:, threshold:, interval:, retry_from: [])
click to toggle source
# File lib/founders_toolkit/util/rate_limitable.rb, line 26 def rate_limiter(name, key:, threshold:, interval:, retry_from: []) limiter_name = "#{name}_limiter" define_method(limiter_name) do |&block| limiter = instance_variable_get("@#{limiter_name}".to_sym) limiter ||= instance_variable_set("@#{limiter_name}".to_sym, Ratelimit.new(name)) while limiter.exceeded?(__send__(key), threshold: threshold, interval: interval) statsd.increment ['thottled', limiter_name].join('.') sleep 5 end result = statsd.time(['retryable', limiter_name].join('.')) do Retryable.retryable(tries: 3, on: retry_from) { block.call } end limiter.add __send__(key) result end end