Class: Zipkin::Tracer

Inherits:
Object
  • Object
show all
Defined in:
lib/zipkin/tracer.rb

Constant Summary collapse

DEFAULT_FLUSH_INTERVAL =
10

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(collector, sender) ⇒ Tracer



26
27
28
29
# File 'lib/zipkin/tracer.rb', line 26

def initialize(collector, sender)
  @collector = collector
  @sender = sender
end

Class Method Details

.build(url:, service_name:, flush_interval: DEFAULT_FLUSH_INTERVAL) ⇒ Object



15
16
17
18
19
20
21
22
23
24
# File 'lib/zipkin/tracer.rb', line 15

def self.build(url:, service_name:, flush_interval: DEFAULT_FLUSH_INTERVAL)
  collector = Collector.new(Endpoint.local_endpoint(service_name))
  sender = JsonClient.new(
    url: url,
    collector: collector,
    flush_interval: flush_interval
  )
  sender.start
  new(collector, sender)
end

Instance Method Details

#extract(format, carrier) ⇒ SpanContext

Extract a SpanContext in the given format from the given carrier.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/zipkin/tracer.rb', line 86

def extract(format, carrier)
  case format
  when OpenTracing::FORMAT_TEXT_MAP
    trace_id = carrier['x-b3-traceid']
    parent_id = carrier['x-b3-parentspanid']
    span_id = carrier['x-b3-spanid']
    sampled = carrier['x-b3-sampled'] == '1'

    create_span_context(trace_id, span_id, parent_id, sampled)
  when OpenTracing::FORMAT_RACK
    trace_id = carrier['HTTP_X_B3_TRACEID']
    parent_id = carrier['HTTP_X_B3_PARENTSPANID']
    span_id = carrier['HTTP_X_B3_SPANID']
    sampled = carrier['HTTP_X_B3_SAMPLED'] == '1'

    create_span_context(trace_id, span_id, parent_id, sampled)
  else
    STDERR.puts "Logasm::Tracer with format #{format} is not supported yet"
    nil
  end
end

#inject(span_context, format, carrier) ⇒ Object

Inject a SpanContext into the given carrier



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/zipkin/tracer.rb', line 64

def inject(span_context, format, carrier)
  case format
  when OpenTracing::FORMAT_TEXT_MAP
    carrier['x-b3-traceid'] = span_context.trace_id
    carrier['x-b3-parentspanid'] = span_context.parent_id
    carrier['x-b3-spanid'] = span_context.span_id
    carrier['x-b3-sampled'] = span_context.sampled? ? '1' : '0'
  when OpenTracing::FORMAT_RACK
    carrier['X-B3-TraceId'] = span_context.trace_id
    carrier['X-B3-ParentSpanId'] = span_context.parent_id
    carrier['X-B3-SpanId'] = span_context.span_id
    carrier['X-B3-Sampled'] = span_context.sampled? ? '1' : '0'
  else
    STDERR.puts "Logasm::Tracer with format #{format} is not supported yet"
  end
end

#start_span(operation_name, child_of: nil, start_time: Time.now, tags: {}) ⇒ Span

Starts a new span.



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/zipkin/tracer.rb', line 45

def start_span(operation_name, child_of: nil, start_time: Time.now, 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.new(context, operation_name, @collector, {
    start_time: start_time,
    tags: tags
  })
end

#stopObject



31
32
33
# File 'lib/zipkin/tracer.rb', line 31

def stop
  @sender.stop
end