class Atatus::TraceContext
@api private
Attributes
traceparent[RW]
tracestate[RW]
Public Class Methods
new( traceparent: nil, tracestate: nil, **legacy_traceparent_attrs )
click to toggle source
# File lib/atatus/trace_context.rb, line 30 def initialize( traceparent: nil, tracestate: nil, **legacy_traceparent_attrs ) @traceparent = traceparent || Traceparent.new(**legacy_traceparent_attrs) @tracestate = tracestate || Tracestate.new end
parse(legacy_header = nil, env: nil, metadata: nil)
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
# File lib/atatus/trace_context.rb, line 46 def parse(legacy_header = nil, env: nil, metadata: nil) unless legacy_header || env || metadata raise ArgumentError, 'TraceContext expects env:, metadata: ' \ 'or single argument header string' end if legacy_header legacy_parse_from_header(legacy_header) elsif env trace_context_from_env(env) elsif metadata trace_context_from_metadata(metadata) end end
Private Class Methods
legacy_parse_from_header(header)
click to toggle source
# File lib/atatus/trace_context.rb, line 94 def legacy_parse_from_header(header) parent = Traceparent.parse(header) new(traceparent: parent) end
trace_context_from_env(env)
click to toggle source
rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
# File lib/atatus/trace_context.rb, line 64 def trace_context_from_env(env) return unless ( header = env['HTTP_ATATUS_TRACEPARENT'] || env['HTTP_TRACEPARENT'] ) parent = TraceContext::Traceparent.parse(header) state = if (header = env['HTTP_TRACESTATE']) TraceContext::Tracestate.parse(header) end new(traceparent: parent, tracestate: state) end
trace_context_from_metadata(metadata)
click to toggle source
# File lib/atatus/trace_context.rb, line 80 def trace_context_from_metadata(metadata) return unless (header = metadata['atatus-traceparent'] || metadata['traceparent']) parent = TraceContext::Traceparent.parse(header) state = if (header = metadata['tracestate']) TraceContext::Tracestate.parse(header) end new(traceparent: parent, tracestate: state) end
Public Instance Methods
apply_headers() { |'Traceparent', to_header| ... }
click to toggle source
# File lib/atatus/trace_context.rb, line 106 def apply_headers yield 'Traceparent', traceparent.to_header if tracestate yield 'Tracestate', tracestate.to_header end return unless Atatus.agent.config.use_atatus_traceparent_header yield 'Atatus-Traceparent', traceparent.to_header end
child()
click to toggle source
# File lib/atatus/trace_context.rb, line 100 def child dup.tap do |tc| tc.traceparent = tc.traceparent.child end end