Sha256: ebf11cc7f81f0ad31b284d8530bb2ada6c2872d8ae5d1dc4b893e9c23a791636

Contents?: true

Size: 1.7 KB

Versions: 33

Compression:

Stored size: 1.7 KB

Contents

require 'net/http'

if defined?(::Net::HTTP) && ::Instana.config[:nethttp][:enabled]
  Net::HTTP.class_eval {

    def request_with_instana(*args, &block)
      if !Instana.tracer.tracing? || !started?
        do_skip = true
        return request_without_instana(*args, &block)
      end

      ::Instana.tracer.log_entry(:'net-http')

      # Send out the tracing context with the request
      request = args[0]

      # Set request headers; encode IDs as hexadecimal strings
      t_context = ::Instana.tracer.context
      request['X-Instana-T'] = t_context.trace_id_header
      request['X-Instana-S'] = t_context.span_id_header

      # Collect up KV info now in case any exception is raised
      kv_payload = { :http => {} }
      kv_payload[:http][:method] = request.method

      if request.uri
        kv_payload[:http][:url] = request.uri.to_s
      else
        if use_ssl?
          kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
        else
          kv_payload[:http][:url] = "http://#{@address}:#{@port}#{request.path}"
        end
      end

      # The core call
      response = request_without_instana(*args, &block)

      kv_payload[:http][:status] = response.code
      if response.code.to_i.between?(500, 511)
        # Because of the 5xx response, we flag this span as errored but
        # without a backtrace (no exception)
        ::Instana.tracer.log_error(nil)
      end

      response
    rescue => e
      ::Instana.tracer.log_error(e)
      raise
    ensure
      ::Instana.tracer.log_exit(:'net-http', kv_payload) unless do_skip
    end

    ::Instana.logger.debug "Instrumenting Net::HTTP"

    alias request_without_instana request
    alias request request_with_instana
  }
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
instana-1.12.0 lib/instana/instrumentation/net-http.rb
instana-1.11.8-java lib/instana/instrumentation/net-http.rb
instana-1.11.8 lib/instana/instrumentation/net-http.rb
instana-1.11.7 lib/instana/instrumentation/net-http.rb
instana-1.11.6 lib/instana/instrumentation/net-http.rb
instana-1.11.6-java lib/instana/instrumentation/net-http.rb
instana-1.11.5 lib/instana/instrumentation/net-http.rb
instana-1.11.5-java lib/instana/instrumentation/net-http.rb
instana-1.11.4-java lib/instana/instrumentation/net-http.rb
instana-1.11.4 lib/instana/instrumentation/net-http.rb
instana-1.11.3-java lib/instana/instrumentation/net-http.rb
instana-1.11.3 lib/instana/instrumentation/net-http.rb
instana-1.11.2-java lib/instana/instrumentation/net-http.rb
instana-1.11.2 lib/instana/instrumentation/net-http.rb
instana-1.11.1-java lib/instana/instrumentation/net-http.rb
instana-1.11.1 lib/instana/instrumentation/net-http.rb
instana-1.11.0-java lib/instana/instrumentation/net-http.rb
instana-1.11.0 lib/instana/instrumentation/net-http.rb
instana-1.10.10 lib/instana/instrumentation/net-http.rb
instana-1.10.10-java lib/instana/instrumentation/net-http.rb