class NewRelic::Agent::Transaction::Trace
Constants
- AGENT_ATTRIBUTES_KEY
- INTRINSIC_ATTRIBUTES_KEY
- ROOT
- USER_ATTRIBUTES_KEY
Attributes
Public Class Methods
Source
# File lib/new_relic/agent/transaction/trace.rb, line 19 def initialize(start_time) @start_time = start_time @node_count = 0 @root_node = NewRelic::Agent::Transaction::TraceNode.new(ROOT, 0.0, nil, nil, nil) @prepared = false end
Public Instance Methods
Source
# File lib/new_relic/agent/transaction/trace.rb, line 114 def attributes_for_tracer_destination destination = NewRelic::Agent::AttributeFilter::DST_TRANSACTION_TRACER agent_attributes = self.attributes.agent_attributes_for(destination) custom_attributes = self.attributes.custom_attributes_for(destination) intrinsic_attributes = self.attributes.intrinsic_attributes_for(destination) { AGENT_ATTRIBUTES_KEY => agent_attributes, USER_ATTRIBUTES_KEY => custom_attributes, INTRINSIC_ATTRIBUTES_KEY => intrinsic_attributes } end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 78 def collect_explain_plans! return unless NewRelic::Agent::Database.should_collect_explain_plans? threshold = NewRelic::Agent.config[:'transaction_tracer.explain_threshold'] each_node do |node| if node[:sql] && node.duration > threshold node[:explain_plan] = node.explain_sql end end end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 30 def count_nodes node_count = 0 each_node do |node| next if node == root_node node_count += 1 end node_count end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 53 def create_node(time_since_start, metric_name = nil) raise FinishedTraceError.new("Can't create additional node for finished trace.") if self.finished self.node_count += 1 NewRelic::Agent::Transaction::TraceNode.new(metric_name, time_since_start) end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 40 def duration self.root_node.duration end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 60 def each_node(&block) self.root_node.each_node(&block) end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 106 def each_node_with_nest_tracking(&block) @root_node.each_node_with_nest_tracking(&block) end
Iterates recursively over each node in the entire transaction sample tree while keeping track of nested nodes
Source
# File lib/new_relic/agent/transaction/trace.rb, line 90 def prepare_sql_for_transmission! each_node do |node| next unless node[:sql] node[:sql] = node[:sql].safe_sql end end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 64 def prepare_to_send! return self if @prepared if NewRelic::Agent::Database.should_record_sql? collect_explain_plans! prepare_sql_for_transmission! else strip_sql! end @prepared = true self end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 26 def sample_id self.object_id end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 98 def strip_sql! each_node do |node| node.params.delete(:sql) end end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 44 def synthetics_resource_id intrinsic_attributes = attributes.intrinsic_attributes_for(NewRelic::Agent::AttributeFilter::DST_TRANSACTION_TRACER) intrinsic_attributes[:synthetics_resource_id] end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 138 def to_collector_array(encoder) attributes_hash = attributes_for_tracer_destination [ NewRelic::Helper.time_to_millis(self.start_time), NewRelic::Helper.time_to_millis(self.root_node.duration), NewRelic::Coerce.string(self.transaction_name), NewRelic::Coerce.string(attributes_hash[AGENT_ATTRIBUTES_KEY][:'request.uri']), encoder.encode(trace_tree(attributes_hash)), NewRelic::Coerce.string(self.guid), nil, false, # forced?, nil, # NewRelic::Coerce.int_or_nil(xray_session_id), NewRelic::Coerce.string(self.synthetics_resource_id) ] end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 49 def to_s_compact @root_node.to_s_compact end
Source
# File lib/new_relic/agent/transaction/trace.rb, line 128 def trace_tree(attributes_hash) [ NewRelic::Coerce.float(self.start_time), NewRelic::EMPTY_HASH, NewRelic::EMPTY_HASH, self.root_node.to_array, attributes_hash ] end