Files
plexruby/lib/plex_ruby_sdk/utils/retries.rb

96 lines
3.1 KiB
Ruby

# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
# typed: true
# frozen_string_literal: true
require 'faraday/retry'
require 'sorbet-runtime'
module PlexRubySDK
module Utils
class BackoffStrategy
extend T::Sig
sig { returns(T.nilable(::Float)) }
attr_accessor :exponent
sig { returns(T.nilable(::Integer)) }
attr_accessor :initial_interval
sig { returns(T.nilable(::Integer)) }
attr_accessor :max_elapsed_time
sig { returns(T.nilable(::Integer)) }
attr_accessor :max_interval
sig do
params(
exponent: T.nilable(::Float),
initial_interval: T.nilable(::Integer),
max_elapsed_time: T.nilable(::Integer),
max_interval: T.nilable(::Integer)
).void
end
def initialize(exponent: nil, initial_interval: nil, max_elapsed_time: nil, max_interval: nil)
@exponent = T.let(exponent, T.nilable(::Float))
@initial_interval = T.let(initial_interval, T.nilable(::Integer))
@max_elapsed_time = T.let(max_elapsed_time, T.nilable(::Integer))
@max_interval = T.let(max_interval, T.nilable(::Integer))
end
end
class RetryConfig
extend T::Sig
sig { returns(T.nilable(BackoffStrategy)) }
attr_accessor :backoff
sig { returns(T.nilable(T::Boolean)) }
attr_accessor :retry_connection_errors
sig { returns(T.nilable(::String)) }
attr_accessor :strategy
sig do
params(
backoff: T.nilable(BackoffStrategy),
retry_connection_errors: T.nilable(T::Boolean),
strategy: T.nilable(::String)
).void
end
def initialize(backoff: nil, retry_connection_errors: nil, strategy: nil)
@backoff = T.let(backoff, T.nilable(BackoffStrategy))
@retry_connection_errors = T.let(retry_connection_errors, T.nilable(T::Boolean))
@strategy = T.let(strategy, T.nilable(::String))
end
sig { params(initial_time: ::Time).returns(::Hash) }
def to_faraday_retry_options(initial_time:)
retry_options = {
# must overwrite default max of 2 retries and it must be positive
max: 1_000_000_000,
# ensure all HTTP methods are retried, especially via retry_if
methods: [],
}
if @retry_connection_errors
retry_options[:exceptions] = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
end
if @strategy == 'backoff' && @backoff
retry_options[:backoff_factor] = @backoff.exponent unless @backoff.exponent.nil?
retry_options[:interval] = (@backoff.initial_interval.to_f / 1000) unless @backoff.initial_interval.nil?
retry_options[:max_interval] = @backoff.max_interval unless @backoff.max_interval.nil?
unless @backoff.max_elapsed_time.nil?
stop_time = initial_time + (@backoff.max_elapsed_time.to_f / 1000)
retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time }
end
end
retry_options
end
end
end
end