31: def self.execute_request(default=nil, timeout=nil, &request)
32: timeout ||= 30
33: raise "No block provided" unless request
34: response = nil
35: @@mutex.synchronize {
36: begin
37:
38: Timeout::timeout(timeout) do
39: response = request.call
40: end
41:
42:
43: rescue ::AWS::Error, ::AWS::InvalidInstanceIDMalformed => ex
44: raise Rudy::AWS::Error, ex.message
45:
46:
47:
48: rescue ::AWS::InternalError => ex
49: raise Rudy::AWS::Error, ex.message
50:
51: rescue Timeout::Error => ex
52: Rudy::Huxtable.le "Timeout (#{timeout}): #{ex.message}!"
53: rescue SocketError => ex
54:
55:
56: raise SocketError, "Check your Internets!" unless @@global.offline
57: ensure
58: response ||= default
59: end
60: sleep 0.1
61: }
62: response
63: end