class Zendesk2::RateLimit
Faraday middleware to block and sleep on rate limit events
Attributes
logger[R]
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/zendesk2/rate_limit.rb, line 8 def initialize(app, options = {}) @app = app @logger = options[:logger] || ::Logger.new(nil) end
Public Instance Methods
call(env)
click to toggle source
# File lib/zendesk2/rate_limit.rb, line 13 def call(env) original_env = env.dup response = @app.call(env) if response.env[:status] == 429 delay = (response.env[:response_headers][:retry_after]).to_f logger.warn "Rate limited! Retrying after #{delay} seconds." sleep(delay) call(original_env).tap { |r| increment(r, delay) } else response end end
Private Instance Methods
increment(response, delay)
click to toggle source
# File lib/zendesk2/rate_limit.rb, line 31 def increment(response, delay) existing_delay = response.headers[:rate_limits] || 0.0 response.headers[:rate_limits] = existing_delay.to_f + delay.to_f end