Class: Zipkin::Tracer
- Inherits:
-
Object
- Object
- Zipkin::Tracer
- Defined in:
- lib/zipkin/tracer.rb
Constant Summary collapse
- DEFAULT_FLUSH_INTERVAL =
10
Instance Attribute Summary collapse
-
#scope_manager ⇒ ScopeManager
readonly
The current ScopeManager, which may be a no-op but may not be nil.
Class Method Summary collapse
Instance Method Summary collapse
-
#active_span ⇒ Span?
The active span.
-
#extract(format, carrier) ⇒ SpanContext
Extract a SpanContext in the given format from the given carrier.
-
#initialize(reporter, sender, logger: Logger.new(STDOUT), sampler:) ⇒ Tracer
constructor
A new instance of Tracer.
-
#inject(span_context, format, carrier) ⇒ Object
Inject a SpanContext into the given carrier.
-
#start_active_span(operation_name, child_of: nil, references: nil, start_time: Time.now, tags: nil, ignore_active_scope: false, finish_on_close: true) {|Scope| ... } ⇒ Scope
Creates a newly started and activated Scope.
-
#start_span(operation_name, child_of: nil, start_time: Time.now, tags: nil, references: nil, ignore_active_scope: false) ⇒ Span
Starts a new span.
Constructor Details
#initialize(reporter, sender, logger: Logger.new(STDOUT), sampler:) ⇒ Tracer
Returns a new instance of Tracer.
34 35 36 37 38 39 40 |
# File 'lib/zipkin/tracer.rb', line 34 def initialize(reporter, sender, logger: Logger.new(STDOUT), sampler:) @reporter = reporter @sender = sender @logger = logger @scope_manager = ScopeManager.new @sampler = sampler end |
Instance Attribute Details
#scope_manager ⇒ ScopeManager (readonly)
Returns the current ScopeManager, which may be a no-op but may not be nil.
44 45 46 |
# File 'lib/zipkin/tracer.rb', line 44 def scope_manager @scope_manager end |
Class Method Details
.build(url:, service_name:, flush_interval: DEFAULT_FLUSH_INTERVAL, logger: Logger.new(STDOUT), sampler: Samplers::Const.new(true), encoder: Encoders::JsonEncoder) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/zipkin/tracer.rb', line 22 def self.build(url:, service_name:, flush_interval: DEFAULT_FLUSH_INTERVAL, logger: Logger.new(STDOUT), sampler: Samplers::Const.new(true), encoder: Encoders::JsonEncoder) encoder = encoder.new(Endpoint.local_endpoint(service_name)) sender = HTTPClient.new(url: url, encoder: encoder, logger: logger) reporter = AsyncReporter.create(sender: sender, flush_interval: flush_interval) new(reporter, sender, logger: logger, sampler: sampler) end |
Instance Method Details
#active_span ⇒ Span?
Returns the active span. This is a shorthand for ‘scope_manager.active.span`, and nil will be returned if Scope#active is nil.
49 50 51 52 |
# File 'lib/zipkin/tracer.rb', line 49 def active_span scope = scope_manager.active scope.span if scope end |
#extract(format, carrier) ⇒ SpanContext
Extract a SpanContext in the given format from the given carrier.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/zipkin/tracer.rb', line 178 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 @logger.error "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
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/zipkin/tracer.rb', line 156 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 @logger.error "Logasm::Tracer with format #{format} is not supported yet" end end |
#start_active_span(operation_name, child_of: nil, references: nil, start_time: Time.now, tags: nil, ignore_active_scope: false, finish_on_close: true) {|Scope| ... } ⇒ Scope
Creates a newly started and activated Scope
If the Tracer’s ScopeManager#active is not nil, no explicit references are provided, and ‘ignore_active_scope` is false, then an inferred References#CHILD_OF reference is created to the ScopeManager#active’s SpanContext when start_active is invoked.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/zipkin/tracer.rb', line 122 def start_active_span(operation_name, child_of: nil, references: nil, start_time: Time.now, tags: nil, ignore_active_scope: false, finish_on_close: true, **) span = start_span( operation_name, child_of: child_of, references: references, start_time: start_time, tags: , ignore_active_scope: ignore_active_scope ) scope = @scope_manager.activate(span, finish_on_close: finish_on_close) if block_given? begin yield scope ensure scope.close end end scope end |
#start_span(operation_name, child_of: nil, start_time: Time.now, tags: nil, references: nil, ignore_active_scope: false) ⇒ Span
Starts a new span
This is similar to #start_active_span, but the returned Span will not be registered via the ScopeManager.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/zipkin/tracer.rb', line 74 def start_span(operation_name, child_of: nil, start_time: Time.now, tags: nil, references: nil, ignore_active_scope: false, **) context = prepare_span_context( child_of: child_of, references: references, ignore_active_scope: ignore_active_scope ) Span.new( context, operation_name, @reporter, start_time: start_time, references: references, tags: || {} ) end |