Module: RightScale::CloudApi::RequestAnalyzer::ClassMethods

Defined in:
lib/base/routines/request_analyzer.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



63
64
65
66
67
# File 'lib/base/routines/request_analyzer.rb', line 63

def self.extended(base)
  unless base.respond_to?(:options) && base.options.is_a?(Hash)
    fail Error::new("RequestAnalyzer routine assumes class being extended responds to :options and returns a hash")
  end
end

Instance Method Details

#error_pattern(action, error_pattern) ⇒ Object

Adds a new error pattern. Patterns are analyzed in order of their definition. If one pattern hits the rest are not analyzed.

@xample:

error_pattern :abort_on_timeout,     :path     => /Action=(Run|Create)/
error_pattern :retry,                :response => /InternalError|Internal Server Error|internal service error/i
error_pattern :disconnect_and_abort, :code     => /5..|403|408/
error_pattern :disconnect_and_abort, :code     => /4../, :if => Proc.new{ |opts| rand(100) < 10 }

Parameters:

Raises:



85
86
87
88
89
90
91
92
# File 'lib/base/routines/request_analyzer.rb', line 85

def error_pattern(action, error_pattern)
  action = action.to_sym
  fail Error::new("Patterns are not set for action #{action.inspect}") if !error_pattern.is_a?(Hash) || error_pattern._blank?
  fail Error::new("Unsupported action #{action.inspect} for error pattern #{error_pattern.inspect}") unless ALL_ACTIONS.include?(action)
  unsupported_keys = REQUEST_ACTIONS.include?(action) ? error_pattern.keys - REQUEST_KEYS : error_pattern.keys - RESPONSE_KEYS
  fail Error::new("Unsupported keys #{unsupported_keys.inspect} for #{action.inspect} in error pattern #{error_pattern.inspect}") unless unsupported_keys._blank?
  (options[:error_patterns] ||= []) << error_pattern.merge(:action => action)
end