class SocketLabs::InjectionApi::Core::RetryHandler

Attributes

endpoint_url[RW]
error_codes[RW]
http_client[RW]

include SocketLabsClient::InjectionApi

retry_settings[RW]

Public Class Methods

new(client, endpoint, settings) click to toggle source
# File lib/socketlabs/injectionapi/core/retryhandler.rb, line 18
def initialize(client, endpoint, settings)
    @http_client = client
    @endpoint_url = endpoint
    @retry_settings = settings
    @error_codes = [500, 502, 503, 504]

end

Public Instance Methods

send(request) click to toggle source
# File lib/socketlabs/injectionapi/core/retryhandler.rb, line 28
def send(request)

    if @retry_settings.maximum_number_of_retries == 0
        response =  @http_client.send_request(request)
        response
    end

    attempts = 0

    loop do
        wait_interval = @retry_settings.get_next_wait_interval(attempts)

        begin
            response = @http_client.send_request(request)

            if (@error_codes.include? response.status_code.to_i) && (attempts < @retry_settings.maximum_number_of_retries)
                attempts += 1
            else
                response
            end

        rescue Timeout::Error => exception
            attempts += 1
            
            if attempts > @retry_settings.maximum_number_of_retries
                raise exception
            end
            sleep(wait_interval)
        
        rescue Exception => exception
            raise exception
        end

    end

end