Class: RightAws::AWSErrorHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/awsbase/right_awsbase.rb

Constant Summary collapse

@@reiteration_start_delay =
0.2
@@reiteration_time =
5

Class Method Summary collapse

Instance Method Summary collapse

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_delayObject



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_timeObject



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.message}\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.message} (#{request_text_data})"]]
    @aws.last_request_id = '-undefined-'
    last_errors_text     = response.message
  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