ddtrace 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -3
- data/Appraisals +1 -0
- data/ddtrace.gemspec +3 -0
- data/docs/GettingStarted.md +31 -8
- data/gemfiles/rails32_postgres_redis.gemfile +1 -0
- data/lib/ddtrace.rb +20 -34
- data/lib/ddtrace/buffer.rb +1 -7
- data/lib/ddtrace/configurable.rb +77 -0
- data/lib/ddtrace/configuration.rb +35 -0
- data/lib/ddtrace/configuration/proxy.rb +29 -0
- data/lib/ddtrace/configuration/resolver.rb +24 -0
- data/lib/ddtrace/context.rb +55 -7
- data/lib/ddtrace/contrib/active_record/patcher.rb +4 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +3 -0
- data/lib/ddtrace/contrib/base.rb +14 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +3 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +3 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +5 -6
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +3 -0
- data/lib/ddtrace/contrib/http/patcher.rb +22 -7
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +21 -35
- data/lib/ddtrace/contrib/rails/action_controller.rb +2 -2
- data/lib/ddtrace/contrib/rails/action_view.rb +2 -2
- data/lib/ddtrace/contrib/rails/active_record.rb +2 -2
- data/lib/ddtrace/contrib/rails/active_support.rb +2 -2
- data/lib/ddtrace/contrib/rails/framework.rb +36 -58
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -1
- data/lib/ddtrace/contrib/rails/patcher.rb +56 -0
- data/lib/ddtrace/contrib/rails/railtie.rb +18 -0
- data/lib/ddtrace/contrib/rails/utils.rb +1 -1
- data/lib/ddtrace/contrib/redis/patcher.rb +4 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
- data/lib/ddtrace/contrib/redis/tags.rb +1 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +9 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +6 -6
- data/lib/ddtrace/contrib/sidekiq/tracer.rb +11 -11
- data/lib/ddtrace/contrib/sinatra/tracer.rb +23 -63
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +3 -0
- data/lib/ddtrace/ext/distributed.rb +2 -0
- data/lib/ddtrace/ext/redis.rb +6 -0
- data/lib/ddtrace/monkey.rb +20 -37
- data/lib/ddtrace/propagation/distributed_headers.rb +48 -0
- data/lib/ddtrace/propagation/http_propagator.rb +28 -0
- data/lib/ddtrace/registry.rb +42 -0
- data/lib/ddtrace/registry/registerable.rb +20 -0
- data/lib/ddtrace/sampler.rb +61 -1
- data/lib/ddtrace/sync_writer.rb +36 -0
- data/lib/ddtrace/tracer.rb +23 -21
- data/lib/ddtrace/transport.rb +52 -15
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers.rb +33 -31
- data/lib/ddtrace/writer.rb +20 -1
- metadata +42 -3
- data/lib/ddtrace/distributed.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b696f89a64327a9095fce4fa8dfe75fd243f3cb
|
4
|
+
data.tar.gz: 38fd90000f89a2379882c0ea73c343f1b8f2fd29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0999d891c779b691db6faf84a85096f6465aac6a612dbdbaf2b6dceaf2c9293efd562b8cdaeb6a8a430fcf49752299adab64f21ec734ceb315df080acae55b7d'
|
7
|
+
data.tar.gz: 51319812e767f73499185daf8bc81f9121fc021aa43eb146ed246fac998aa824da08f2255f55f1535f1992dc87bcfa9645e3f1e56af8961f6f17e95e40ee753b
|
data/.gitignore
CHANGED
@@ -45,9 +45,8 @@ build-iPhoneSimulator/
|
|
45
45
|
|
46
46
|
# for a library or gem, you might want to ignore these files since the code is
|
47
47
|
# intended to run in multiple environments; otherwise, check them in:
|
48
|
-
|
49
|
-
|
50
|
-
# .ruby-gemset
|
48
|
+
.ruby-version
|
49
|
+
.ruby-gemset
|
51
50
|
|
52
51
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
53
52
|
.rvmrc
|
data/Appraisals
CHANGED
data/ddtrace.gemspec
CHANGED
@@ -39,5 +39,8 @@ EOS
|
|
39
39
|
spec.add_development_dependency 'minitest', '= 5.10.1'
|
40
40
|
spec.add_development_dependency 'appraisal', '~> 2.2'
|
41
41
|
spec.add_development_dependency 'yard', '~> 0.9'
|
42
|
+
spec.add_development_dependency 'webmock', '~> 2.0'
|
43
|
+
# locking transitive dependency of webmock
|
44
|
+
spec.add_development_dependency 'addressable', '~> 2.4.0'
|
42
45
|
spec.add_development_dependency 'redcarpet', '~> 3.4' if RUBY_PLATFORM != 'java'
|
43
46
|
end
|
data/docs/GettingStarted.md
CHANGED
@@ -141,6 +141,10 @@ either ``sinatra`` or ``sinatra/base``:
|
|
141
141
|
require 'ddtrace'
|
142
142
|
require 'ddtrace/contrib/sinatra/tracer'
|
143
143
|
|
144
|
+
Datadog.configure do |c|
|
145
|
+
c.use :sinatra, service_name: 'my-app'
|
146
|
+
end
|
147
|
+
|
144
148
|
get '/' do
|
145
149
|
'Hello world!'
|
146
150
|
end
|
@@ -149,18 +153,11 @@ The tracing extension will be automatically activated.
|
|
149
153
|
|
150
154
|
#### Configure the tracer
|
151
155
|
|
152
|
-
To modify the default configuration, use the ``settings.datadog_tracer.configure`` method. For example,
|
153
|
-
to change the default service name and activate the debug mode:
|
154
|
-
|
155
|
-
configure do
|
156
|
-
settings.datadog_tracer.configure default_service: 'my-app', debug: true
|
157
|
-
end
|
158
|
-
|
159
156
|
Available settings are:
|
160
157
|
|
161
158
|
* ``enabled``: define if the ``tracer`` is enabled or not. If set to ``false``, the code is still instrumented
|
162
159
|
but no spans are sent to the local trace agent.
|
163
|
-
* ``
|
160
|
+
* ``service_name``: set the service name used when tracing application requests. Defaults to ``sinatra``
|
164
161
|
* ``tracer``: set the tracer to use. Usually you don't need to change that value
|
165
162
|
unless you're already using a different initialized tracer somewhere else
|
166
163
|
* ``debug``: set to ``true`` to enable debug logging.
|
@@ -719,6 +716,32 @@ overhead.
|
|
719
716
|
sampler = Datadog::RateSampler.new(0.5) # sample 50% of the traces
|
720
717
|
Datadog.tracer.configure(sampler: sampler)
|
721
718
|
|
719
|
+
#### Priority sampling
|
720
|
+
|
721
|
+
Priority sampling consists in deciding if a trace will be kept by using a priority attribute that will be propagated for distributed traces. Its value gives indication to the Agent and to the backend on how important the trace is.
|
722
|
+
|
723
|
+
* 0: Don’t keep the trace.
|
724
|
+
* 1: The sampler automatically decided to keep the trace.
|
725
|
+
* 2: The user asked the keep the trace.
|
726
|
+
|
727
|
+
For now, priority sampling is disabled by default. Enabling it ensures that your sampled distributed traces will be complete. To enable the priority sampling:
|
728
|
+
|
729
|
+
```rb
|
730
|
+
Datadog.tracer.configure(priority_sampling: true)
|
731
|
+
```
|
732
|
+
|
733
|
+
Once enabled, the sampler will automatically assign a priority of 0 or 1 to traces, depending on their service and volume.
|
734
|
+
|
735
|
+
You can also set this priority manually to either drop a non-interesting trace or to keep an important one. For that, set the `context#sampling_priority` to 0 or 2. It has to be done before any context propagation (fork, RPC calls) to be effective:
|
736
|
+
|
737
|
+
```rb
|
738
|
+
# Indicate to not keep the trace
|
739
|
+
span.context.sampling_priority = 0
|
740
|
+
|
741
|
+
# Indicate to keep the trace
|
742
|
+
span.context.sampling_priority = 2
|
743
|
+
```
|
744
|
+
|
722
745
|
### Distributed Tracing
|
723
746
|
|
724
747
|
To trace requests across hosts, the spans on the secondary hosts must be linked together by setting ``trace_id`` and ``parent_id``:
|
data/lib/ddtrace.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
require 'ddtrace/
|
1
|
+
require 'ddtrace/registry'
|
2
2
|
require 'ddtrace/pin'
|
3
3
|
require 'ddtrace/tracer'
|
4
4
|
require 'ddtrace/error'
|
5
5
|
require 'ddtrace/pipeline'
|
6
|
+
require 'ddtrace/configuration'
|
6
7
|
|
7
8
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
8
9
|
module Datadog
|
9
|
-
@tracer =
|
10
|
+
@tracer = Tracer.new
|
11
|
+
@registry = Registry.new
|
10
12
|
|
11
13
|
# Default tracer that can be used as soon as +ddtrace+ is required:
|
12
14
|
#
|
@@ -25,42 +27,26 @@ module Datadog
|
|
25
27
|
def self.tracer
|
26
28
|
@tracer
|
27
29
|
end
|
28
|
-
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if Rails::VERSION::MAJOR.to_i >= 3
|
34
|
-
require 'ddtrace/contrib/rails/framework'
|
35
|
-
require 'ddtrace/contrib/rails/middlewares'
|
31
|
+
def self.registry
|
32
|
+
@registry
|
33
|
+
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
class Railtie < Rails::Railtie
|
40
|
-
# add instrumentation middlewares
|
41
|
-
options = {}
|
42
|
-
config.app_middleware.insert_before(0, Datadog::Contrib::Rack::TraceMiddleware, options)
|
43
|
-
config.app_middleware.use(Datadog::Contrib::Rails::ExceptionMiddleware)
|
35
|
+
class << self
|
36
|
+
attr_writer :configuration
|
44
37
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
Datadog::Contrib::Rails::Framework.configure(config: app.config)
|
49
|
-
Datadog::Contrib::Rails::Framework.auto_instrument()
|
50
|
-
Datadog::Contrib::Rails::Framework.auto_instrument_redis()
|
51
|
-
Datadog::Contrib::Rails::Framework.auto_instrument_grape()
|
38
|
+
def configuration
|
39
|
+
@configuration ||= Configuration.new
|
40
|
+
end
|
52
41
|
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
else
|
59
|
-
Datadog::Tracer.log.warn 'Detected a Rails version < 3.x.'\
|
60
|
-
'This version is not supported yet and the'\
|
61
|
-
'auto-instrumentation for core components will be disabled.'
|
42
|
+
def configure
|
43
|
+
yield(configuration)
|
62
44
|
end
|
63
|
-
else
|
64
|
-
Datadog::Tracer.log.info 'Skipping Rails auto-instrumentation, DISABLE_DATADOG_RAILS is set.'
|
65
45
|
end
|
66
46
|
end
|
47
|
+
|
48
|
+
# Monkey currently is responsible for loading all contributions, which in turn
|
49
|
+
# rely on the registry defined above. We should make our code less dependent on
|
50
|
+
# the load order, by letting things be lazily loaded while keeping
|
51
|
+
# thread-safety.
|
52
|
+
require 'ddtrace/monkey'
|
data/lib/ddtrace/buffer.rb
CHANGED
@@ -16,8 +16,8 @@ module Datadog
|
|
16
16
|
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
17
17
|
# even if the buffer is full. In that case, a random trace is discarded.
|
18
18
|
def push(trace)
|
19
|
-
return if @closed
|
20
19
|
@mutex.synchronize do
|
20
|
+
return if @closed
|
21
21
|
len = @traces.length
|
22
22
|
if len < @max_size || @max_size <= 0
|
23
23
|
@traces << trace
|
@@ -56,11 +56,5 @@ module Datadog
|
|
56
56
|
@closed = true
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
60
|
-
def closed?
|
61
|
-
@mutex.synchronise do
|
62
|
-
return @closed
|
63
|
-
end
|
64
|
-
end
|
65
59
|
end
|
66
60
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Datadog
|
2
|
+
InvalidOptionError = Class.new(StandardError)
|
3
|
+
# Configurable provides configuration methods for a given class/module
|
4
|
+
module Configurable
|
5
|
+
IDENTITY = ->(x) { x }
|
6
|
+
|
7
|
+
def self.included(base)
|
8
|
+
base.singleton_class.send(:include, ClassMethods)
|
9
|
+
end
|
10
|
+
|
11
|
+
# ClassMethods
|
12
|
+
module ClassMethods
|
13
|
+
def set_option(name, value)
|
14
|
+
__assert_valid!(name)
|
15
|
+
|
16
|
+
__options[name][:value] = __options[name][:setter].call(value)
|
17
|
+
__options[name][:set_flag] = true
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_option(name)
|
21
|
+
__assert_valid!(name)
|
22
|
+
|
23
|
+
return __options[name][:default] unless __options[name][:set_flag]
|
24
|
+
|
25
|
+
__options[name][:value]
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_h
|
29
|
+
__options.each_with_object({}) do |(key, _), hash|
|
30
|
+
hash[key] = get_option(key)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def reset_options!
|
35
|
+
__options.each do |name, meta|
|
36
|
+
set_option(name, meta[:default])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def sorted_options
|
41
|
+
Configuration::Resolver.new(__dependency_graph).call
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def option(name, meta = {}, &block)
|
47
|
+
name = name.to_sym
|
48
|
+
meta[:setter] ||= (block || IDENTITY)
|
49
|
+
meta[:depends_on] ||= []
|
50
|
+
__options[name] = meta
|
51
|
+
end
|
52
|
+
|
53
|
+
def __options
|
54
|
+
@__options ||= {}
|
55
|
+
end
|
56
|
+
|
57
|
+
def __assert_valid!(name)
|
58
|
+
return if __options.key?(name)
|
59
|
+
raise(InvalidOptionError, "#{__pretty_name} doesn't have the option: #{name}")
|
60
|
+
end
|
61
|
+
|
62
|
+
def __pretty_name
|
63
|
+
entry = Datadog.registry.find { |el| el.klass == self }
|
64
|
+
|
65
|
+
return entry.name if entry
|
66
|
+
|
67
|
+
to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
def __dependency_graph
|
71
|
+
__options.each_with_object({}) do |(name, meta), graph|
|
72
|
+
graph[name] = meta[:depends_on]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'configuration/proxy'
|
2
|
+
require_relative 'configuration/resolver'
|
3
|
+
|
4
|
+
module Datadog
|
5
|
+
# Configuration provides a unique access point for configurations
|
6
|
+
class Configuration
|
7
|
+
InvalidIntegrationError = Class.new(StandardError)
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
@registry = options.fetch(:registry, Datadog.registry)
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](integration_name)
|
14
|
+
integration = fetch_integration(integration_name)
|
15
|
+
Proxy.new(integration)
|
16
|
+
end
|
17
|
+
|
18
|
+
def use(integration_name, options = {})
|
19
|
+
integration = fetch_integration(integration_name)
|
20
|
+
|
21
|
+
integration.sorted_options.each do |name|
|
22
|
+
integration.set_option(name, options[name]) if options.key?(name)
|
23
|
+
end
|
24
|
+
|
25
|
+
integration.patch if integration.respond_to?(:patch)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def fetch_integration(name)
|
31
|
+
@registry[name] ||
|
32
|
+
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
class Configuration
|
5
|
+
# Proxy provides a hash-like interface for fetching/setting configurations
|
6
|
+
class Proxy
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
def initialize(integration)
|
10
|
+
@integration = integration
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](param)
|
14
|
+
value = @integration.get_option(param)
|
15
|
+
|
16
|
+
return value.call if value.respond_to?(:call)
|
17
|
+
|
18
|
+
value
|
19
|
+
end
|
20
|
+
|
21
|
+
def []=(param, value)
|
22
|
+
@integration.set_option(param, value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def_delegators :@integration, :to_h, :reset_options!
|
26
|
+
def_delegators :to_h, :to_hash, :merge
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'tsort'
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
class Configuration
|
5
|
+
# Resolver performs a topological sort over the dependency graph
|
6
|
+
class Resolver
|
7
|
+
include TSort
|
8
|
+
|
9
|
+
def initialize(dependency_graph = {})
|
10
|
+
@dependency_graph = dependency_graph
|
11
|
+
end
|
12
|
+
|
13
|
+
def tsort_each_node(&blk)
|
14
|
+
@dependency_graph.each_key(&blk)
|
15
|
+
end
|
16
|
+
|
17
|
+
def tsort_each_child(node, &blk)
|
18
|
+
@dependency_graph.fetch(node).each(&blk)
|
19
|
+
end
|
20
|
+
|
21
|
+
alias call tsort
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ddtrace/context.rb
CHANGED
@@ -15,18 +15,45 @@ module Datadog
|
|
15
15
|
# This data structure is thread-safe.
|
16
16
|
class Context
|
17
17
|
# Initialize a new thread-safe \Context.
|
18
|
-
def initialize
|
18
|
+
def initialize(options = {})
|
19
19
|
@mutex = Mutex.new
|
20
|
-
reset
|
20
|
+
reset(options)
|
21
21
|
end
|
22
22
|
|
23
|
-
def reset
|
23
|
+
def reset(options = {})
|
24
24
|
@trace = []
|
25
|
-
@
|
25
|
+
@parent_trace_id = options.fetch(:trace_id, nil)
|
26
|
+
@parent_span_id = options.fetch(:span_id, nil)
|
27
|
+
@sampled = options.fetch(:sampled, false)
|
28
|
+
@sampling_priority = options.fetch(:sampling_priority, nil)
|
26
29
|
@finished_spans = 0
|
27
30
|
@current_span = nil
|
28
31
|
end
|
29
32
|
|
33
|
+
def trace_id
|
34
|
+
@mutex.synchronize do
|
35
|
+
@parent_trace_id
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def span_id
|
40
|
+
@mutex.synchronize do
|
41
|
+
@parent_span_id
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def sampling_priority
|
46
|
+
@mutex.synchronize do
|
47
|
+
@sampling_priority
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def sampling_priority=(priority)
|
52
|
+
@mutex.synchronize do
|
53
|
+
@sampling_priority = priority
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
30
57
|
# Return the last active span that corresponds to the last inserted
|
31
58
|
# item in the trace list. This cannot be considered as the current active
|
32
59
|
# span in asynchronous environments, because some spans can be closed
|
@@ -37,11 +64,21 @@ module Datadog
|
|
37
64
|
end
|
38
65
|
end
|
39
66
|
|
67
|
+
def set_current_span(span)
|
68
|
+
@current_span = span
|
69
|
+
if span
|
70
|
+
@parent_trace_id = span.trace_id
|
71
|
+
@parent_span_id = span.span_id
|
72
|
+
@sampled = span.sampled
|
73
|
+
else
|
74
|
+
@parent_span_id = nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
40
78
|
# Add a span to the context trace list, keeping it as the last active span.
|
41
79
|
def add_span(span)
|
42
80
|
@mutex.synchronize do
|
43
|
-
|
44
|
-
@sampled = span.sampled
|
81
|
+
set_current_span(span)
|
45
82
|
@trace << span
|
46
83
|
span.context = self
|
47
84
|
end
|
@@ -55,7 +92,7 @@ module Datadog
|
|
55
92
|
# Current span is only meaningful for linear tree-like traces,
|
56
93
|
# in other cases, this is just broken and one should rely
|
57
94
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
58
|
-
|
95
|
+
set_current_span(span.parent)
|
59
96
|
return if span.tracer.nil?
|
60
97
|
return unless Datadog::Tracer.debug_logging
|
61
98
|
if span.parent.nil? && !check_finished_spans
|
@@ -102,6 +139,8 @@ module Datadog
|
|
102
139
|
|
103
140
|
trace = @trace
|
104
141
|
sampled = @sampled
|
142
|
+
attach_sampling_priority if sampled && @sampling_priority
|
143
|
+
|
105
144
|
reset
|
106
145
|
return trace, sampled
|
107
146
|
end
|
@@ -115,8 +154,17 @@ module Datadog
|
|
115
154
|
end
|
116
155
|
end
|
117
156
|
|
157
|
+
def attach_sampling_priority
|
158
|
+
@trace.first.set_metric(
|
159
|
+
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
160
|
+
@sampling_priority
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
118
164
|
private :reset
|
119
165
|
private :check_finished_spans
|
166
|
+
private :set_current_span
|
167
|
+
private :attach_sampling_priority
|
120
168
|
end
|
121
169
|
|
122
170
|
# ThreadLocalContext can be used as a tracer global reference to create
|