class Rhod::Command
Constants
- EXCEPTIONS
Public Class Methods
execute(*args, &block)
click to toggle source
Class methods
# File lib/rhod/command.rb, line 24 def self.execute(*args, &block) this = self.new(*args, &block) this.execute end
new(*args, &block)
click to toggle source
# File lib/rhod/command.rb, line 5 def initialize(*args, &block) opts = args[-1].kind_of?(Hash) ? args.pop : {} @env = { :args => args || [], :request => block, :retries => opts[:retries] || 0, :attempts => 0, :logger => opts[:logger], :backoffs => Rhod::Backoffs.backoff_sugar_to_enumerator(opts[:backoffs]) || Rhod::Backoffs::Logarithmic.new(1.3), :fallback => opts[:fallback], :pool => opts[:pool], :exceptions => opts[:exceptions] || EXCEPTIONS, :profile_name => opts[:profile_name], :middleware => opts[:middleware_stack] || Rhod::Middleware.new, } end
Public Instance Methods
call_middleware_after_request()
click to toggle source
# File lib/rhod/command.rb, line 68 def call_middleware_after_request @env = @env[:middleware].on(:after, @env) end
call_middleware_before_request()
click to toggle source
# File lib/rhod/command.rb, line 64 def call_middleware_before_request @env = @env[:middleware].on(:before, @env) end
call_middleware_on_error()
click to toggle source
# File lib/rhod/command.rb, line 72 def call_middleware_on_error @env = @env[:middleware].on(:error, @env) end
call_middleware_on_failure()
click to toggle source
# File lib/rhod/command.rb, line 76 def call_middleware_on_failure @env = @env[:middleware].on(:failure, @env) end
execute()
click to toggle source
Instance methods
# File lib/rhod/command.rb, line 31 def execute begin if @env[:pool] @env[:pool].with do |conn| @env[:args] = [conn].concat(@env[:args]) call_middleware_before_request @env[:result] = @env[:request].call(*@env[:args]) call_middleware_after_request @env[:result] end else call_middleware_before_request @env[:result] = @env[:request].call(*@env[:args]) call_middleware_after_request @env[:result] end rescue *@env[:exceptions] => e @env[:attempts] += 1 @env[:next_attempt] = @env[:backoffs].next if @env[:attempts] <= @env[:retries] @env[:logger].warn("Rhod - Caught an exception: #{e.message}. Attempt #{@env[:attempts]} in #{sprintf("%.2f", @env[:next_attempt])} secs") if @env[:logger] && @env[:logger].respond_to?(:warn) call_middleware_on_error sleep(@env[:next_attempt]) retry else call_middleware_on_failure return @env[:fallback].call(*@env[:args]) if @env[:fallback] raise end end end