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.rb
CHANGED
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
# Add shutdown hook:
|
35
35
|
# Ensures the tracer has an opportunity to flush traces
|
36
36
|
# and cleanup before terminating the process.
|
37
|
-
at_exit { Datadog.
|
37
|
+
at_exit { Datadog.shutdown! }
|
38
38
|
end
|
39
39
|
|
40
40
|
require 'ddtrace/contrib/action_cable/integration'
|
data/lib/ddtrace/buffer.rb
CHANGED
@@ -83,7 +83,7 @@ module Datadog
|
|
83
83
|
@buffer_accepted += 1
|
84
84
|
@buffer_accepted_lengths += trace.length
|
85
85
|
rescue StandardError => e
|
86
|
-
Datadog
|
86
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
87
87
|
end
|
88
88
|
|
89
89
|
def measure_drop(trace)
|
@@ -91,21 +91,21 @@ module Datadog
|
|
91
91
|
@buffer_spans -= trace.length
|
92
92
|
@buffer_accepted_lengths -= trace.length
|
93
93
|
rescue StandardError => e
|
94
|
-
Datadog
|
94
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
95
95
|
end
|
96
96
|
|
97
97
|
def measure_pop(traces)
|
98
98
|
# Accepted
|
99
|
-
|
100
|
-
|
99
|
+
Datadog.health_metrics.queue_accepted(@buffer_accepted)
|
100
|
+
Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths)
|
101
101
|
|
102
102
|
# Dropped
|
103
|
-
|
103
|
+
Datadog.health_metrics.queue_dropped(@buffer_dropped)
|
104
104
|
|
105
105
|
# Queue gauges
|
106
|
-
|
107
|
-
|
108
|
-
|
106
|
+
Datadog.health_metrics.queue_max_length(@max_size)
|
107
|
+
Datadog.health_metrics.queue_spans(@buffer_spans)
|
108
|
+
Datadog.health_metrics.queue_length(traces.length)
|
109
109
|
|
110
110
|
# Reset aggregated metrics
|
111
111
|
@buffer_accepted = 0
|
@@ -113,7 +113,7 @@ module Datadog
|
|
113
113
|
@buffer_dropped = 0
|
114
114
|
@buffer_spans = 0
|
115
115
|
rescue StandardError => e
|
116
|
-
Datadog
|
116
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'msgpack'
|
3
|
+
|
4
|
+
module Datadog
|
5
|
+
# Chunks list of elements into batches
|
6
|
+
module Chunker
|
7
|
+
module_function
|
8
|
+
|
9
|
+
# Chunks a list into batches of at most +max_chunk_size+ elements each.
|
10
|
+
#
|
11
|
+
# An exception can occur if a single element is too large. That single
|
12
|
+
# element will be returned in its own chunk. You have to verify by yourself
|
13
|
+
# when such elements are returned.
|
14
|
+
#
|
15
|
+
# @param list [Enumerable] list of elements
|
16
|
+
# @param max_chunk_size [Numeric] maximum acceptable chunk size
|
17
|
+
# @return [Enumerable] lazy list of chunks
|
18
|
+
def chunk_by_size(list, max_chunk_size)
|
19
|
+
chunk_agg = 0
|
20
|
+
list.slice_before do |elem|
|
21
|
+
size = elem.size
|
22
|
+
chunk_agg += size
|
23
|
+
if chunk_agg > max_chunk_size
|
24
|
+
# Can't fit element in current chunk, start a new one.
|
25
|
+
chunk_agg = size
|
26
|
+
true
|
27
|
+
else
|
28
|
+
# Add to current chunk
|
29
|
+
false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,9 +1,14 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
require 'ddtrace/configuration/pin_setup'
|
2
4
|
require 'ddtrace/configuration/settings'
|
5
|
+
require 'ddtrace/configuration/components'
|
3
6
|
|
4
7
|
module Datadog
|
5
8
|
# Configuration provides a unique access point for configurations
|
6
9
|
module Configuration
|
10
|
+
extend Forwardable
|
11
|
+
|
7
12
|
attr_writer :configuration
|
8
13
|
|
9
14
|
def configuration
|
@@ -13,18 +18,36 @@ module Datadog
|
|
13
18
|
def configure(target = configuration, opts = {})
|
14
19
|
if target.is_a?(Settings)
|
15
20
|
yield(target) if block_given?
|
21
|
+
|
22
|
+
# Build immutable components from settings
|
23
|
+
@components ||= nil
|
24
|
+
@components = if @components
|
25
|
+
Components.replace!(@components, target)
|
26
|
+
else
|
27
|
+
Components.new(target)
|
28
|
+
end
|
29
|
+
|
30
|
+
target
|
16
31
|
else
|
17
32
|
PinSetup.new(target, opts).call
|
18
33
|
end
|
19
34
|
end
|
20
35
|
|
21
|
-
|
22
|
-
|
23
|
-
|
36
|
+
def_delegators \
|
37
|
+
:components,
|
38
|
+
:health_metrics,
|
39
|
+
:logger,
|
40
|
+
:runtime_metrics,
|
41
|
+
:tracer
|
42
|
+
|
43
|
+
def shutdown!
|
44
|
+
components.teardown! if @components
|
24
45
|
end
|
25
46
|
|
26
|
-
|
27
|
-
|
47
|
+
protected
|
48
|
+
|
49
|
+
def components
|
50
|
+
@components ||= Components.new(configuration)
|
28
51
|
end
|
29
52
|
end
|
30
53
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'ddtrace/diagnostics/health'
|
2
|
+
require 'ddtrace/logger'
|
3
|
+
require 'ddtrace/runtime/metrics'
|
4
|
+
require 'ddtrace/tracer'
|
5
|
+
require 'ddtrace/workers/runtime_metrics'
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module Configuration
|
9
|
+
# Global components for the trace library.
|
10
|
+
# rubocop:disable Metrics/LineLength
|
11
|
+
class Components
|
12
|
+
class << self
|
13
|
+
def replace!(old, settings)
|
14
|
+
replacement = new(settings)
|
15
|
+
old.teardown!(replacement)
|
16
|
+
replacement
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_health_metrics(settings)
|
20
|
+
settings = settings.diagnostics.health_metrics
|
21
|
+
options = { enabled: settings.enabled }
|
22
|
+
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
23
|
+
|
24
|
+
Datadog::Diagnostics::Health::Metrics.new(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_logger(settings)
|
28
|
+
logger = settings.logger.instance || Datadog::Logger.new(STDOUT)
|
29
|
+
logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
|
30
|
+
|
31
|
+
logger
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_runtime_metrics(settings)
|
35
|
+
options = { enabled: settings.runtime_metrics.enabled }
|
36
|
+
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
37
|
+
options[:services] = [settings.service] unless settings.service.nil?
|
38
|
+
|
39
|
+
Datadog::Runtime::Metrics.new(options)
|
40
|
+
end
|
41
|
+
|
42
|
+
def build_runtime_metrics_worker(settings)
|
43
|
+
# NOTE: Should we just ignore building the worker if its not enabled?
|
44
|
+
options = settings.runtime_metrics.opts.merge(
|
45
|
+
enabled: settings.runtime_metrics.enabled,
|
46
|
+
metrics: build_runtime_metrics(settings)
|
47
|
+
)
|
48
|
+
|
49
|
+
Datadog::Workers::RuntimeMetrics.new(options)
|
50
|
+
end
|
51
|
+
|
52
|
+
def build_tracer(settings)
|
53
|
+
# If a custom tracer has been provided, use it instead.
|
54
|
+
# Ignore all other options (they should already be configured.)
|
55
|
+
tracer = settings.tracer.instance
|
56
|
+
return tracer unless tracer.nil?
|
57
|
+
|
58
|
+
tracer = Tracer.new(
|
59
|
+
default_service: settings.service,
|
60
|
+
enabled: settings.tracer.enabled,
|
61
|
+
partial_flush: settings.tracer.partial_flush.enabled,
|
62
|
+
tags: build_tracer_tags(settings)
|
63
|
+
)
|
64
|
+
|
65
|
+
# TODO: We reconfigure the tracer here because it has way too many
|
66
|
+
# options it allows to mutate, and it's overwhelming to rewrite
|
67
|
+
# tracer initialization for now. Just reconfigure using the
|
68
|
+
# existing mutable #configure function. Remove when these components
|
69
|
+
# are extracted.
|
70
|
+
tracer.configure(build_tracer_options(settings))
|
71
|
+
|
72
|
+
tracer
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def build_tracer_tags(settings)
|
78
|
+
settings.tags.dup.tap do |tags|
|
79
|
+
tags['env'] = settings.env unless settings.env.nil?
|
80
|
+
tags['version'] = settings.version unless settings.version.nil?
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def build_tracer_options(settings)
|
85
|
+
settings = settings.tracer
|
86
|
+
|
87
|
+
{}.tap do |opts|
|
88
|
+
opts[:hostname] = settings.hostname unless settings.hostname.nil?
|
89
|
+
opts[:min_spans_before_partial_flush] = settings.partial_flush.min_spans_threshold unless settings.partial_flush.min_spans_threshold.nil?
|
90
|
+
opts[:partial_flush] = settings.partial_flush.enabled unless settings.partial_flush.enabled.nil?
|
91
|
+
opts[:port] = settings.port unless settings.port.nil?
|
92
|
+
opts[:priority_sampling] = settings.priority_sampling unless settings.priority_sampling.nil?
|
93
|
+
opts[:sampler] = settings.sampler unless settings.sampler.nil?
|
94
|
+
opts[:transport_options] = settings.transport_options
|
95
|
+
opts[:writer] = settings.writer unless settings.writer.nil?
|
96
|
+
opts[:writer_options] = settings.writer_options if settings.writer.nil?
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
attr_reader \
|
102
|
+
:health_metrics,
|
103
|
+
:logger,
|
104
|
+
:runtime_metrics,
|
105
|
+
:tracer
|
106
|
+
|
107
|
+
def initialize(settings)
|
108
|
+
# Logger
|
109
|
+
@logger = self.class.build_logger(settings)
|
110
|
+
|
111
|
+
# Tracer
|
112
|
+
@tracer = self.class.build_tracer(settings)
|
113
|
+
|
114
|
+
# Runtime metrics
|
115
|
+
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
116
|
+
|
117
|
+
# Health metrics
|
118
|
+
@health_metrics = self.class.build_health_metrics(settings)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Shuts down all the components in use.
|
122
|
+
# If it has another instance to compare to, it will compare
|
123
|
+
# and avoid tearing down parts still in use.
|
124
|
+
def teardown!(replacement = nil)
|
125
|
+
# Shutdown the old tracer, unless it's still being used.
|
126
|
+
# (e.g. a custom tracer instance passed in.)
|
127
|
+
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
128
|
+
|
129
|
+
# Shutdown workers
|
130
|
+
runtime_metrics.enabled = false
|
131
|
+
runtime_metrics.stop(true)
|
132
|
+
|
133
|
+
# Shutdown the old metrics, unless they are still being used.
|
134
|
+
# (e.g. custom Statsd instances.)
|
135
|
+
old_statsd = [
|
136
|
+
runtime_metrics.metrics.statsd,
|
137
|
+
health_metrics.statsd
|
138
|
+
].uniq
|
139
|
+
|
140
|
+
new_statsd = if replacement
|
141
|
+
[
|
142
|
+
replacement.runtime_metrics.metrics.statsd,
|
143
|
+
replacement.health_metrics.statsd
|
144
|
+
].uniq
|
145
|
+
else
|
146
|
+
[]
|
147
|
+
end
|
148
|
+
|
149
|
+
unused_statsd = (old_statsd - (old_statsd & new_statsd))
|
150
|
+
unused_statsd.each(&:close)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'ddtrace/configuration/base'
|
2
3
|
|
3
4
|
require 'ddtrace/ext/analytics'
|
@@ -5,34 +6,41 @@ require 'ddtrace/ext/distributed'
|
|
5
6
|
require 'ddtrace/ext/runtime'
|
6
7
|
require 'ddtrace/ext/sampling'
|
7
8
|
|
8
|
-
require 'ddtrace/tracer'
|
9
|
-
require 'ddtrace/metrics'
|
10
|
-
require 'ddtrace/diagnostics/health'
|
11
|
-
|
12
9
|
module Datadog
|
13
10
|
module Configuration
|
14
11
|
# Global configuration settings for the trace library.
|
12
|
+
# rubocop:disable Metrics/ClassLength
|
15
13
|
class Settings
|
16
14
|
include Base
|
17
15
|
|
18
16
|
#
|
19
17
|
# Configuration options
|
20
18
|
#
|
19
|
+
settings :analytics do
|
20
|
+
option :enabled do |o|
|
21
|
+
o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
|
22
|
+
o.lazy
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
21
26
|
option :analytics_enabled do |o|
|
22
|
-
|
23
|
-
o.
|
24
|
-
|
27
|
+
o.delegate_to { get_option(:analytics).enabled }
|
28
|
+
o.on_set do |value|
|
29
|
+
# TODO: Raise deprecation warning
|
30
|
+
get_option(:analytics).enabled = value
|
31
|
+
end
|
25
32
|
end
|
26
33
|
|
27
34
|
settings :diagnostics do
|
28
|
-
option :
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
)
|
35
|
+
option :debug, default: false
|
36
|
+
|
37
|
+
settings :health_metrics do
|
38
|
+
option :enabled do |o|
|
39
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::Health::Metrics::ENV_ENABLED, false) }
|
40
|
+
o.lazy
|
33
41
|
end
|
34
42
|
|
35
|
-
|
43
|
+
option :statsd
|
36
44
|
end
|
37
45
|
end
|
38
46
|
|
@@ -63,7 +71,19 @@ module Datadog
|
|
63
71
|
option :env do |o|
|
64
72
|
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
65
73
|
o.lazy
|
66
|
-
|
74
|
+
end
|
75
|
+
|
76
|
+
settings :logger do
|
77
|
+
option :instance do |o|
|
78
|
+
o.setter { |value, old_value| value.is_a?(::Logger) ? value : old_value }
|
79
|
+
o.on_set { |value| set_option(:level, value.level) unless value.nil? }
|
80
|
+
end
|
81
|
+
|
82
|
+
option :level, default: ::Logger::WARN
|
83
|
+
end
|
84
|
+
|
85
|
+
def logger=(logger)
|
86
|
+
get_option(:logger).instance = logger
|
67
87
|
end
|
68
88
|
|
69
89
|
option :report_hostname do |o|
|
@@ -71,19 +91,34 @@ module Datadog
|
|
71
91
|
o.lazy
|
72
92
|
end
|
73
93
|
|
94
|
+
settings :runtime_metrics do
|
95
|
+
option :enabled do |o|
|
96
|
+
o.default { env_to_bool(Ext::Runtime::Metrics::ENV_ENABLED, false) }
|
97
|
+
o.lazy
|
98
|
+
end
|
99
|
+
|
100
|
+
option :opts, default: ->(_i) { {} }, lazy: true
|
101
|
+
option :statsd
|
102
|
+
end
|
103
|
+
|
74
104
|
# Backwards compatibility for configuring runtime metrics e.g. `c.runtime_metrics enabled: true`
|
75
105
|
def runtime_metrics(options = nil)
|
76
|
-
|
77
|
-
return
|
106
|
+
settings = get_option(:runtime_metrics)
|
107
|
+
return settings if options.nil?
|
78
108
|
|
109
|
+
# If options were provided (old style) then raise warnings and apply them:
|
79
110
|
# TODO: Raise deprecation warning
|
80
|
-
|
111
|
+
settings.enabled = options[:enabled] if options.key?(:enabled)
|
112
|
+
settings.statsd = options[:statsd] if options.key?(:statsd)
|
113
|
+
settings
|
81
114
|
end
|
82
115
|
|
83
116
|
option :runtime_metrics_enabled do |o|
|
84
|
-
|
85
|
-
o.
|
86
|
-
|
117
|
+
o.delegate_to { get_option(:runtime_metrics).enabled }
|
118
|
+
o.on_set do |value|
|
119
|
+
# TODO: Raise deprecation warning
|
120
|
+
get_option(:runtime_metrics).enabled = value
|
121
|
+
end
|
87
122
|
end
|
88
123
|
|
89
124
|
settings :sampling do
|
@@ -101,7 +136,6 @@ module Datadog
|
|
101
136
|
option :service do |o|
|
102
137
|
o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, nil) }
|
103
138
|
o.lazy
|
104
|
-
o.on_set { |value| get_option(:tracer).default_service = value }
|
105
139
|
end
|
106
140
|
|
107
141
|
option :tags do |o|
|
@@ -125,62 +159,96 @@ module Datadog
|
|
125
159
|
# Coerce keys to strings
|
126
160
|
string_tags = Hash[new_value.collect { |k, v| [k.to_s, v] }]
|
127
161
|
|
162
|
+
# Cross-populate tag values with other settings
|
163
|
+
if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
164
|
+
self.env = string_tags[Ext::Environment::TAG_ENV]
|
165
|
+
end
|
166
|
+
|
167
|
+
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
168
|
+
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
169
|
+
end
|
170
|
+
|
171
|
+
if service.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
172
|
+
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
173
|
+
end
|
174
|
+
|
128
175
|
# Merge with previous tags
|
129
176
|
(old_value || {}).merge(string_tags)
|
130
177
|
end
|
131
178
|
|
132
|
-
o.on_set { |value| get_option(:tracer).set_tags(value) }
|
133
|
-
|
134
179
|
o.lazy
|
135
180
|
end
|
136
181
|
|
137
|
-
|
138
|
-
|
139
|
-
|
182
|
+
settings :tracer do
|
183
|
+
option :enabled, default: true
|
184
|
+
option :hostname # TODO: Deprecate
|
185
|
+
option :instance
|
140
186
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
tracer.shutdown!
|
145
|
-
Tracer.new
|
146
|
-
end
|
147
|
-
|
148
|
-
# Backwards compatibility for configuring tracer e.g. `c.tracer debug: true`
|
149
|
-
o.helper :tracer do |options = nil|
|
150
|
-
tracer = options && options.key?(:instance) ? set_option(:tracer, options[:instance]) : get_option(:tracer)
|
151
|
-
|
152
|
-
tracer.tap do |t|
|
153
|
-
unless options.nil?
|
154
|
-
t.configure(options)
|
155
|
-
|
156
|
-
if options[:log]
|
157
|
-
# TODO: Raise deprecation warning
|
158
|
-
Datadog::Logger.log = options[:log]
|
159
|
-
end
|
160
|
-
|
161
|
-
if options[:tags]
|
162
|
-
# TODO: Raise deprecation warning
|
163
|
-
t.set_tags(options[:tags])
|
164
|
-
end
|
165
|
-
|
166
|
-
if options[:env]
|
167
|
-
# TODO: Raise deprecation warning
|
168
|
-
t.set_tags(env: options[:env])
|
169
|
-
end
|
170
|
-
|
171
|
-
if options.key?(:debug)
|
172
|
-
# TODO: Raise deprecation warning
|
173
|
-
Datadog::Logger.debug_logging = options[:debug]
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
187
|
+
settings :partial_flush do
|
188
|
+
option :enabled, default: false
|
189
|
+
option :min_spans_threshold
|
177
190
|
end
|
191
|
+
|
192
|
+
option :port # TODO: Deprecate
|
193
|
+
option :priority_sampling # TODO: Deprecate
|
194
|
+
option :sampler
|
195
|
+
option :transport_options, default: ->(_i) { {} }, lazy: true # TODO: Deprecate
|
196
|
+
option :writer # TODO: Deprecate
|
197
|
+
option :writer_options, default: ->(_i) { {} }, lazy: true # TODO: Deprecate
|
198
|
+
end
|
199
|
+
|
200
|
+
# Backwards compatibility for configuring tracer e.g. `c.tracer debug: true`
|
201
|
+
def tracer(options = nil)
|
202
|
+
settings = get_option(:tracer)
|
203
|
+
return settings if options.nil?
|
204
|
+
|
205
|
+
# If options were provided (old style) then raise warnings and apply them:
|
206
|
+
options = options.dup
|
207
|
+
|
208
|
+
if options.key?(:log)
|
209
|
+
# TODO: Raise deprecation warning
|
210
|
+
get_option(:logger).instance = options.delete(:log)
|
211
|
+
end
|
212
|
+
|
213
|
+
if options.key?(:tags)
|
214
|
+
# TODO: Raise deprecation warning
|
215
|
+
set_option(:tags, options.delete(:tags))
|
216
|
+
end
|
217
|
+
|
218
|
+
if options.key?(:env)
|
219
|
+
# TODO: Raise deprecation warning
|
220
|
+
set_option(:env, options.delete(:env))
|
221
|
+
end
|
222
|
+
|
223
|
+
if options.key?(:debug)
|
224
|
+
# TODO: Raise deprecation warning
|
225
|
+
get_option(:diagnostics).debug = options.delete(:debug)
|
226
|
+
end
|
227
|
+
|
228
|
+
if options.key?(:partial_flush)
|
229
|
+
# TODO: Raise deprecation warning
|
230
|
+
settings.partial_flush.enabled = options.delete(:partial_flush)
|
231
|
+
end
|
232
|
+
|
233
|
+
if options.key?(:min_spans_before_partial_flush)
|
234
|
+
# TODO: Raise deprecation warning
|
235
|
+
settings.partial_flush.min_spans_threshold = options.delete(:min_spans_before_partial_flush)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Forward remaining options to settings
|
239
|
+
options.each do |key, value|
|
240
|
+
setter = :"#{key}="
|
241
|
+
settings.send(setter, value) if settings.respond_to?(setter)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def tracer=(tracer)
|
246
|
+
get_option(:tracer).instance = tracer
|
178
247
|
end
|
179
248
|
|
180
249
|
option :version do |o|
|
181
250
|
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
182
251
|
o.lazy
|
183
|
-
o.on_set { |value| get_option(:tracer).set_tags('version' => value) }
|
184
252
|
end
|
185
253
|
end
|
186
254
|
end
|