class NewRelic::Agent::TraceContextPayload

Constants

DELIMITER
FALSE_CHAR
PARENT_TYPE
PARENT_TYPES
SUPPORTABILITY_PARSE_EXCEPTION
TRUE_CHAR
VERSION

Attributes

id[RW]
parent_account_id[RW]
parent_app_id[RW]
parent_type_id[RW]
priority[RW]
sampled[RW]
sampled?[RW]
timestamp[RW]
transaction_id[RW]
version[RW]

Public Class Methods

create(version: VERSION, parent_type: PARENT_TYPE, parent_account_id: nil, parent_app_id: nil, id: nil, transaction_id: nil, sampled: nil, priority: nil, timestamp: now_ms) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 21
def create(version: VERSION,
  parent_type: PARENT_TYPE,
  parent_account_id: nil,
  parent_app_id: nil,
  id: nil,
  transaction_id: nil,
  sampled: nil,
  priority: nil,
  timestamp: now_ms)

  new(version, parent_type, parent_account_id, parent_app_id, id,
    transaction_id, sampled, priority, timestamp)
end
from_s(payload_string) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 37
def from_s(payload_string)
  attrs = payload_string.split(DELIMITER)

  payload = create( \
    version: int!(attrs[0]),
    parent_type: int!(attrs[1]),
    parent_account_id: attrs[2],
    parent_app_id: attrs[3],
    id: value_or_nil(attrs[4]),
    transaction_id: value_or_nil(attrs[5]),
    sampled: value_or_nil(attrs[6]) ? boolean_int!(attrs[6]) == 1 : nil,
    priority: float!(attrs[7]),
    timestamp: int!(attrs[8])
  )
  handle_invalid_payload(message: 'payload missing attributes') unless payload.valid?
  payload
rescue => e
  handle_invalid_payload(error: e)
  raise
end
new(version, parent_type_id, parent_account_id, parent_app_id, id, transaction_id, sampled, priority, timestamp) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 86
def initialize(version, parent_type_id, parent_account_id, parent_app_id,
  id, transaction_id, sampled, priority, timestamp)
  @version = version
  @parent_type_id = parent_type_id
  @parent_account_id = parent_account_id
  @parent_app_id = parent_app_id
  @id = id
  @transaction_id = transaction_id
  @sampled = sampled
  @priority = priority
  @timestamp = timestamp
end

Private Class Methods

handle_invalid_payload(error: nil, message: nil) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 64
def handle_invalid_payload(error: nil, message: nil)
  NewRelic::Agent.increment_metric(SUPPORTABILITY_PARSE_EXCEPTION)
  if error
    NewRelic::Agent.logger.warn('Error parsing trace context payload', error)
  elsif message
    NewRelic::Agent.logger.warn("Error parsing trace context payload: #{message}")
  end
end
now_ms() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 60
def now_ms
  Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
end

Public Instance Methods

parent_type() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 99
def parent_type
  @parent_type_string ||= PARENT_TYPES[@parent_type_id]
end
to_s() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 113
def to_s
  result = version.to_s # required
  result << DELIMITER << parent_type_id.to_s # required
  result << DELIMITER << parent_account_id # required
  result << DELIMITER << parent_app_id # required
  result << DELIMITER << (id || NewRelic::EMPTY_STR)
  result << DELIMITER << (transaction_id || NewRelic::EMPTY_STR)
  result << DELIMITER << (sampled ? TRUE_CHAR : FALSE_CHAR)
  result << DELIMITER << sprintf('%.6f', priority)
  result << DELIMITER << timestamp.to_s # required
  result
end
valid?() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context_payload.rb, line 103
def valid?
  version \
    && parent_type_id \
    && !parent_account_id.empty? \
    && !parent_app_id.empty? \
    && timestamp
rescue
  false
end