lib/fog/aws/iam.rb in fog-1.5.0 vs lib/fog/aws/iam.rb in fog-1.6.0

- old
+ new

@@ -9,11 +9,11 @@ class LimitExceeded < Fog::AWS::IAM::Error; end class MalformedCertificate < Fog::AWS::IAM::Error; end class ValidationError < Fog::AWS::IAM::Error; end requires :aws_access_key_id, :aws_secret_access_key - recognizes :host, :path, :port, :scheme, :persistent + recognizes :host, :path, :port, :scheme, :persistent, :instrumentor, :instrumentor_name request_path 'fog/aws/requests/iam' request :add_user_to_group request :add_role_to_instance_profile request :create_access_key @@ -68,20 +68,20 @@ request :update_server_certificate request :update_signing_certificate request :update_user request :upload_server_certificate request :upload_signing_certificate - + model_path 'fog/aws/models/iam' model :user collection :users model :policy - collection :policies + collection :policies model :access_key collection :access_keys - + class Mock def self.data @data ||= Hash.new do |hash, key| hash[key] = { :owner_id => Fog::AWS::Mock.owner_id, @@ -149,10 +149,12 @@ require 'fog/core/parser' @aws_access_key_id = options[:aws_access_key_id] @aws_secret_access_key = options[:aws_secret_access_key] @connection_options = options[:connection_options] || {} + @instrumentor = options[:instrumentor] + @instrumentor_name = options[:instrumentor_name] || 'fog.aws.iam' @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key) @host = options[:host] || 'iam.amazonaws.com' @path = options[:path] || '/' @persistent = options[:persistent] || false @port = options[:port] || 443 @@ -180,38 +182,42 @@ :port => @port, :version => '2010-05-08' } ) - begin - response = @connection.request({ - :body => body, - :expects => 200, - :idempotent => idempotent, - :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' }, - :host => @host, - :method => 'POST', - :parser => parser - }) + if @instrumentor + @instrumentor.instrument("#{@instrumentor_name}.request", params) do + _request(body, idempotent, parser) + end + else + _request(body, idempotent, parser) + end + end - response - rescue Excon::Errors::HTTPStatusError => error - if match = error.message.match(/<Code>(.*)<\/Code>(?:.*<Message>(.*)<\/Message>)?/m) - case match[1] - when 'CertificateNotFound', 'NoSuchEntity' - raise Fog::AWS::IAM::NotFound.slurp(error, match[2]) - when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError' - raise Fog::AWS::IAM.const_get(match[1]).slurp(error, match[2]) - else - raise Fog::AWS::IAM::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1] - raise - end + def _request(body, idempotent, parser) + @connection.request({ + :body => body, + :expects => 200, + :idempotent => idempotent, + :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' }, + :host => @host, + :method => 'POST', + :parser => parser + }) + rescue Excon::Errors::HTTPStatusError => error + if match = error.message.match(/<Code>(.*)<\/Code>(?:.*<Message>(.*)<\/Message>)?/m) + case match[1] + when 'CertificateNotFound', 'NoSuchEntity' + raise Fog::AWS::IAM::NotFound.slurp(error, match[2]) + when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError' + raise Fog::AWS::IAM.const_get(match[1]).slurp(error, match[2]) else + raise Fog::AWS::IAM::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1] raise end + else + raise end - - end end end end