perform

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