-
Notifications
You must be signed in to change notification settings - Fork 13
/
scope_manager.rb
47 lines (43 loc) · 1.52 KB
/
scope_manager.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# frozen_string_literal: true
require_relative 'scope_manager/scope_stack'
require_relative 'scope_manager/scope_identifier'
module Zipkin
# ScopeManager represents an OpenTracing ScopeManager
#
# See http://www.opentracing.io for more information.
#
# The ScopeManager interface abstracts both the activation of Span instances
# via ScopeManager#activate and access to an active Span/Scope via
# ScopeManager#active
#
class ScopeManager
def initialize
@scope_stack = ScopeStack.new
end
# Make a span instance active
#
# @param span [Span] the Span that should become active
# @param finish_on_close [Boolean] whether the Span should automatically be
# finished when Scope#close is called
# @return [Scope] instance to control the end of the active period for the
# Span. It is a programming error to neglect to call Scope#close on the
# returned instance.
def activate(span, finish_on_close: true)
return active if active && active.span == span
scope = Scope.new(span, @scope_stack, finish_on_close: finish_on_close)
@scope_stack.push(scope)
scope
end
# Return active scope
#
# If there is a non-null Scope, its wrapped Span becomes an implicit parent
# (as Reference#CHILD_OF) of any newly-created Span at
# Tracer#start_active_span or Tracer#start_span time.
#
# @return [Scope] the currently active Scope which can be used to access the
# currently active Span.
def active
@scope_stack.peek
end
end
end