Class: RightAws::AWSErrorHandler
- Inherits:
-
Object
- Object
- RightAws::AWSErrorHandler
- Defined in:
- lib/awsbase/right_awsbase.rb
Constant Summary collapse
- @@reiteration_start_delay =
0.2
- @@reiteration_time =
5
Class Method Summary collapse
- .reiteration_start_delay ⇒ Object
- .reiteration_start_delay=(reiteration_start_delay) ⇒ Object
- .reiteration_time ⇒ Object
- .reiteration_time=(reiteration_time) ⇒ Object
Instance Method Summary collapse
-
#check(request) ⇒ Object
Returns false if.
-
#initialize(aws, parser, errors_list = nil, reiteration_time = nil) ⇒ AWSErrorHandler
constructor
:nodoc:.
Constructor Details
#initialize(aws, parser, errors_list = nil, reiteration_time = nil) ⇒ AWSErrorHandler
:nodoc:
126 127 128 129 130 131 132 133 134 |
# File 'lib/awsbase/right_awsbase.rb', line 126 def initialize(aws, parser, errors_list=nil, reiteration_time=nil) #:nodoc: @aws = aws # Link to RightEc2 | RightSqs | RightS3 instance @parser = parser # parser to parse Amazon response @started_at = Time.now @stop_at = @started_at + (reiteration_time || @@reiteration_time) @errors_list = errors_list || [] @reiteration_delay = @@reiteration_start_delay @retries = 0 end |
Class Method Details
.reiteration_start_delay ⇒ Object
111 112 113 |
# File 'lib/awsbase/right_awsbase.rb', line 111 def self.reiteration_start_delay @@reiteration_start_delay end |
.reiteration_start_delay=(reiteration_start_delay) ⇒ Object
114 115 116 |
# File 'lib/awsbase/right_awsbase.rb', line 114 def self.reiteration_start_delay=(reiteration_start_delay) @@reiteration_start_delay = reiteration_start_delay end |
.reiteration_time ⇒ Object
119 120 121 |
# File 'lib/awsbase/right_awsbase.rb', line 119 def self.reiteration_time @@reiteration_time end |
.reiteration_time=(reiteration_time) ⇒ Object
122 123 124 |
# File 'lib/awsbase/right_awsbase.rb', line 122 def self.reiteration_time=(reiteration_time) @@reiteration_time = reiteration_time end |
Instance Method Details
#check(request) ⇒ Object
Returns false if
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/awsbase/right_awsbase.rb', line 137 def check(request) #:nodoc: result = false error_found = false last_errors_text = '' response = @aws.last_response # log error request_text_data = "#{request[:server]}:#{request[:port]}#{request[:request].path}" @aws.logger.warn("##### #{@aws.class.name} returned an error: #{response.code} #{response.}\n#{response.body} #####") @aws.logger.warn("##### #{@aws.class.name} request: #{request_text_data} ####") # Check response body: if it is an Amazon XML document or not: if response.body && response.body[/<\?xml/] # ... it is a xml document @aws.class.bench_xml.add! do error_parser = RightErrorResponseParser.new error_parser.parse(response) @aws.last_errors = error_parser.errors @aws.last_request_id = error_parser.requestID last_errors_text = @aws.last_errors.flatten.join("\n") end else # ... it is not a xml document(probably just a html page?) @aws.last_errors = [[response.code, "#{response.} (#{request_text_data})"]] @aws.last_request_id = '-undefined-' last_errors_text = response. end # now - check the error @errors_list.each do |error_to_find| if last_errors_text[/#{error_to_find}/i] error_found = true @aws.logger.warn("##### Retry is needed, error pattern match: #{error_to_find} #####") break end end # check the time has gone from the first error come if error_found if (Time.now < @stop_at) @retries += 1 @aws.logger.warn("##### Retry ##{@retries} is being performed. Sleeping for #{@reiteration_delay} sec. Whole time: #{Time.now-@started_at} sec ####") sleep @reiteration_delay @reiteration_delay *= 2 result = @aws.request_info(request, @parser) else @aws.logger.warn("##### Ooops, time is over... ####") end end result end |