module XRay::Plugins

Public Class Methods

do_request(request) click to toggle source
# File lib/aws-xray-sdk/plugins/ec2.rb, line 69
def self.do_request(request)
  begin
    response = Net::HTTP.start(request.uri.hostname, read_timeout: 1) { |http|
      http.request(request)
    }

    if response.code == '200'
      return response.body
    else
      raise(StandardError.new('Unsuccessful response::' + response.code + '::' + response.message))
    end
  rescue StandardError => e
    # Two attempts in total to complete the request successfully
    @retries ||= 0
    if @retries < 1
      @retries += 1
      retry
    else
      Logging.logger.warn %(Failed to complete request due to: #{e.message}.)
      raise e
    end
  end
end
get_metadata(token) click to toggle source
# File lib/aws-xray-sdk/plugins/ec2.rb, line 41
def self.get_metadata(token)
  metadata_uri = URI(METADATA_BASE_URL + '/dynamic/instance-identity/document')

  req = Net::HTTP::Get.new(metadata_uri)
  if token != ''
    req['X-aws-ec2-metadata-token'] = token
  end

  begin
    metadata_json = do_request(req)
    return parse_metadata(metadata_json)
  rescue StandardError => e
    Logging.logger.warn %(cannot get the ec2 instance metadata due to: #{e.message}.)
    {}
  end
end
parse_metadata(json_str) click to toggle source
# File lib/aws-xray-sdk/plugins/ec2.rb, line 58
def self.parse_metadata(json_str)
  metadata = {}
  data = JSON(json_str)
  metadata['instance_id'] = data['instanceId']
  metadata['availability_zone'] = data['availabilityZone']
  metadata['instance_type'] = data['instanceType']
  metadata['ami_id'] = data['imageId']

  metadata
end