ddtrace 0.34.2 → 0.35.0
Sign up to get free protection for your applications and to get access to all the features.
- 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...
|