Sha256: 853415fd742232fc02b2ad263de7fd4b60a3b26db73930cb9da4ab55839975e8

Contents?: true

Size: 1.03 KB

Versions: 22

Compression:

Stored size: 1.03 KB

Contents

module Stackify
  class ScheduleDelay

    ONE_SECOND = 1.0
    ONE_MINUTE = 60.0
    FIVE_SECONDS = 5.0
    FIVE_MINUTES = 300.0

    def initialize (delay = ONE_SECOND)
      @delay = delay
      @last_http_error_occured_time = 0
    end

    def update_by_sent_num! num_sent
      @last_http_error_occured_time = 0
      if num_sent >= 100
        @delay = [(@delay/ 2.0).round(2), ONE_SECOND].max
      elsif num_sent < 10
        @delay = [(@delay * 1.25).round(2), FIVE_SECONDS].min
      end
    end

    def update_by_exeption! e
      if is_authorized_exeption?(e)
        @last_http_error_occured_time = Time.now if @last_http_error_occured_time == 0
        since_first_error = (Time.now - @last_http_error_occured_time).round(2)
        @delay = [[since_first_error, ONE_SECOND].max, ONE_MINUTE].min
      else
        @last_http_error_occured_time = Time.now
        @delay = FIVE_MINUTES
      end
    end

    def to_sec
      @delay
    end

    private

    def is_authorized_exeption? ex
      ex.try(:status) == 401
    end
  end

end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
stackify-api-ruby-2.1.0 lib/stackify/schedule_delay.rb
stackify-api-ruby-2.1.0.beta1 lib/stackify/schedule_delay.rb
stackify-api-ruby-2.0.0 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.3.0.beta1 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.2.10 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.2.9 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.2.7 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.2.4 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.2.3 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.1.0 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.15 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.14 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.13 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.12 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.11 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.10 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.9 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.8 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.7 lib/stackify/schedule_delay.rb
stackify-api-ruby-1.0.6 lib/stackify/schedule_delay.rb