module Aws::Xray::Hooks::NetHttp

Constants

NAME_HEADER

Public Instance Methods

request_with_aws_xray(req, *args, &block) click to toggle source
# File lib/aws/xray/hooks/net_http.rb, line 10
def request_with_aws_xray(req, *args, &block)
  return request_without_aws_xray(req, *args, &block) unless Context.started?
  return request_without_aws_xray(req, *args, &block) if Context.current.disabled?(:net_http)

  uri = URI('')
  uri.scheme = use_ssl? ? 'https' : 'http'
  uri.host = address
  uri.port = port
  uri.path = URI(req.path).path
  request_record = Request.build(
    method: req.method,
    url: uri.to_s,
    user_agent: req['User-Agent'],
  )
  name = req[NAME_HEADER] || req['Host'] || address
  Context.current.start_subsegment(remote: true, name: name) do |sub|
    propagate_trace = sub.generate_trace
    req[TRACE_HEADER] = propagate_trace.to_header_value
    sub.set_http_request(request_record)

    # Don't record twice if down-stream caller calls Net::HTTP#request again.
    res = Context.current.disable_trace(:net_http) { request_without_aws_xray(req, *args, &block) }

    sub.set_http_response_with_error(res.code.to_i, res['Content-Length'], remote: true)
    sub.add_metadata(CallerBuilder.call) if Aws::Xray.config.record_caller_of_http_requests
    res
  end
end