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