ddtrace 0.34.2 → 0.35.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 +5 -5
- data/.circleci/config.yml +58 -9
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
- data/Appraisals +1 -1
- data/CHANGELOG.md +33 -1
- data/Rakefile +1 -1
- data/ddtrace.gemspec +5 -3
- data/docs/DevelopmentGuide.md +1 -1
- data/docs/GettingStarted.md +89 -36
- data/lib/ddtrace.rb +1 -1
- data/lib/ddtrace/buffer.rb +9 -9
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +28 -5
- data/lib/ddtrace/configuration/components.rb +154 -0
- data/lib/ddtrace/configuration/settings.rb +131 -63
- data/lib/ddtrace/context.rb +6 -6
- data/lib/ddtrace/context_flush.rb +1 -1
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -1
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -1
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -1
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +2 -2
- data/lib/ddtrace/contrib/action_view/patcher.rb +1 -1
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -1
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/ddtrace/contrib/analytics.rb +1 -1
- data/lib/ddtrace/contrib/dalli/patcher.rb +1 -1
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -1
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -1
- data/lib/ddtrace/contrib/excon/middleware.rb +2 -2
- data/lib/ddtrace/contrib/faraday/patcher.rb +1 -1
- data/lib/ddtrace/contrib/grape/endpoint.rb +5 -5
- data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +2 -2
- data/lib/ddtrace/contrib/grpc/patcher.rb +1 -1
- data/lib/ddtrace/contrib/http/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -2
- data/lib/ddtrace/contrib/patchable.rb +1 -1
- data/lib/ddtrace/contrib/patcher.rb +3 -3
- data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -3
- data/lib/ddtrace/contrib/presto/patcher.rb +1 -1
- data/lib/ddtrace/contrib/rack/middlewares.rb +2 -2
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -2
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -1
- data/lib/ddtrace/contrib/rake/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
- data/lib/ddtrace/contrib/resque/resque_job.rb +2 -2
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/env.rb +20 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +6 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +98 -35
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +16 -13
- data/lib/ddtrace/correlation.rb +9 -6
- data/lib/ddtrace/diagnostics/health.rb +2 -6
- data/lib/ddtrace/encoding.rb +13 -39
- data/lib/ddtrace/event.rb +1 -1
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +2 -0
- data/lib/ddtrace/ext/environment.rb +1 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -1
- data/lib/ddtrace/logger.rb +3 -44
- data/lib/ddtrace/metrics.rb +5 -5
- data/lib/ddtrace/monkey.rb +1 -1
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
- data/lib/ddtrace/pin.rb +1 -1
- data/lib/ddtrace/pipeline.rb +1 -1
- data/lib/ddtrace/propagation/http_propagator.rb +2 -2
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +1 -1
- data/lib/ddtrace/runtime/metrics.rb +5 -2
- data/lib/ddtrace/sampler.rb +2 -2
- data/lib/ddtrace/sampling/rule.rb +1 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +1 -1
- data/lib/ddtrace/span.rb +4 -4
- data/lib/ddtrace/sync_writer.rb +3 -8
- data/lib/ddtrace/tracer.rb +26 -31
- data/lib/ddtrace/transport/http.rb +1 -1
- data/lib/ddtrace/transport/http/api/instance.rb +4 -0
- data/lib/ddtrace/transport/http/builder.rb +3 -5
- data/lib/ddtrace/transport/http/client.rb +7 -64
- data/lib/ddtrace/transport/http/response.rb +1 -1
- data/lib/ddtrace/transport/http/statistics.rb +1 -1
- data/lib/ddtrace/transport/http/traces.rb +10 -7
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/io/client.rb +2 -2
- data/lib/ddtrace/transport/io/response.rb +3 -1
- data/lib/ddtrace/transport/io/traces.rb +50 -3
- data/lib/ddtrace/transport/parcel.rb +0 -4
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/traces.rb +160 -10
- data/lib/ddtrace/utils.rb +1 -1
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers.rb +5 -13
- data/lib/ddtrace/workers/async.rb +2 -2
- data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
- data/lib/ddtrace/workers/trace_writer.rb +199 -0
- data/lib/ddtrace/writer.rb +20 -27
- metadata +22 -32
data/lib/ddtrace/event.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Datadog
|
|
|
41
41
|
begin
|
|
42
42
|
block.call(*args)
|
|
43
43
|
rescue StandardError => e
|
|
44
|
-
Datadog
|
|
44
|
+
Datadog.logger.debug("Error while handling '#{key}' for '#{name}' event: #{e.message}")
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -23,6 +23,8 @@ module Datadog
|
|
|
23
23
|
METRIC_QUEUE_SPANS = 'datadog.tracer.queue.spans'.freeze
|
|
24
24
|
METRIC_SAMPLING_SERVICE_CACHE_LENGTH = 'datadog.tracer.sampling.service_cache_length'.freeze
|
|
25
25
|
METRIC_TRACES_FILTERED = 'datadog.tracer.traces.filtered'.freeze
|
|
26
|
+
METRIC_TRANSPORT_CHUNKED = 'datadog.tracer.transport.chunked'.freeze
|
|
27
|
+
METRIC_TRANSPORT_TRACE_TOO_LARGE = 'datadog.tracer.transport.trace_too_large'.freeze
|
|
26
28
|
METRIC_WRITER_CPU_TIME = 'datadog.tracer.writer.cpu_time'.freeze
|
|
27
29
|
end
|
|
28
30
|
end
|
|
@@ -12,7 +12,7 @@ module Datadog
|
|
|
12
12
|
|
|
13
13
|
# Only log each deprecation warning once (safeguard against log spam)
|
|
14
14
|
unless @deprecation_warning_shown
|
|
15
|
-
Datadog
|
|
15
|
+
Datadog.logger.warn(
|
|
16
16
|
'forced tracing: Datadog::Ext::ForcedTracing has been renamed to Datadog::Ext::ManualTracing'
|
|
17
17
|
)
|
|
18
18
|
@deprecation_warning_shown = true
|
data/lib/ddtrace/logger.rb
CHANGED
|
@@ -1,57 +1,16 @@
|
|
|
1
1
|
require 'logger'
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
|
-
LOG_PREFIX = 'ddtrace'.freeze
|
|
5
|
-
|
|
6
4
|
# A custom logger with minor enhancements:
|
|
7
5
|
# - progname defaults to ddtrace to clearly identify Datadog dd-trace-rb related messages
|
|
8
6
|
# - adds last caller stack-trace info to know where the message comes from
|
|
9
7
|
class Logger < ::Logger
|
|
10
|
-
|
|
11
|
-
# namespace. This logger outputs to +STDOUT+ by default, and is considered thread-safe.
|
|
12
|
-
class << self
|
|
13
|
-
def log
|
|
14
|
-
unless defined? @logger
|
|
15
|
-
@logger = Datadog::Logger.new(STDOUT)
|
|
16
|
-
@logger.level = Logger::WARN
|
|
17
|
-
end
|
|
18
|
-
@logger
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Override the default logger with a custom one.
|
|
22
|
-
def log=(logger)
|
|
23
|
-
return unless logger
|
|
24
|
-
return unless logger.respond_to? :methods
|
|
25
|
-
return unless logger.respond_to? :error
|
|
26
|
-
if logger.respond_to? :methods
|
|
27
|
-
unimplemented = new(STDOUT).methods - logger.methods
|
|
28
|
-
unless unimplemented.empty?
|
|
29
|
-
logger.error("logger #{logger} does not implement #{unimplemented}")
|
|
30
|
-
return
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
@logger = logger
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Activate the debug mode providing more information related to tracer usage
|
|
37
|
-
# Default to Warn level unless using custom logger
|
|
38
|
-
def debug_logging=(value)
|
|
39
|
-
if value
|
|
40
|
-
log.level = Logger::DEBUG
|
|
41
|
-
elsif log.is_a?(Datadog::Logger)
|
|
42
|
-
log.level = Logger::WARN
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Return if the debug mode is activated or not
|
|
47
|
-
def debug_logging
|
|
48
|
-
log.level == Logger::DEBUG
|
|
49
|
-
end
|
|
50
|
-
end
|
|
8
|
+
PREFIX = 'ddtrace'.freeze
|
|
51
9
|
|
|
52
10
|
def initialize(*args, &block)
|
|
53
11
|
super
|
|
54
|
-
self.progname =
|
|
12
|
+
self.progname = PREFIX
|
|
13
|
+
self.level = ::Logger::WARN
|
|
55
14
|
end
|
|
56
15
|
|
|
57
16
|
def add(severity, message = nil, progname = nil, &block)
|
data/lib/ddtrace/metrics.rb
CHANGED
|
@@ -63,7 +63,7 @@ module Datadog
|
|
|
63
63
|
|
|
64
64
|
statsd.count(stat, value, metric_options(options))
|
|
65
65
|
rescue StandardError => e
|
|
66
|
-
Datadog
|
|
66
|
+
Datadog.logger.error("Failed to send count stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def distribution(stat, value = nil, options = nil, &block)
|
|
@@ -73,7 +73,7 @@ module Datadog
|
|
|
73
73
|
|
|
74
74
|
statsd.distribution(stat, value, metric_options(options))
|
|
75
75
|
rescue StandardError => e
|
|
76
|
-
Datadog
|
|
76
|
+
Datadog.logger.error("Failed to send distribution stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
def increment(stat, options = nil)
|
|
@@ -82,7 +82,7 @@ module Datadog
|
|
|
82
82
|
|
|
83
83
|
statsd.increment(stat, metric_options(options))
|
|
84
84
|
rescue StandardError => e
|
|
85
|
-
Datadog
|
|
85
|
+
Datadog.logger.error("Failed to send increment stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def gauge(stat, value = nil, options = nil, &block)
|
|
@@ -92,7 +92,7 @@ module Datadog
|
|
|
92
92
|
|
|
93
93
|
statsd.gauge(stat, value, metric_options(options))
|
|
94
94
|
rescue StandardError => e
|
|
95
|
-
Datadog
|
|
95
|
+
Datadog.logger.error("Failed to send gauge stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
def time(stat, options = nil)
|
|
@@ -108,7 +108,7 @@ module Datadog
|
|
|
108
108
|
distribution(stat, ((finished - start) * 1000), options)
|
|
109
109
|
end
|
|
110
110
|
rescue StandardError => e
|
|
111
|
-
Datadog
|
|
111
|
+
Datadog.logger.error("Failed to send time stat. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
data/lib/ddtrace/monkey.rb
CHANGED
data/lib/ddtrace/pin.rb
CHANGED
|
@@ -107,7 +107,7 @@ module Datadog
|
|
|
107
107
|
def log_deprecation_warning(method_name)
|
|
108
108
|
# Only log each deprecation warning once (safeguard against log spam)
|
|
109
109
|
do_once(method_name) do
|
|
110
|
-
Datadog
|
|
110
|
+
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
111
111
|
end
|
|
112
112
|
end
|
|
113
113
|
end
|
data/lib/ddtrace/pipeline.rb
CHANGED
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
def self.inject!(context, env)
|
|
20
20
|
# Prevent propagation from being attempted if context provided is nil.
|
|
21
21
|
if context.nil?
|
|
22
|
-
::Datadog
|
|
22
|
+
::Datadog.logger.debug('Cannot inject context into env to propagate over HTTP: context is nil.'.freeze)
|
|
23
23
|
return
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -58,7 +58,7 @@ module Datadog
|
|
|
58
58
|
# Return an empty/new context if we have a mismatch in values extracted
|
|
59
59
|
msg = "#{context.trace_id} != #{extracted_context.trace_id} && " \
|
|
60
60
|
"#{context.span_id} != #{extracted_context.span_id}"
|
|
61
|
-
::Datadog
|
|
61
|
+
::Datadog.logger.debug("Cannot extract context from HTTP: extracted contexts differ, #{msg}".freeze)
|
|
62
62
|
# DEV: This will return from `self.extract` not this `each` block
|
|
63
63
|
return ::Datadog::Context.new
|
|
64
64
|
end
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
rescue StandardError => e
|
|
30
|
-
Datadog
|
|
30
|
+
Datadog.logger.error("Error while parsing cgroup. Cause: #{e.message} Location: #{e.backtrace.first}")
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -14,8 +14,9 @@ module Datadog
|
|
|
14
14
|
super
|
|
15
15
|
|
|
16
16
|
# Initialize service list
|
|
17
|
-
@services = Set.new
|
|
17
|
+
@services = Set.new(options.fetch(:services, []))
|
|
18
18
|
@service_tags = nil
|
|
19
|
+
compile_service_tags!
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def associate_with_span(span)
|
|
@@ -55,6 +56,8 @@ module Datadog
|
|
|
55
56
|
def gc_metrics
|
|
56
57
|
Hash[
|
|
57
58
|
GC.stat.map do |k, v|
|
|
59
|
+
next if v.is_a?(Hash) # TODO: JRuby supports additional nested metrics
|
|
60
|
+
|
|
58
61
|
["#{Ext::Runtime::Metrics::METRIC_GC_PREFIX}.#{k}", v]
|
|
59
62
|
end
|
|
60
63
|
]
|
|
@@ -63,7 +66,7 @@ module Datadog
|
|
|
63
66
|
def try_flush
|
|
64
67
|
yield
|
|
65
68
|
rescue StandardError => e
|
|
66
|
-
Datadog
|
|
69
|
+
Datadog.logger.error("Error while sending runtime metric. Cause: #{e.message}")
|
|
67
70
|
end
|
|
68
71
|
|
|
69
72
|
def default_metric_options
|
data/lib/ddtrace/sampler.rb
CHANGED
|
@@ -48,7 +48,7 @@ module Datadog
|
|
|
48
48
|
# sampled.
|
|
49
49
|
def initialize(sample_rate = 1.0)
|
|
50
50
|
unless sample_rate > 0.0 && sample_rate <= 1.0
|
|
51
|
-
Datadog
|
|
51
|
+
Datadog.logger.error('sample rate is not between 0 and 1, disabling the sampler')
|
|
52
52
|
sample_rate = 1.0
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -176,7 +176,7 @@ module Datadog
|
|
|
176
176
|
update_all(rate_by_service)
|
|
177
177
|
|
|
178
178
|
# Emit metric for service cache size
|
|
179
|
-
|
|
179
|
+
Datadog.health_metrics.sampling_service_cache_length(length)
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
private
|
|
@@ -28,7 +28,7 @@ module Datadog
|
|
|
28
28
|
def match?(span)
|
|
29
29
|
@matcher.match?(span)
|
|
30
30
|
rescue => e
|
|
31
|
-
Datadog
|
|
31
|
+
Datadog.logger.error("Matcher failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
32
32
|
nil
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -109,7 +109,7 @@ module Datadog
|
|
|
109
109
|
set_limiter_metrics(span, rate_limiter.effective_rate)
|
|
110
110
|
end
|
|
111
111
|
rescue StandardError => e
|
|
112
|
-
Datadog
|
|
112
|
+
Datadog.logger.error("Rule sampling failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
113
113
|
yield(span)
|
|
114
114
|
end
|
|
115
115
|
|
data/lib/ddtrace/span.rb
CHANGED
|
@@ -104,7 +104,7 @@ module Datadog
|
|
|
104
104
|
@meta[key] = value.to_s
|
|
105
105
|
end
|
|
106
106
|
rescue StandardError => e
|
|
107
|
-
Datadog
|
|
107
|
+
Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
# This method removes a tag for the given key.
|
|
@@ -127,7 +127,7 @@ module Datadog
|
|
|
127
127
|
value = Float(value)
|
|
128
128
|
@metrics[key] = value
|
|
129
129
|
rescue StandardError => e
|
|
130
|
-
Datadog
|
|
130
|
+
Datadog.logger.debug("Unable to set the metric #{key}, ignoring it. Caused by: #{e}")
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
# This method removes a metric for the given key. It acts like {#remove_tag}.
|
|
@@ -179,8 +179,8 @@ module Datadog
|
|
|
179
179
|
@context.close_span(self)
|
|
180
180
|
@tracer.record(self)
|
|
181
181
|
rescue StandardError => e
|
|
182
|
-
Datadog
|
|
183
|
-
|
|
182
|
+
Datadog.logger.debug("error recording finished trace: #{e}")
|
|
183
|
+
Datadog.health_metrics.error_span_finish(1, tags: ["error:#{e.class.name}"])
|
|
184
184
|
end
|
|
185
185
|
self
|
|
186
186
|
end
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -4,10 +4,10 @@ require 'ddtrace/runtime/metrics'
|
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
# SyncWriter flushes both services and traces synchronously
|
|
7
|
+
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
7
8
|
class SyncWriter
|
|
8
9
|
attr_reader \
|
|
9
10
|
:priority_sampler,
|
|
10
|
-
:runtime_metrics,
|
|
11
11
|
:transport
|
|
12
12
|
|
|
13
13
|
def initialize(options = {})
|
|
@@ -16,18 +16,13 @@ module Datadog
|
|
|
16
16
|
Transport::HTTP.default(transport_options)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
# Runtime metrics
|
|
20
|
-
@runtime_metrics = options.fetch(:runtime_metrics) do
|
|
21
|
-
Runtime::Metrics.new
|
|
22
|
-
end
|
|
23
|
-
|
|
24
19
|
@priority_sampler = options.fetch(:priority_sampler, nil)
|
|
25
20
|
end
|
|
26
21
|
|
|
27
22
|
def write(trace, services = nil)
|
|
28
23
|
unless services.nil?
|
|
29
24
|
Datadog::Patcher.do_once('SyncWriter#write') do
|
|
30
|
-
Datadog
|
|
25
|
+
Datadog.logger.warn(%(
|
|
31
26
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
32
27
|
write(traces, services) can be updted to write(traces)
|
|
33
28
|
))
|
|
@@ -38,7 +33,7 @@ module Datadog
|
|
|
38
33
|
proc { flush_trace(trace) }
|
|
39
34
|
)
|
|
40
35
|
rescue => e
|
|
41
|
-
|
|
36
|
+
Datadog.logger.debug(e)
|
|
42
37
|
end
|
|
43
38
|
|
|
44
39
|
# Added for interface completeness
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -30,7 +30,7 @@ module Datadog
|
|
|
30
30
|
def services
|
|
31
31
|
# Only log each deprecation warning once (safeguard against log spam)
|
|
32
32
|
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
33
|
-
Datadog
|
|
33
|
+
Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
{}
|
|
@@ -70,22 +70,23 @@ module Datadog
|
|
|
70
70
|
# * +enabled+: set if the tracer submits or not spans to the local agent. It's enabled
|
|
71
71
|
# by default.
|
|
72
72
|
def initialize(options = {})
|
|
73
|
-
|
|
74
|
-
@writer = options.fetch(:writer, Datadog::Writer.new)
|
|
75
|
-
@sampler = options.fetch(:sampler, Datadog::AllSampler.new)
|
|
76
|
-
|
|
77
|
-
@provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
|
|
78
|
-
@provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
|
|
79
|
-
|
|
73
|
+
# Configurable options
|
|
80
74
|
@context_flush = if options[:partial_flush]
|
|
81
75
|
Datadog::ContextFlush::Partial.new(options)
|
|
82
76
|
else
|
|
83
77
|
Datadog::ContextFlush::Finished.new
|
|
84
78
|
end
|
|
85
79
|
|
|
80
|
+
@default_service = options[:default_service]
|
|
81
|
+
@enabled = options.fetch(:enabled, true)
|
|
82
|
+
@provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
|
|
83
|
+
@sampler = options.fetch(:sampler, Datadog::AllSampler.new)
|
|
84
|
+
@tags = options.fetch(:tags, {})
|
|
85
|
+
@writer = options.fetch(:writer, Datadog::Writer.new)
|
|
86
|
+
|
|
87
|
+
# Instance variables
|
|
86
88
|
@mutex = Mutex.new
|
|
87
|
-
@
|
|
88
|
-
@default_service = options.fetch(:default_service, Datadog.configuration.service)
|
|
89
|
+
@provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
|
|
89
90
|
|
|
90
91
|
# Enable priority sampling by default
|
|
91
92
|
activate_priority_sampling!(@sampler)
|
|
@@ -114,11 +115,13 @@ module Datadog
|
|
|
114
115
|
|
|
115
116
|
configure_writer(options)
|
|
116
117
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
if options.key?(:partial_flush)
|
|
119
|
+
@context_flush = if options[:partial_flush]
|
|
120
|
+
Datadog::ContextFlush::Partial.new(options)
|
|
121
|
+
else
|
|
122
|
+
Datadog::ContextFlush::Finished.new
|
|
123
|
+
end
|
|
124
|
+
end
|
|
122
125
|
end
|
|
123
126
|
|
|
124
127
|
# Set the information about the given service. A valid example is:
|
|
@@ -129,7 +132,7 @@ module Datadog
|
|
|
129
132
|
def set_service_info(service, app, app_type)
|
|
130
133
|
# Only log each deprecation warning once (safeguard against log spam)
|
|
131
134
|
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
132
|
-
Datadog
|
|
135
|
+
Datadog.logger.warn(%(
|
|
133
136
|
set_service_info: Usage of set_service_info has been deprecated,
|
|
134
137
|
service information no longer needs to be reported to the trace agent.
|
|
135
138
|
))
|
|
@@ -144,7 +147,7 @@ module Datadog
|
|
|
144
147
|
begin
|
|
145
148
|
@default_service = File.basename($PROGRAM_NAME, '.*')
|
|
146
149
|
rescue StandardError => e
|
|
147
|
-
Datadog
|
|
150
|
+
Datadog.logger.error("unable to guess default service: #{e}")
|
|
148
151
|
@default_service = 'ruby'.freeze
|
|
149
152
|
end
|
|
150
153
|
@default_service
|
|
@@ -268,7 +271,7 @@ module Datadog
|
|
|
268
271
|
span = start_span(name, options)
|
|
269
272
|
# rubocop:disable Lint/UselessAssignment
|
|
270
273
|
rescue StandardError => e
|
|
271
|
-
Datadog
|
|
274
|
+
Datadog.logger.debug('Failed to start span: #{e}')
|
|
272
275
|
ensure
|
|
273
276
|
return_value = yield(span)
|
|
274
277
|
end
|
|
@@ -334,11 +337,11 @@ module Datadog
|
|
|
334
337
|
def write(trace)
|
|
335
338
|
return if @writer.nil? || !@enabled
|
|
336
339
|
|
|
337
|
-
if Datadog
|
|
338
|
-
Datadog
|
|
340
|
+
if Datadog.configuration.diagnostics.debug
|
|
341
|
+
Datadog.logger.debug("Writing #{trace.length} spans (enabled: #{@enabled})")
|
|
339
342
|
str = String.new('')
|
|
340
343
|
PP.pp(trace, str)
|
|
341
|
-
Datadog
|
|
344
|
+
Datadog.logger.debug(str)
|
|
342
345
|
end
|
|
343
346
|
|
|
344
347
|
@writer.write(trace)
|
|
@@ -355,10 +358,10 @@ module Datadog
|
|
|
355
358
|
sampler = options.fetch(:sampler, nil)
|
|
356
359
|
priority_sampling = options.fetch(:priority_sampling, nil)
|
|
357
360
|
writer = options.fetch(:writer, nil)
|
|
358
|
-
transport_options = options.fetch(:transport_options, {})
|
|
361
|
+
transport_options = options.fetch(:transport_options, {}).dup
|
|
359
362
|
|
|
360
363
|
# Compile writer options
|
|
361
|
-
writer_options = options.fetch(:writer_options, {})
|
|
364
|
+
writer_options = options.fetch(:writer_options, {}).dup
|
|
362
365
|
rebuild_writer = !writer_options.empty?
|
|
363
366
|
|
|
364
367
|
# Re-build the sampler and writer if priority sampling is enabled,
|
|
@@ -395,14 +398,6 @@ module Datadog
|
|
|
395
398
|
|
|
396
399
|
writer_options[:transport_options] = transport_options
|
|
397
400
|
|
|
398
|
-
# ensure any configuration to runtime_metrics statsd client is
|
|
399
|
-
# passed on when writer gets rebuilt
|
|
400
|
-
unless writer_options.key?(:runtime_metrics)
|
|
401
|
-
if @writer && !@writer.runtime_metrics.nil?
|
|
402
|
-
writer_options[:runtime_metrics] = @writer.runtime_metrics
|
|
403
|
-
end
|
|
404
|
-
end
|
|
405
|
-
|
|
406
401
|
if rebuild_writer || writer
|
|
407
402
|
# Make sure old writer is shut down before throwing away.
|
|
408
403
|
# Don't want additional threads running...
|