module NewRelic::Agent::DistributedTraceMetrics

Constants

ALL_OTHER_SUFFIX
ALL_SUFFIX
ALL_WEB_SUFFIX
UNKNOWN_CALLER_PREFIX

Public Instance Methods

prefix_for_metric(name, transaction, payload) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 35
def prefix_for_metric(name, transaction, payload)
  if payload
    "#{name}/" \
    "#{payload.parent_type}/" \
    "#{payload.parent_account_id}/" \
    "#{payload.parent_app_id}/" \
    "#{transaction.distributed_tracer.caller_transport_type}"
  else
    UNKNOWN_CALLER_PREFIX % [name, transaction.distributed_tracer.caller_transport_type]
  end
end
record_caller_by_duration_metrics(transaction, payload) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 47
def record_caller_by_duration_metrics(transaction, payload)
  prefix = prefix_for_metric('DurationByCaller', transaction, payload)
  record_unscoped_metric(transaction, prefix, transaction.duration)
end
record_errors_by_caller_metrics(transaction, payload) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 60
def record_errors_by_caller_metrics(transaction, payload)
  return unless transaction.exceptions.size > 0

  prefix = prefix_for_metric('ErrorsByCaller', transaction, payload)
  record_unscoped_metric(transaction, prefix, 1)
end
record_metrics_for_transaction(transaction) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 24
def record_metrics_for_transaction(transaction)
  return unless Agent.config[:'distributed_tracing.enabled']

  dt = transaction.distributed_tracer
  payload = dt.distributed_trace_payload || dt.trace_state_payload

  record_caller_by_duration_metrics(transaction, payload)
  record_transport_duration_metrics(transaction, payload)
  record_errors_by_caller_metrics(transaction, payload)
end
record_transport_duration_metrics(transaction, payload) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 52
def record_transport_duration_metrics(transaction, payload)
  return unless payload

  prefix = prefix_for_metric('TransportDuration', transaction, payload)
  duration = transaction.calculate_transport_duration(payload)
  record_unscoped_metric(transaction, prefix, duration)
end
transaction_type_suffix() click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 16
def transaction_type_suffix
  if Transaction.recording_web_transaction?
    ALL_WEB_SUFFIX
  else
    ALL_OTHER_SUFFIX
  end
end

Private Instance Methods

record_unscoped_metric(transaction, prefix, duration) click to toggle source
# File lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb, line 69
def record_unscoped_metric(transaction, prefix, duration)
  transaction.metrics.record_unscoped("#{prefix}/#{ALL_SUFFIX}", duration)
  transaction.metrics.record_unscoped("#{prefix}/#{transaction_type_suffix}", duration)
end