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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/cucumber/instrumentation'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Cucumber
|
|
7
|
+
# Patcher enables patching of 'cucumber' module.
|
|
8
|
+
module Patcher
|
|
9
|
+
include Contrib::Patcher
|
|
10
|
+
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
def target_version
|
|
14
|
+
Integration.version
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def patch
|
|
18
|
+
::Cucumber::Runtime.send(:include, Instrumentation)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Dalli 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
|
# Dalli integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'dalli'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_DALLI_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_DALLI_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_DALLI_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DALLI_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_DALLI_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
QUANTIZE_MAX_CMD_LENGTH = 100
|
|
10
13
|
SERVICE_NAME = 'memcached'.freeze
|
|
11
14
|
SPAN_COMMAND = 'memcached.command'.freeze
|
|
@@ -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/dalli/ext'
|
|
@@ -20,6 +21,9 @@ module Datadog
|
|
|
20
21
|
span.service = datadog_configuration[:service_name]
|
|
21
22
|
span.span_type = Datadog::Contrib::Dalli::Ext::SPAN_TYPE_COMMAND
|
|
22
23
|
|
|
24
|
+
# Tag as an external peer service
|
|
25
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
26
|
+
|
|
23
27
|
# Set analytics sample rate
|
|
24
28
|
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
25
29
|
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
@@ -7,17 +7,24 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the DelayedJob 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
|
|
|
20
25
|
option :service_name, default: Ext::SERVICE_NAME
|
|
26
|
+
option :client_service_name, default: Ext::CLIENT_SERVICE_NAME
|
|
27
|
+
option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
|
|
21
28
|
end
|
|
22
29
|
end
|
|
23
30
|
end
|
|
@@ -4,10 +4,15 @@ module Datadog
|
|
|
4
4
|
# DelayedJob integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'delayed_job'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_DELAYED_JOB_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_DELAYED_JOB_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_DELAYED_JOB_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'delayed_job'.freeze
|
|
13
|
+
CLIENT_SERVICE_NAME = 'delayed_job-client'.freeze
|
|
10
14
|
SPAN_JOB = 'delayed_job'.freeze
|
|
15
|
+
SPAN_ENQUEUE = 'delayed_job.enqueue'.freeze
|
|
11
16
|
TAG_ATTEMPTS = 'delayed_job.attempts'.freeze
|
|
12
17
|
TAG_ID = 'delayed_job.id'.freeze
|
|
13
18
|
TAG_PRIORITY = 'delayed_job.priority'.freeze
|
|
@@ -7,22 +7,13 @@ module Datadog
|
|
|
7
7
|
module DelayedJob
|
|
8
8
|
# DelayedJob plugin that instruments invoke_job hook
|
|
9
9
|
class Plugin < Delayed::Plugin
|
|
10
|
-
def self.
|
|
10
|
+
def self.instrument_invoke(job, &block)
|
|
11
11
|
return block.call(job) unless tracer && tracer.enabled
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
else
|
|
18
|
-
job.name
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name) do |span|
|
|
22
|
-
# Set analytics sample rate
|
|
23
|
-
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
24
|
-
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
25
|
-
end
|
|
13
|
+
tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name(job),
|
|
14
|
+
on_error: configuration[:error_handler]) do |span|
|
|
15
|
+
|
|
16
|
+
set_sample_rate(span)
|
|
26
17
|
|
|
27
18
|
# Measure service stats
|
|
28
19
|
Contrib::Analytics.set_measured(span)
|
|
@@ -37,6 +28,23 @@ module Datadog
|
|
|
37
28
|
end
|
|
38
29
|
end
|
|
39
30
|
|
|
31
|
+
def self.instrument_enqueue(job, &block)
|
|
32
|
+
return block.call(job) unless tracer && tracer.enabled
|
|
33
|
+
|
|
34
|
+
tracer.trace(Ext::SPAN_ENQUEUE, service: configuration[:client_service_name], resource: job_name(job)) do |span|
|
|
35
|
+
set_sample_rate(span)
|
|
36
|
+
|
|
37
|
+
# Measure service stats
|
|
38
|
+
Contrib::Analytics.set_measured(span)
|
|
39
|
+
|
|
40
|
+
span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
|
|
41
|
+
span.set_tag(Ext::TAG_PRIORITY, job.priority)
|
|
42
|
+
span.span_type = Datadog::Ext::AppTypes::WORKER
|
|
43
|
+
|
|
44
|
+
yield job
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
40
48
|
def self.flush(worker, &block)
|
|
41
49
|
yield worker
|
|
42
50
|
|
|
@@ -51,8 +59,24 @@ module Datadog
|
|
|
51
59
|
configuration[:tracer]
|
|
52
60
|
end
|
|
53
61
|
|
|
62
|
+
def self.job_name(job)
|
|
63
|
+
# When DelayedJob is used through ActiveJob, we need to parse the payload differentely
|
|
64
|
+
# to get the actual job name
|
|
65
|
+
return job.payload_object.job_data['job_class'] if job.payload_object.respond_to?(:job_data)
|
|
66
|
+
|
|
67
|
+
job.name
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.set_sample_rate(span)
|
|
71
|
+
# Set analytics sample rate
|
|
72
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
73
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
54
77
|
callbacks do |lifecycle|
|
|
55
|
-
lifecycle.around(:invoke_job, &method(:
|
|
78
|
+
lifecycle.around(:invoke_job, &method(:instrument_invoke))
|
|
79
|
+
lifecycle.around(:enqueue, &method(:instrument_enqueue))
|
|
56
80
|
lifecycle.around(:execute, &method(:flush))
|
|
57
81
|
end
|
|
58
82
|
end
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Elasticsearch 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
|
# Elasticsearch integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'elasticsearch'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ELASTICSEARCH_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'elasticsearch'.freeze
|
|
10
13
|
SPAN_QUERY = 'elasticsearch.query'.freeze
|
|
11
14
|
SPAN_TYPE_QUERY = 'elasticsearch'.freeze
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
|
2
2
|
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/ext/integration'
|
|
3
4
|
require 'ddtrace/ext/net'
|
|
4
5
|
require 'ddtrace/contrib/analytics'
|
|
5
6
|
require 'ddtrace/contrib/elasticsearch/ext'
|
|
@@ -77,6 +78,9 @@ module Datadog
|
|
|
77
78
|
params = JSON.generate(params) if params && !params.is_a?(String)
|
|
78
79
|
body = JSON.generate(body) if body && !body.is_a?(String)
|
|
79
80
|
|
|
81
|
+
# Tag as an external peer service
|
|
82
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
83
|
+
|
|
80
84
|
# Set analytics sample rate
|
|
81
85
|
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
82
86
|
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Ethon 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
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/ext/net'
|
|
2
2
|
require 'ddtrace/ext/distributed'
|
|
3
|
+
require 'ddtrace/ext/integration'
|
|
3
4
|
require 'ddtrace/propagation/http_propagator'
|
|
4
5
|
require 'ddtrace/contrib/ethon/ext'
|
|
5
6
|
require 'ddtrace/contrib/http_annotation_helper'
|
|
@@ -12,8 +13,8 @@ module Datadog
|
|
|
12
13
|
def self.included(base)
|
|
13
14
|
base.send(:prepend, InstanceMethods)
|
|
14
15
|
end
|
|
15
|
-
|
|
16
16
|
# InstanceMethods - implementing instrumentation
|
|
17
|
+
# rubocop:disable Metrics/ModuleLength
|
|
17
18
|
module InstanceMethods
|
|
18
19
|
include Datadog::Contrib::HttpAnnotationHelper
|
|
19
20
|
|
|
@@ -103,7 +104,8 @@ module Datadog
|
|
|
103
104
|
method = @datadog_method.to_s
|
|
104
105
|
end
|
|
105
106
|
span.resource = method
|
|
106
|
-
|
|
107
|
+
# Tag as an external peer service
|
|
108
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
107
109
|
# Set analytics sample rate
|
|
108
110
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
109
111
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# Ethon integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'ethon'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_ETHON_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ETHON_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_ETHON_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'ethon'.freeze
|
|
10
13
|
SPAN_REQUEST = 'ethon.request'.freeze
|
|
11
14
|
SPAN_MULTI_REQUEST = 'ethon.multi.request'.freeze
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/ext/net'
|
|
2
2
|
require 'ddtrace/ext/distributed'
|
|
3
|
+
require 'ddtrace/ext/integration'
|
|
3
4
|
require 'ddtrace/propagation/http_propagator'
|
|
4
5
|
require 'ddtrace/contrib/ethon/ext'
|
|
5
6
|
|
|
@@ -52,6 +53,9 @@ module Datadog
|
|
|
52
53
|
service: datadog_configuration[:service_name]
|
|
53
54
|
)
|
|
54
55
|
|
|
56
|
+
# Tag as an external peer service
|
|
57
|
+
@datadog_multi_span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, @datadog_multi_span.service)
|
|
58
|
+
|
|
55
59
|
# Set analytics sample rate
|
|
56
60
|
Contrib::Analytics.set_sample_rate(@datadog_multi_span, analytics_sample_rate) if analytics_enabled?
|
|
57
61
|
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Excon 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
|
# Excon integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'excon'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_EXCON_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_EXCON_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_EXCON_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'excon'.freeze
|
|
10
13
|
SPAN_REQUEST = 'excon.request'.freeze
|
|
11
14
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'excon'
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/ext/integration'
|
|
3
4
|
require 'ddtrace/ext/net'
|
|
4
5
|
require 'ddtrace/ext/distributed'
|
|
5
6
|
require 'ddtrace/propagation/http_propagator'
|
|
@@ -62,6 +63,12 @@ module Datadog
|
|
|
62
63
|
@options
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
# default_options in this case contains our specific middleware options
|
|
67
|
+
# so we want it to take precedence in build_request_options
|
|
68
|
+
def build_request_options!(datum)
|
|
69
|
+
datadog_configuration(datum[:host]).options_hash.merge(@default_options)
|
|
70
|
+
end
|
|
71
|
+
|
|
65
72
|
def initialize(stack)
|
|
66
73
|
super(stack, self.class.options)
|
|
67
74
|
end
|
|
@@ -108,6 +115,9 @@ module Datadog
|
|
|
108
115
|
span.service = service_name(datum[:host], @options)
|
|
109
116
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
110
117
|
|
|
118
|
+
# Tag as an external peer service
|
|
119
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
120
|
+
|
|
111
121
|
# Set analytics sample rate
|
|
112
122
|
if analytics_enabled?
|
|
113
123
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
@@ -145,7 +155,7 @@ module Datadog
|
|
|
145
155
|
end
|
|
146
156
|
|
|
147
157
|
def build_request_options!(datum)
|
|
148
|
-
datadog_configuration(datum[:host]).options_hash
|
|
158
|
+
@default_options.merge(datadog_configuration(datum[:host]).options_hash)
|
|
149
159
|
end
|
|
150
160
|
|
|
151
161
|
def datadog_configuration(host = :default)
|
|
@@ -56,7 +56,7 @@ module Datadog
|
|
|
56
56
|
def instrument(integration_name, options = {}, &block)
|
|
57
57
|
integration = fetch_integration(integration_name)
|
|
58
58
|
|
|
59
|
-
unless integration.nil?
|
|
59
|
+
unless integration.nil? || !integration.default_configuration.enabled
|
|
60
60
|
configuration_name = options[:describes] || :default
|
|
61
61
|
filtered_options = options.reject { |k, _v| k == :describes }
|
|
62
62
|
integration.configure(configuration_name, filtered_options, &block)
|
|
@@ -12,13 +12,18 @@ module Datadog
|
|
|
12
12
|
Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
option :enabled do |o|
|
|
16
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
15
20
|
option :analytics_enabled do |o|
|
|
16
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
21
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
20
25
|
option :analytics_sample_rate do |o|
|
|
21
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
26
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
22
27
|
o.lazy
|
|
23
28
|
end
|
|
24
29
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# Faraday integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'faraday'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_FARADAY_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_FARADAY_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_FARADAY_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'faraday'.freeze
|
|
10
13
|
SPAN_REQUEST = 'faraday.request'.freeze
|
|
11
14
|
end
|