class Mmtrix::Agent::TransactionState
This is THE location to store thread local information during a transaction Need a new piece of data? Add a method here, NOT a new thread local variable.
Attributes
Busy calculator
Cross app tracing Because we need values from headers before the transaction actually starts
Current transaction stack and sample building
Cross app tracing Because we need values from headers before the transaction actually starts
TT’s and SQL
TT’s and SQL
Cross app tracing Because we need values from headers before the transaction actually starts
Request data
Sql Sampler
Transaction
Data
Scope stack tracking from Mmtrix::StatsEngine::Transactions Should not be nil–this class manages its initialization and resetting
Execution tracing on current thread
Public Class Methods
# File lib/mmtrix/agent/transaction_state.rb, line 36 def initialize @untraced = [] @traced_method_stack = TracedMethodStack.new @current_transaction = nil end
# File lib/mmtrix/agent/transaction_state.rb, line 32 def self.tl_clear_for_testing Thread.current[:mmtrix_transaction_state] = nil end
# File lib/mmtrix/agent/transaction_state.rb, line 13 def self.tl_get tl_state_for(Thread.current) end
This method should only be used by TransactionState
for access to the current thread’s state or to provide read-only accessors for other threads
If ever exposed, this requires additional synchronization
# File lib/mmtrix/agent/transaction_state.rb, line 21 def self.tl_state_for(thread) state = thread[:mmtrix_transaction_state] if state.nil? state = TransactionState.new thread[:mmtrix_transaction_state] = state end state end
Public Instance Methods
# File lib/mmtrix/agent/transaction_state.rb, line 108 def in_background_transaction? !current_transaction.nil? && !current_transaction.recording_web_transaction? end
# File lib/mmtrix/agent/transaction_state.rb, line 112 def in_web_transaction? !current_transaction.nil? && current_transaction.recording_web_transaction? end
# File lib/mmtrix/agent/transaction_state.rb, line 80 def is_cross_app? is_cross_app_caller? || is_cross_app_callee? end
# File lib/mmtrix/agent/transaction_state.rb, line 76 def is_cross_app_callee? referring_transaction_info != nil end
# File lib/mmtrix/agent/transaction_state.rb, line 72 def is_cross_app_caller? @is_cross_app_caller end
# File lib/mmtrix/agent/transaction_state.rb, line 127 def is_execution_traced? @untraced.nil? || @untraced.last != false end
# File lib/mmtrix/agent/transaction_state.rb, line 138 def is_sql_recorded? @record_sql != false end
# File lib/mmtrix/agent/transaction_state.rb, line 134 def is_transaction_traced? @record_tt != false end
# File lib/mmtrix/agent/transaction_state.rb, line 123 def pop_traced @untraced.pop if @untraced end
# File lib/mmtrix/agent/transaction_state.rb, line 119 def push_traced(should_trace) @untraced << should_trace end
# File lib/mmtrix/agent/transaction_state.rb, line 87 def request_guid return nil unless current_transaction current_transaction.guid end
This starts the timer for the transaction.
# File lib/mmtrix/agent/transaction_state.rb, line 43 def reset(transaction=nil) # We purposefully don't reset @untraced, @record_tt and @record_sql # since those are managed by Mmtrix::Agent.disable_* calls explicitly # and (more importantly) outside the scope of a transaction @timings = nil @request = nil @current_transaction = transaction @traced_method_stack.clear @is_cross_app_caller = false @client_cross_app_id = nil @referring_transaction_info = nil @transaction_sample_builder = nil @sql_sampler_transaction_data = nil @busy_entries = 0 end
# File lib/mmtrix/agent/transaction_state.rb, line 64 def timings @timings ||= TransactionTimings.new(transaction_queue_time, transaction_start_time, transaction_name) end
# File lib/mmtrix/agent/transaction_state.rb, line 104 def transaction_name current_transaction.nil? ? nil : current_transaction.best_name end
# File lib/mmtrix/agent/transaction_state.rb, line 100 def transaction_queue_time current_transaction.nil? ? 0.0 : current_transaction.queue_time end
# File lib/mmtrix/agent/transaction_state.rb, line 96 def transaction_start_time current_transaction.start_time if current_transaction end