Sha256: 1df764706a088b71c99412d10b35ac3b57b0140760eba1bf692e567b6d9d95d4

Contents?: true

Size: 1.9 KB

Versions: 5

Compression:

Stored size: 1.9 KB

Contents

require_relative '../version.rb'

module SocketLabs
    module InjectionApi
        class RetrySettings

            private
            attr_accessor :default_number_of_retries
            attr_accessor :maximum_allowed_number_of_retries
            attr_accessor :minimum_retry_time
            attr_accessor :maximum_retry_time

            public
            attr_accessor :maximum_number_of_retries

            def initialize(maximum_retries=nil)

                @default_number_of_retries = 0
                @maximum_allowed_number_of_retries = 5
                @minimum_retry_time = 1
                @maximum_retry_time = 10

                unless maximum_retries.nil?
                    
                    if maximum_retries < 0
                        raise ArgumentError.new "maximum_number_of_retries must be greater than 0"
                    end
                    
                    if maximum_retries > @maximum_allowed_number_of_retries
                        raise ArgumentError.new "The maximum number of allowed retries is " + @maximum_allowed_number_of_retries
                    end

                    @maximum_number_of_retries = maximum_retries

                else
                    @maximum_number_of_retries = @default_number_of_retries
                end

            end

            def get_next_wait_interval(number_of_attempts)

                interval = [@minimum_retry_time * 1000 + get_retry_delta(number_of_attempts), @maximum_retry_time * 1000].min
                interval
                
            end

            def get_retry_delta(number_of_attempts)
                
                random = Random.new

                min = (1 * 1000 * 0.8).to_i
                max = (1 * 1000 * 1.2).to_i

                (((2.0 ** number_of_attempts) - 1.0) * random.rand(min..max)).to_i

            end

        end
    end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
socketlabs-injectionapi-1.4.4 lib/socketlabs/injectionapi/retrysettings.rb
socketlabs-injectionapi-1.4.3 lib/socketlabs/injectionapi/retrysettings.rb
socketlabs-injectionapi-1.4.2 lib/socketlabs/injectionapi/retrysettings.rb
socketlabs-injectionapi-1.4.0 lib/socketlabs/injectionapi/retrysettings.rb
socketlabs-injectionapi-1.2.1 lib/socketlabs/injectionapi/retrysettings.rb