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