ddtrace 0.38.0 → 0.43.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 +56 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.gitlab-ci.yml +1 -0
- data/.simplecov +38 -0
- data/Appraisals +293 -105
- data/CHANGELOG.md +192 -1
- data/CONTRIBUTING.md +2 -2
- data/Rakefile +554 -480
- data/ddtrace.gemspec +3 -0
- data/docs/DevelopmentGuide.md +28 -2
- data/docs/GettingStarted.md +207 -82
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/buffer.rb +259 -52
- data/lib/ddtrace/configuration.rb +55 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/options.rb +3 -1
- data/lib/ddtrace/configuration/settings.rb +18 -6
- data/lib/ddtrace/context.rb +18 -0
- data/lib/ddtrace/context_provider.rb +17 -5
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_record/events/sql.rb +4 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +8 -2
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +10 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/aws/instrumentation.rb +6 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +0 -1
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/configurable.rb +2 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +4 -5
- data/lib/ddtrace/contrib/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +19 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +104 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +40 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +9 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +4 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +4 -2
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +4 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/middleware.rb +11 -1
- data/lib/ddtrace/contrib/extensions.rb +1 -1
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
- data/lib/ddtrace/contrib/faraday/middleware.rb +4 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +13 -4
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +14 -3
- data/lib/ddtrace/contrib/grape/endpoint.rb +24 -7
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/http/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/httprb/ext.rb +5 -2
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +8 -8
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/kafka/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +4 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/presto/ext.rb +5 -2
- data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +43 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +57 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/event.rb +4 -0
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rack/ext.rb +5 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +2 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +12 -2
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +29 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/rake/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/redis/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/tags.rb +4 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/resque_job.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +4 -0
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/rspec/example.rb +61 -0
- data/lib/ddtrace/contrib/rspec/example_group.rb +61 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +19 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +41 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +25 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +3 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
- data/lib/ddtrace/contrib/sequel/ext.rb +6 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +35 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +5 -2
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
- data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +55 -0
- data/lib/ddtrace/contrib/status_code_matcher.rb +67 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
- data/lib/ddtrace/diagnostics/environment_logger.rb +1 -1
- data/lib/ddtrace/environment.rb +14 -4
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +265 -0
- data/lib/ddtrace/ext/diagnostics.rb +2 -1
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +12 -0
- data/lib/ddtrace/ext/integration.rb +8 -0
- data/lib/ddtrace/ext/runtime.rb +2 -0
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/opentracer/distributed_headers.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +18 -6
- data/lib/ddtrace/runtime/identity.rb +4 -5
- data/lib/ddtrace/runtime/metrics.rb +24 -6
- data/lib/ddtrace/sampler.rb +2 -2
- data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
- data/lib/ddtrace/span.rb +152 -27
- data/lib/ddtrace/tracer.rb +25 -13
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +2 -0
- data/lib/ddtrace/transport/http/statistics.rb +14 -1
- data/lib/ddtrace/transport/traces.rb +7 -2
- data/lib/ddtrace/utils.rb +16 -13
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers/async.rb +2 -2
- data/lib/ddtrace/workers/loop.rb +1 -1
- data/lib/ddtrace/workers/polling.rb +1 -1
- data/lib/ddtrace/writer.rb +19 -1
- metadata +53 -6
|
@@ -10,12 +10,6 @@ module Datadog
|
|
|
10
10
|
# rubocop:disable Metrics/LineLength
|
|
11
11
|
class Components
|
|
12
12
|
class << self
|
|
13
|
-
def replace!(old, settings)
|
|
14
|
-
replacement = new(settings)
|
|
15
|
-
old.teardown!(replacement)
|
|
16
|
-
replacement
|
|
17
|
-
end
|
|
18
|
-
|
|
19
13
|
def build_health_metrics(settings)
|
|
20
14
|
settings = settings.diagnostics.health_metrics
|
|
21
15
|
options = { enabled: settings.enabled }
|
|
@@ -118,10 +112,13 @@ module Datadog
|
|
|
118
112
|
@health_metrics = self.class.build_health_metrics(settings)
|
|
119
113
|
end
|
|
120
114
|
|
|
115
|
+
# Starts up components
|
|
116
|
+
def startup!(settings); end
|
|
117
|
+
|
|
121
118
|
# Shuts down all the components in use.
|
|
122
119
|
# If it has another instance to compare to, it will compare
|
|
123
120
|
# and avoid tearing down parts still in use.
|
|
124
|
-
def
|
|
121
|
+
def shutdown!(replacement = nil)
|
|
125
122
|
# Shutdown the old tracer, unless it's still being used.
|
|
126
123
|
# (e.g. a custom tracer instance passed in.)
|
|
127
124
|
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
|
@@ -26,7 +26,9 @@ module Datadog
|
|
|
26
26
|
builder = OptionDefinition::Builder.new(name, meta, &block)
|
|
27
27
|
options[name] = builder.to_definition.tap do
|
|
28
28
|
# Resolve and define helper functions
|
|
29
|
-
helpers = default_helpers(name)
|
|
29
|
+
helpers = default_helpers(name)
|
|
30
|
+
# Prevent unnecessary creation of an identical copy of helpers if there's nothing to merge
|
|
31
|
+
helpers = helpers.merge(builder.helpers) unless builder.helpers.empty?
|
|
30
32
|
define_helpers(helpers)
|
|
31
33
|
end
|
|
32
34
|
end
|
|
@@ -37,7 +37,15 @@ module Datadog
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
settings :diagnostics do
|
|
40
|
-
option :debug
|
|
40
|
+
option :debug do |o|
|
|
41
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_DEBUG, false) }
|
|
42
|
+
o.lazy
|
|
43
|
+
o.on_set do |enabled|
|
|
44
|
+
# Enable rich debug print statements.
|
|
45
|
+
# We do not need to unnecessarily load 'pp' unless in debugging mode.
|
|
46
|
+
require 'pp' if enabled
|
|
47
|
+
end
|
|
48
|
+
end
|
|
41
49
|
|
|
42
50
|
settings :health_metrics do
|
|
43
51
|
option :enabled do |o|
|
|
@@ -61,7 +69,8 @@ module Datadog
|
|
|
61
69
|
option :propagation_extract_style do |o|
|
|
62
70
|
o.default do
|
|
63
71
|
# Look for all headers by default
|
|
64
|
-
env_to_list(Ext::DistributedTracing::
|
|
72
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_EXTRACT_ENV,
|
|
73
|
+
Ext::DistributedTracing::PROPAGATION_EXTRACT_STYLE_ENV_OLD],
|
|
65
74
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG,
|
|
66
75
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3,
|
|
67
76
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3_SINGLE_HEADER])
|
|
@@ -73,7 +82,8 @@ module Datadog
|
|
|
73
82
|
option :propagation_inject_style do |o|
|
|
74
83
|
o.default do
|
|
75
84
|
# Only inject Datadog headers by default
|
|
76
|
-
env_to_list(Ext::DistributedTracing::
|
|
85
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_INJECT_ENV,
|
|
86
|
+
Ext::DistributedTracing::PROPAGATION_INJECT_STYLE_ENV_OLD],
|
|
77
87
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG])
|
|
78
88
|
end
|
|
79
89
|
|
|
@@ -88,11 +98,10 @@ module Datadog
|
|
|
88
98
|
|
|
89
99
|
settings :logger do
|
|
90
100
|
option :instance do |o|
|
|
91
|
-
o.setter { |value, old_value| value.is_a?(::Logger) ? value : old_value }
|
|
92
101
|
o.on_set { |value| set_option(:level, value.level) unless value.nil? }
|
|
93
102
|
end
|
|
94
103
|
|
|
95
|
-
option :level, default: ::Logger::
|
|
104
|
+
option :level, default: ::Logger::INFO
|
|
96
105
|
end
|
|
97
106
|
|
|
98
107
|
def logger=(logger)
|
|
@@ -198,7 +207,10 @@ module Datadog
|
|
|
198
207
|
end
|
|
199
208
|
|
|
200
209
|
settings :tracer do
|
|
201
|
-
option :enabled
|
|
210
|
+
option :enabled do |o|
|
|
211
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
|
212
|
+
o.lazy
|
|
213
|
+
end
|
|
202
214
|
option :hostname # TODO: Deprecate
|
|
203
215
|
option :instance
|
|
204
216
|
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -3,6 +3,7 @@ require 'ddtrace/diagnostics/health'
|
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/context_flush'
|
|
5
5
|
require 'ddtrace/context_provider'
|
|
6
|
+
require 'ddtrace/utils/forking'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
8
9
|
# \Context is used to keep track of a hierarchy of spans for the current
|
|
@@ -19,6 +20,8 @@ module Datadog
|
|
|
19
20
|
# This data structure is thread-safe.
|
|
20
21
|
# rubocop:disable Metrics/ClassLength
|
|
21
22
|
class Context
|
|
23
|
+
include Datadog::Utils::Forking
|
|
24
|
+
|
|
22
25
|
# 100k spans is about a 100Mb footprint
|
|
23
26
|
DEFAULT_MAX_LENGTH = 100_000
|
|
24
27
|
|
|
@@ -232,6 +235,21 @@ module Datadog
|
|
|
232
235
|
end
|
|
233
236
|
end
|
|
234
237
|
|
|
238
|
+
# Generates equivalent context for forked processes.
|
|
239
|
+
#
|
|
240
|
+
# When Context from parent process is forked, child process
|
|
241
|
+
# should have a Context belonging to the same trace but not
|
|
242
|
+
# have the parent process spans.
|
|
243
|
+
def fork_clone
|
|
244
|
+
self.class.new(
|
|
245
|
+
trace_id: trace_id,
|
|
246
|
+
span_id: span_id,
|
|
247
|
+
sampled: sampled?,
|
|
248
|
+
sampling_priority: sampling_priority,
|
|
249
|
+
origin: origin
|
|
250
|
+
)
|
|
251
|
+
end
|
|
252
|
+
|
|
235
253
|
private
|
|
236
254
|
|
|
237
255
|
def reset(options = {})
|
|
@@ -13,9 +13,20 @@ module Datadog
|
|
|
13
13
|
@context.local = ctx
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Return the
|
|
17
|
-
def context
|
|
18
|
-
@context.local
|
|
16
|
+
# Return the local context.
|
|
17
|
+
def context(key = nil)
|
|
18
|
+
current_context = key.nil? ? @context.local : @context.local(key)
|
|
19
|
+
|
|
20
|
+
# Rebuild/reset context after a fork
|
|
21
|
+
#
|
|
22
|
+
# We don't want forked processes to copy and retransmit spans
|
|
23
|
+
# that were generated from the parent process. Reset it such
|
|
24
|
+
# that it acts like a distributed trace.
|
|
25
|
+
current_context.after_fork! do
|
|
26
|
+
current_context = self.context = current_context.fork_clone
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
current_context
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
32
|
|
|
@@ -43,8 +54,9 @@ module Datadog
|
|
|
43
54
|
end
|
|
44
55
|
|
|
45
56
|
# Return the thread-local context.
|
|
46
|
-
def local
|
|
47
|
-
Thread.
|
|
57
|
+
def local(thread = Thread.current)
|
|
58
|
+
raise ArgumentError, '\'thread\' must be a Thread.' unless thread.is_a?(Thread)
|
|
59
|
+
thread[@key] ||= Datadog::Context.new
|
|
48
60
|
end
|
|
49
61
|
end
|
|
50
62
|
end
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the ActionCable integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActionCable integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'action_cable'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ACTION_CABLE_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_CABLE_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTION_CABLE_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTION_CABLE_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'action_cable'.freeze
|
|
10
13
|
SPAN_ACTION = 'action_cable.action'.freeze
|
|
11
14
|
SPAN_BROADCAST = 'action_cable.broadcast'.freeze
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the ActionPack integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActionPack integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'action_pack'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ACTION_PACK_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_PACK_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTION_PACK_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_PACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTION_PACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'action_pack'.freeze
|
|
10
13
|
SPAN_ACTION_CONTROLLER = 'rails.action_controller'.freeze
|
|
11
14
|
TAG_ROUTE_ACTION = 'rails.route.action'.freeze
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the ActionView integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActionView integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'action_view'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ACTION_VIEW_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_VIEW_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTION_VIEW_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_VIEW_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTION_VIEW_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'action_view'.freeze
|
|
10
13
|
SPAN_RENDER_PARTIAL = 'rails.render_partial'.freeze
|
|
11
14
|
SPAN_RENDER_TEMPLATE = 'rails.render_template'.freeze
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the ActiveModelSerializers integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActiveModelSerializers integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'active_model_serializers'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'active_model_serializers'.freeze
|
|
10
13
|
SPAN_RENDER = 'active_model_serializers.render'.freeze
|
|
11
14
|
SPAN_SERIALIZE = 'active_model_serializers.serialize'.freeze
|
|
@@ -8,13 +8,18 @@ module Datadog
|
|
|
8
8
|
module Configuration
|
|
9
9
|
# Custom settings for the ActiveRecord integration
|
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :enabled do |o|
|
|
12
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
13
|
+
o.lazy
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
option :analytics_enabled do |o|
|
|
12
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
17
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
13
18
|
o.lazy
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
option :analytics_sample_rate do |o|
|
|
17
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
22
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
18
23
|
o.lazy
|
|
19
24
|
end
|
|
20
25
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/ext/integration'
|
|
1
2
|
require 'ddtrace/ext/net'
|
|
2
3
|
require 'ddtrace/contrib/analytics'
|
|
3
4
|
require 'ddtrace/contrib/active_record/ext'
|
|
@@ -39,6 +40,9 @@ module Datadog
|
|
|
39
40
|
span.resource = payload.fetch(:sql)
|
|
40
41
|
span.span_type = Datadog::Ext::SQL::TYPE
|
|
41
42
|
|
|
43
|
+
# Tag as an external peer service
|
|
44
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
45
|
+
|
|
42
46
|
# Set analytics sample rate
|
|
43
47
|
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
44
48
|
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# ActiveRecord integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'active_record'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ACTIVE_RECORD_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTIVE_RECORD_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'active_record'.freeze
|
|
10
13
|
SPAN_INSTANTIATION = 'active_record.instantiation'.freeze
|
|
11
14
|
SPAN_SQL = 'active_record.sql'.freeze
|
|
@@ -18,9 +18,13 @@ module Datadog
|
|
|
18
18
|
# NOTE: the ``finish_trace_cache()`` is fired but it already has a safe-guard
|
|
19
19
|
# to avoid any kind of issue.
|
|
20
20
|
current_span = tracer.active_span
|
|
21
|
-
return if
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
return if current_span.try(:name) == Ext::SPAN_CACHE &&
|
|
22
|
+
(
|
|
23
|
+
payload[:action] == Ext::RESOURCE_CACHE_GET &&
|
|
24
|
+
current_span.try(:resource) == Ext::RESOURCE_CACHE_GET ||
|
|
25
|
+
payload[:action] == Ext::RESOURCE_CACHE_MGET &&
|
|
26
|
+
current_span.try(:resource) == Ext::RESOURCE_CACHE_MGET
|
|
27
|
+
)
|
|
24
28
|
|
|
25
29
|
tracing_context = payload.fetch(:tracing_context)
|
|
26
30
|
|
|
@@ -59,6 +63,32 @@ module Datadog
|
|
|
59
63
|
Datadog.logger.debug(e.message)
|
|
60
64
|
end
|
|
61
65
|
|
|
66
|
+
def finish_trace_cache_multi(payload)
|
|
67
|
+
# retrieve the tracing context and continue the trace
|
|
68
|
+
tracing_context = payload.fetch(:tracing_context)
|
|
69
|
+
span = tracing_context[:dd_cache_span]
|
|
70
|
+
return unless span && !span.finished?
|
|
71
|
+
|
|
72
|
+
begin
|
|
73
|
+
# discard parameters from the cache_store configuration
|
|
74
|
+
if defined?(::Rails)
|
|
75
|
+
store, = *Array.wrap(::Rails.configuration.cache_store).flatten
|
|
76
|
+
span.set_tag(Ext::TAG_CACHE_BACKEND, store)
|
|
77
|
+
end
|
|
78
|
+
normalized_keys = payload.fetch(:keys, []).map do |key|
|
|
79
|
+
::ActiveSupport::Cache.expand_cache_key(key)
|
|
80
|
+
end
|
|
81
|
+
cache_keys = Datadog::Utils.truncate(normalized_keys, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE)
|
|
82
|
+
span.set_tag(Ext::TAG_CACHE_KEY_MULTI, cache_keys)
|
|
83
|
+
|
|
84
|
+
span.set_error(payload[:exception]) if payload[:exception]
|
|
85
|
+
ensure
|
|
86
|
+
span.finish
|
|
87
|
+
end
|
|
88
|
+
rescue StandardError => e
|
|
89
|
+
Datadog.logger.debug(e.message)
|
|
90
|
+
end
|
|
91
|
+
|
|
62
92
|
# Defines instrumentation for ActiveSupport cache reading
|
|
63
93
|
module Read
|
|
64
94
|
def read(*args, &block)
|
|
@@ -82,6 +112,29 @@ module Datadog
|
|
|
82
112
|
end
|
|
83
113
|
end
|
|
84
114
|
|
|
115
|
+
# Defines instrumentation for ActiveSupport cache reading of multiple keys
|
|
116
|
+
module ReadMulti
|
|
117
|
+
def read_multi(*keys, &block)
|
|
118
|
+
payload = {
|
|
119
|
+
action: Ext::RESOURCE_CACHE_MGET,
|
|
120
|
+
keys: keys,
|
|
121
|
+
tracing_context: {}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
begin
|
|
125
|
+
# process and catch cache exceptions
|
|
126
|
+
Instrumentation.start_trace_cache(payload)
|
|
127
|
+
super
|
|
128
|
+
rescue Exception => e
|
|
129
|
+
payload[:exception] = [e.class.name, e.message]
|
|
130
|
+
payload[:exception_object] = e
|
|
131
|
+
raise e
|
|
132
|
+
end
|
|
133
|
+
ensure
|
|
134
|
+
Instrumentation.finish_trace_cache_multi(payload)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
85
138
|
# Defines instrumentation for ActiveSupport cache fetching
|
|
86
139
|
module Fetch
|
|
87
140
|
def fetch(*args, &block)
|
|
@@ -105,6 +158,31 @@ module Datadog
|
|
|
105
158
|
end
|
|
106
159
|
end
|
|
107
160
|
|
|
161
|
+
# Defines instrumentation for ActiveSupport cache fetching of multiple keys
|
|
162
|
+
module FetchMulti
|
|
163
|
+
def fetch_multi(*args, &block)
|
|
164
|
+
# extract options hash
|
|
165
|
+
keys = args[-1].instance_of?(Hash) ? args[0..-2] : args
|
|
166
|
+
payload = {
|
|
167
|
+
action: Ext::RESOURCE_CACHE_MGET,
|
|
168
|
+
keys: keys,
|
|
169
|
+
tracing_context: {}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
begin
|
|
173
|
+
# process and catch cache exceptions
|
|
174
|
+
Instrumentation.start_trace_cache(payload)
|
|
175
|
+
super
|
|
176
|
+
rescue Exception => e
|
|
177
|
+
payload[:exception] = [e.class.name, e.message]
|
|
178
|
+
payload[:exception_object] = e
|
|
179
|
+
raise e
|
|
180
|
+
end
|
|
181
|
+
ensure
|
|
182
|
+
Instrumentation.finish_trace_cache_multi(payload)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
108
186
|
# Defines instrumentation for ActiveSupport cache writing
|
|
109
187
|
module Write
|
|
110
188
|
def write(*args, &block)
|
|
@@ -128,6 +206,29 @@ module Datadog
|
|
|
128
206
|
end
|
|
129
207
|
end
|
|
130
208
|
|
|
209
|
+
# Defines instrumentation for ActiveSupport cache writing of multiple keys
|
|
210
|
+
module WriteMulti
|
|
211
|
+
def write_multi(hash, options = nil)
|
|
212
|
+
payload = {
|
|
213
|
+
action: Ext::RESOURCE_CACHE_MSET,
|
|
214
|
+
keys: hash.keys,
|
|
215
|
+
tracing_context: {}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
begin
|
|
219
|
+
# process and catch cache exceptions
|
|
220
|
+
Instrumentation.start_trace_cache(payload)
|
|
221
|
+
super
|
|
222
|
+
rescue Exception => e
|
|
223
|
+
payload[:exception] = [e.class.name, e.message]
|
|
224
|
+
payload[:exception_object] = e
|
|
225
|
+
raise e
|
|
226
|
+
end
|
|
227
|
+
ensure
|
|
228
|
+
Instrumentation.finish_trace_cache_multi(payload)
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
131
232
|
# Defines instrumentation for ActiveSupport cache deleting
|
|
132
233
|
module Delete
|
|
133
234
|
def delete(*args, &block)
|