class Excon::Middleware::MmtrixCrossAppTracing

Constants

TRACE_DATA_IVAR

Public Class Methods

new(stack) click to toggle source
# File lib/mmtrix/agent/instrumentation/excon/middleware.rb, line 10
def initialize(stack)
  @stack = stack
end

Public Instance Methods

error_call(datum) click to toggle source
# File lib/mmtrix/agent/instrumentation/excon/middleware.rb, line 38
def error_call(datum)
  finish_trace(datum)
  @stack.error_call(datum)
end
finish_trace(datum) click to toggle source
# File lib/mmtrix/agent/instrumentation/excon/middleware.rb, line 43
def finish_trace(datum) #THREAD_LOCAL_ACCESS
  trace_data = datum[:connection] && datum[:connection].instance_variable_get(TRACE_DATA_IVAR)
  if trace_data
    datum[:connection].instance_variable_set(TRACE_DATA_IVAR, nil)
    t0, node, wrapped_request = trace_data
    if datum[:response]
      wrapped_response = ::Mmtrix::Agent::HTTPClients::ExconHTTPResponse.new(datum[:response])
    end
    state = ::Mmtrix::Agent::TransactionState.tl_get
    ::Mmtrix::Agent::CrossAppTracing.finish_trace(state, t0, node, wrapped_request, wrapped_response)
  end
end
request_call(datum) click to toggle source
# File lib/mmtrix/agent/instrumentation/excon/middleware.rb, line 14
def request_call(datum) #THREAD_LOCAL_ACCESS
  begin
    # Only instrument this request if we haven't already done so, because
    # we can get request_call multiple times for requests marked as
    # :idempotent in the options, but there will be only a single
    # accompanying response_call/error_call.
    if datum[:connection] && !datum[:connection].instance_variable_get(TRACE_DATA_IVAR)
      wrapped_request = ::Mmtrix::Agent::HTTPClients::ExconHTTPRequest.new(datum)
      state   = ::Mmtrix::Agent::TransactionState.tl_get
      t0      = Time.now
      node = ::Mmtrix::Agent::CrossAppTracing.start_trace(state, t0, wrapped_request)
      datum[:connection].instance_variable_set(TRACE_DATA_IVAR, [t0, node, wrapped_request])
    end
  rescue => e
    Mmtrix::Agent.logger.debug(e)
  end
  @stack.request_call(datum)
end
response_call(datum) click to toggle source
# File lib/mmtrix/agent/instrumentation/excon/middleware.rb, line 33
def response_call(datum)
  finish_trace(datum)
  @stack.response_call(datum)
end