class Attune::CallDropping

Constants

SKIP_MAX

The most requests to skip before retrying

SKIP_STEP

requests to skip before retry

Public Class Methods

new(app, storage=default_storage) click to toggle source
# File lib/attune/call_dropping.rb, line 3
def initialize app, storage=default_storage
  @app = app
  @storage = storage
end

Public Instance Methods

call(env) click to toggle source
# File lib/attune/call_dropping.rb, line 8
def call env
  raise_timeout if should_skip?
  begin
    result = @app.call(env)
    increment_skips(-SKIP_STEP)
    result
  rescue Faraday::Error::TimeoutError => e
    increment_skips(SKIP_STEP)
    raise e
  end
end

Private Instance Methods

default_storage() click to toggle source
# File lib/attune/call_dropping.rb, line 48
def default_storage
  Thread.current
end
increment_skips(amount) click to toggle source
# File lib/attune/call_dropping.rb, line 35
def increment_skips amount
  self.skip_rate = skip_rate + amount

  if skip_rate <= 0.0
    self.skip_rate = 0.0
  elsif skip_rate >= SKIP_MAX
    self.skip_rate = SKIP_MAX
  end
end
raise_timeout() click to toggle source
# File lib/attune/call_dropping.rb, line 27
def raise_timeout
  raise Faraday::Error::TimeoutError, "dropped request"
end
should_skip?() click to toggle source
# File lib/attune/call_dropping.rb, line 31
def should_skip?
  rand > (1.0 / (1.0 + skip_rate))
end
skip_rate() click to toggle source
# File lib/attune/call_dropping.rb, line 45
def skip_rate; @storage[:skip_rate] || 0.0; end
skip_rate=(v;) click to toggle source
# File lib/attune/call_dropping.rb, line 46
def skip_rate= v; @storage[:skip_rate]= v; end