class HTTP::Retriable::DelayCalculator
@api private
Calculates retry delays with support for Retry-After headers
def calculate_delay_from_iteration(iteration)
-
(Numeric)-
Other tags:
- Api: - private
Parameters:
-
iteration(Integer) --
def calculate_delay_from_iteration(iteration) if @delay_proc @delay_proc.call(iteration) elsif @delay @delay else delay = (2**(iteration - 1)) - 1 delay_noise = rand delay + delay_noise end end
def call(iteration, response)
-
(Numeric)-
Other tags:
- Api: - private
Parameters:
-
response(HTTP::Response, nil) -- -
iteration(Integer) --
def call(iteration, response) delay = if response && (retry_header = response.headers["Retry-After"]) delay_from_retry_header(retry_header) else calculate_delay_from_iteration(iteration) end ensure_delay_in_bounds(delay) end
def delay_from_retry_header(value)
-
(Numeric)-
Other tags:
- Api: - private
Parameters:
-
value(String) --
def delay_from_retry_header(value) value = String(value).strip case value when RFC2822_DATE_REGEX then DateTime.rfc2822(value).to_time - Time.now.utc when /\A\d+$/ then value.to_i else 0 end end
def ensure_delay_in_bounds(delay)
-
(Numeric)-
Other tags:
- Api: - private
Parameters:
-
delay(Numeric) --
def ensure_delay_in_bounds(delay) Float(delay.clamp(0, @max_delay)) end
def initialize(delay: nil, max_delay: Float::MAX)
-
(HTTP::Retriable::DelayCalculator)-
Other tags:
- Api: - private
Parameters:
-
max_delay(#to_f) -- maximum delay cap -
delay(#call, Numeric, nil) -- delay value or proc
def initialize(delay: nil, max_delay: Float::MAX) @max_delay = Float(max_delay) if delay.respond_to?(:call) @delay_proc = delay else @delay = delay end end