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