Sha256: 6d73dca61874d3864e95316c379bf657541b72bcd8c8d4ab09f09450031a9c29

Contents?: true

Size: 1.49 KB

Versions: 8

Compression:

Stored size: 1.49 KB

Contents

require 'net/http'

Net::HTTP.class_eval {

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

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

    # Send out the tracing context with the request
    request = args[0]
    our_trace_id = ::Instana.tracer.trace_id
    our_span_id  = ::Instana.tracer.span_id

    # Set request headers; encode IDs as hexadecimal strings
    request['X-Instana-T'] = ::Instana.tracer.id_to_header(our_trace_id)
    request['X-Instana-S'] = ::Instana.tracer.id_to_header(our_span_id)

    response = request_without_instana(*args, &block)

    # Pickup response headers; convert back to base 10 integer
    if response.key?('X-Instana-T')
      their_trace_id = ::Instana.tracer.header_to_id(response.header['X-Instana-T'])

      if our_trace_id != their_trace_id
        ::Instana.logger.debug "#{Thread.current}: Trace ID mismatch on net/http response! ours: #{our_trace_id} theirs: #{their_trace_id}"
      end
    end

    kv_payload = { :http => {} }
    kv_payload[:http][:status] = response.code
    kv_payload[:http][:url] = request.uri.to_s
    kv_payload[:http][:method] = request.method
    ::Instana.tracer.log_info(kv_payload)

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

  Instana.logger.info "Instrumenting net/http"

  alias request_without_instana request
  alias request request_with_instana
}

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
instana-0.13.1 lib/instana/instrumentation/net-http.rb
instana-0.12.1 lib/instana/instrumentation/net-http.rb
instana-0.11.0 lib/instana/instrumentation/net-http.rb
instana-0.10.1 lib/instana/instrumentation/net-http.rb
instana-0.9.2 lib/instana/instrumentation/net-http.rb
instana-0.9.1 lib/instana/instrumentation/net-http.rb
instana-0.9.0 lib/instana/instrumentation/net-http.rb
instana-0.9.0.pre.slywolf3 lib/instana/instrumentation/net-http.rb