class AppPerfRpm::Tracing::Tracer
Attributes
collector[R]
thread_span_stack[R]
Public Class Methods
build(opts = {})
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 8 def self.build(opts = {}) opts[:collector] ||= nil opts[:sender] ||= nil opts[:service_name] ||= nil opts[:sender].start new(opts[:collector], opts[:sender]) end
new(collector, sender)
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 18 def initialize(collector, sender) @collector = collector @sender = sender end
Public Instance Methods
extract(format, carrier)
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 63 def extract(format, carrier) case format when OpenTracing::FORMAT_TEXT_MAP trace_id = carrier['trace-id'] parent_id = carrier['parent-id'] span_id = carrier['span-id'] sampled = carrier['sampled'] == '1' create_span_context(trace_id, span_id, parent_id, sampled) when OpenTracing::FORMAT_RACK trace_id = carrier['HTTP_X_APPPERF_TRACEID'] parent_id = carrier['HTTP_X_APPPERF_PARENTSPANID'] span_id = carrier['HTTP_X_APPPERF_SPANID'] sampled = carrier['HTTP_X_APPPERF_SAMPLED'] == '1' create_span_context(trace_id, span_id, parent_id, sampled) else STDERR.puts "AppPerfRpm::Tracer with format #{format} is not supported yet" nil end end
inject(span_context, format, carrier)
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 46 def inject(span_context, format, carrier) case format when OpenTracing::FORMAT_TEXT_MAP carrier['trace-id'] = span_context.trace_id carrier['parent-id'] = span_context.parent_id carrier['span-id'] = span_context.span_id carrier['sampled'] = span_context.sampled? ? '1' : '0' when OpenTracing::FORMAT_RACK carrier['X-AppPerf-TraceId'] = span_context.trace_id carrier['X-AppPerf-ParentSpanId'] = span_context.parent_id carrier['X-AppPerf-SpanId'] = span_context.span_id carrier['X-AppPerf-Sampled'] = span_context.sampled? ? '1' : '0' else STDERR.puts "AppPerfRpm::Tracer with format #{format} is not supported yet" end end
start_span(operation_name, opts = {}, *)
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 27 def start_span(operation_name, opts = {}, *) child_of = opts[:child_of] || nil opts[:start_time] ||= AppPerfRpm.now opts[:tags] ||= {} context = if child_of parent_context = child_of.respond_to?(:context) ? child_of.context : child_of SpanContext.create_from_parent_context(parent_context) else SpanContext.create_parent_context end span = Span.new(context, operation_name, @collector, { start_time: opts[:start_time], tags: opts[:tags] }) end
stop()
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 23 def stop @sender.stop end
Private Instance Methods
create_span_context(trace_id, span_id, parent_id, sampled)
click to toggle source
# File lib/app_perf_rpm/tracing/tracer.rb, line 86 def create_span_context(trace_id, span_id, parent_id, sampled) if trace_id && span_id SpanContext.new( trace_id: trace_id, parent_id: parent_id, span_id: span_id, sampled: sampled ) else nil end end