class RateThrottleClient::ExponentialIncreaseProportionalRemainingDecrease
Attributes
decrease_divisor[RW]
remaining_block[RW]
Public Class Methods
new(*args, decrease_divisor: nil, remaining_block: nil, **kargs)
click to toggle source
Calls superclass method
RateThrottleClient::Base::new
# File lib/rate_throttle_client/clients/exponential_increase_proportional_remaining_decrease.rb, line 5 def initialize(*args, decrease_divisor: nil, remaining_block: nil, **kargs) super(*args, **kargs) @decrease_divisor = (decrease_divisor || RateThrottleClient.max_limit).to_f @remaining_block = remaining_block || ->(req) { req.headers["RateLimit-Remaining"].to_i } end
Public Instance Methods
call(&block)
click to toggle source
# File lib/rate_throttle_client/clients/exponential_increase_proportional_remaining_decrease.rb, line 13 def call(&block) sleep_for = @sleep_for sleep(sleep_for + jitter(sleep_for)) while (req = yield) && req.status == 429 sleep_for += @min_sleep @log.call(Info.new(sleep_for: sleep_for, request: req)) sleep(sleep_for + jitter(sleep_for)) sleep_for *= @multiplier end decrease_value = sleep_for * @remaining_block.call(req) decrease_value /= @decrease_divisor if sleep_for >= decrease_value sleep_for -= decrease_value else sleep_for = 0 end @sleep_for = sleep_for req end
sleep_and_log(sleep_for: , request: )
click to toggle source
# File lib/rate_throttle_client/clients/exponential_increase_proportional_remaining_decrease.rb, line 40 def sleep_and_log(sleep_for: , request: ) end