class NewRelic::Agent::DistributedTracing::TraceContext::HeaderData

Attributes

trace_parent[RW]
trace_state_payload[RW]
trace_state_vendors[RW]

Public Class Methods

create(trace_parent: nil, trace_state_payload: nil, trace_state_entries: nil, trace_state_size: 0, trace_state_vendors: nil) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 179
def create(trace_parent: nil,
  trace_state_payload: nil,
  trace_state_entries: nil,
  trace_state_size: 0,
  trace_state_vendors: nil)
  new(trace_parent, \
    trace_state_payload, \
    trace_state_entries, \
    trace_state_size, \
    trace_state_vendors)
end
new(trace_parent, trace_state_payload, trace_state_entries, trace_state_size, trace_state_vendors) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 192
def initialize(trace_parent, trace_state_payload, trace_state_entries, trace_state_size, trace_state_vendors)
  @trace_parent = trace_parent
  @trace_state = nil
  @trace_state_entries = trace_state_entries
  @trace_state_payload = trace_state_payload
  @trace_state_size = trace_state_size
  @trace_state_vendors = trace_state_vendors
end

Public Instance Methods

parent_id() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 214
def parent_id
  @trace_parent[PARENT_ID_KEY]
end
trace_id() click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 210
def trace_id
  @trace_parent[TRACE_ID_KEY]
end
trace_state(trace_state_entry) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 203
def trace_state(trace_state_entry)
  @trace_state ||= join_trace_state(trace_state_entry.size)
  @trace_state_entries = nil

  trace_state_entry = "#{trace_state_entry}#{@trace_state}"
end

Private Instance Methods

join_trace_state(trace_state_entry_size) click to toggle source
# File lib/new_relic/agent/distributed_tracing/trace_context.rb, line 220
def join_trace_state(trace_state_entry_size)
  return @trace_state || NewRelic::EMPTY_STR if @trace_state_entries.nil? || @trace_state_entries.empty?

  max_size = MAX_TRACE_STATE_SIZE - trace_state_entry_size
  return @trace_state_entries.join(COMMA).prepend(COMMA) if @trace_state_size < max_size

  joined_trace_state = +''

  used_size = 0

  @trace_state_entries.each do |entry|
    entry_size = entry.size + 1
    break if used_size + entry_size > max_size
    next if entry_size > MAX_TRACE_STATE_ENTRY_SIZE

    joined_trace_state << COMMA << entry
    used_size += entry_size
  end

  joined_trace_state
end