in lib/elastic_apm/spies/http.rb [29:63]
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