module ElasticAPM::Spies::HTTPSpy::Ext

@api private

Public Instance Methods

perform(req, options) click to toggle source
Calls superclass method
# File lib/elastic_apm/spies/http.rb, line 30
def perform(req, options)
  unless (transaction = ElasticAPM.current_transaction)
    return super(req, options)
  end

  method = req.verb.to_s.upcase
  host = req.uri.host

  context = ElasticAPM::Span::Context.new(
    http: { url: req.uri, method: method },
    destination: ElasticAPM::Span::Context::Destination.from_uri(req.uri, type: SUBTYPE)
  )

  name = "#{method} #{host}"

  ElasticAPM.with_span(
    name,
    TYPE,
    subtype: SUBTYPE,
    context: context
  ) do |span|
    trace_context = span&.trace_context || transaction.trace_context
    trace_context.apply_headers { |key, value| req[key] = value }

    result = super(req, options)

    if (http = span&.context&.http)
      http.status_code = result.status.to_s
    end

    span&.outcome = Span::Outcome.from_http_status(result.status)
    result
  end
end