class Aws::Plugins::ClientMetricsSendPlugin::AttemptHandler
def _extract_error_name(error)
def _extract_error_name(error) if error.is_a?(Aws::Errors::ServiceError) error.class.code else error.class.name.to_s end end
def call(context)
def call(context) request_metrics = context.metadata[:client_metrics] attempt_opts = { timestamp: DateTime.now.strftime('%Q').to_i, fqdn: context.http_request.endpoint.host, region: context.config.region, user_agent: context.http_request.headers["user-agent"], } # It will generally cause an error, but it is semantically valid for # credentials to not exist. if context.config.credentials attempt_opts[:access_key] = context.config.credentials.credentials.access_key_id attempt_opts[:session_token] = context.config.credentials.credentials.session_token end call_attempt = request_metrics.build_call_attempt(attempt_opts) context.metadata[:current_call_attempt] = call_attempt resp = @handler.call(context) if context.metadata[:redirect_region] call_attempt.region = context.metadata[:redirect_region] end headers = context.http_response.headers if headers.include?("x-amz-id-2") call_attempt.x_amz_id_2 = headers["x-amz-id-2"] end if headers.include?("x-amz-request-id") call_attempt.x_amz_request_id = headers["x-amz-request-id"] end if headers.include?("x-amzn-request-id") call_attempt.x_amzn_request_id = headers["x-amzn-request-id"] end call_attempt.http_status_code = context.http_response.status_code if e = resp.error e_name = _extract_error_name(e) e_msg = e.message call_attempt.aws_exception = "#{e_name}" call_attempt.aws_exception_msg = "#{e_msg}" end request_metrics.add_call_attempt(call_attempt) resp end