ddtrace 0.36.0 → 0.41.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 +4 -4
- data/.circleci/config.yml +59 -1
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.simplecov +38 -0
- data/Appraisals +131 -6
- data/CHANGELOG.md +198 -1
- data/Rakefile +504 -467
- data/ddtrace.gemspec +7 -0
- data/docker-compose.yml +2 -2
- data/docs/DevelopmentGuide.md +16 -0
- data/docs/GettingStarted.md +192 -111
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/buffer.rb +154 -43
- data/lib/ddtrace/configuration.rb +39 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/options.rb +3 -1
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +32 -4
- 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/redis.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +3 -3
- 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 +4 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +19 -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/dalli/patcher.rb +1 -5
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
- 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 +5 -2
- 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 +4 -0
- data/lib/ddtrace/contrib/extensions.rb +11 -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 +9 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/endpoint.rb +6 -4
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -3
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
- 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 +16 -7
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +163 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -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 +5 -1
- data/lib/ddtrace/contrib/patcher.rb +14 -8
- 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 +42 -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 +56 -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 +17 -12
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -12
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- data/lib/ddtrace/contrib/rails/framework.rb +14 -21
- 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 +15 -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/patcher.rb +1 -1
- data/lib/ddtrace/contrib/redis/tags.rb +4 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- 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 +6 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +4 -2
- 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 +7 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
- 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 +32 -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 +58 -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/contrib/sucker_punch/patcher.rb +1 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/environment.rb +17 -3
- data/lib/ddtrace/ext/diagnostics.rb +3 -0
- data/lib/ddtrace/ext/environment.rb +2 -0
- data/lib/ddtrace/ext/integration.rb +8 -0
- data/lib/ddtrace/ext/runtime.rb +1 -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/pin.rb +25 -2
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -2
- data/lib/ddtrace/runtime/metrics.rb +24 -6
- data/lib/ddtrace/sampler.rb +4 -2
- data/lib/ddtrace/span.rb +162 -27
- data/lib/ddtrace/tracer.rb +18 -12
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +16 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
- data/lib/ddtrace/transport/http/statistics.rb +14 -1
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/transport/traces.rb +7 -2
- data/lib/ddtrace/utils.rb +7 -3
- 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/workers/trace_writer.rb +3 -0
- data/lib/ddtrace/writer.rb +33 -12
- metadata +138 -2
|
@@ -7,13 +7,18 @@ 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
|
|
|
@@ -4,8 +4,11 @@ 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
|
|
10
13
|
SPAN_JOB = 'delayed_job'.freeze
|
|
11
14
|
TAG_ATTEMPTS = 'delayed_job.attempts'.freeze
|
|
@@ -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'
|
|
@@ -37,14 +38,13 @@ module Datadog
|
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def initialize(*args, &block)
|
|
40
|
-
tracer = Datadog.configuration[:elasticsearch][:tracer]
|
|
41
41
|
service = Datadog.configuration[:elasticsearch][:service_name]
|
|
42
42
|
|
|
43
43
|
pin = Datadog::Pin.new(
|
|
44
44
|
service,
|
|
45
45
|
app: Datadog::Contrib::Elasticsearch::Ext::APP,
|
|
46
46
|
app_type: Datadog::Ext::AppTypes::DB,
|
|
47
|
-
tracer: tracer
|
|
47
|
+
tracer: -> { Datadog.configuration[:elasticsearch][:tracer] }
|
|
48
48
|
)
|
|
49
49
|
pin.onto(self)
|
|
50
50
|
initialize_without_datadog(*args, &block)
|
|
@@ -78,6 +78,9 @@ module Datadog
|
|
|
78
78
|
params = JSON.generate(params) if params && !params.is_a?(String)
|
|
79
79
|
body = JSON.generate(body) if body && !body.is_a?(String)
|
|
80
80
|
|
|
81
|
+
# Tag as an external peer service
|
|
82
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
83
|
+
|
|
81
84
|
# Set analytics sample rate
|
|
82
85
|
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
83
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'
|
|
@@ -108,6 +109,9 @@ module Datadog
|
|
|
108
109
|
span.service = service_name(datum[:host], @options)
|
|
109
110
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
110
111
|
|
|
112
|
+
# Tag as an external peer service
|
|
113
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
114
|
+
|
|
111
115
|
# Set analytics sample rate
|
|
112
116
|
if analytics_enabled?
|
|
113
117
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
@@ -56,10 +56,11 @@ 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)
|
|
63
|
+
instrumented_integrations[integration_name] = integration
|
|
63
64
|
|
|
64
65
|
# Add to activation list
|
|
65
66
|
integrations_pending_activation << integration
|
|
@@ -72,6 +73,15 @@ module Datadog
|
|
|
72
73
|
@integrations_pending_activation ||= Set.new
|
|
73
74
|
end
|
|
74
75
|
|
|
76
|
+
def instrumented_integrations
|
|
77
|
+
@instrumented_integrations ||= {}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def reset!
|
|
81
|
+
instrumented_integrations.clear
|
|
82
|
+
super
|
|
83
|
+
end
|
|
84
|
+
|
|
75
85
|
def fetch_integration(name)
|
|
76
86
|
registry[name] ||
|
|
77
87
|
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
|
@@ -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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'faraday'
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/ext/integration'
|
|
3
4
|
require 'ddtrace/ext/net'
|
|
4
5
|
require 'ddtrace/propagation/http_propagator'
|
|
5
6
|
require 'ddtrace/contrib/analytics'
|
|
@@ -16,7 +17,7 @@ module Datadog
|
|
|
16
17
|
|
|
17
18
|
def initialize(app, options = {})
|
|
18
19
|
super(app)
|
|
19
|
-
@options =
|
|
20
|
+
@options = options
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
def call(env)
|
|
@@ -33,7 +34,7 @@ module Datadog
|
|
|
33
34
|
|
|
34
35
|
private
|
|
35
36
|
|
|
36
|
-
attr_reader :app
|
|
37
|
+
attr_reader :app
|
|
37
38
|
|
|
38
39
|
def annotate!(span, env, options)
|
|
39
40
|
span.resource = resource_name(env)
|
|
@@ -41,6 +42,9 @@ module Datadog
|
|
|
41
42
|
span.service = options[:split_by_domain] ? env[:url].host : options[:service_name]
|
|
42
43
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
43
44
|
|
|
45
|
+
# Tag as an external peer service
|
|
46
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
47
|
+
|
|
44
48
|
# Set analytics sample rate
|
|
45
49
|
if Contrib::Analytics.enabled?(options[:analytics_enabled])
|
|
46
50
|
Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate])
|
|
@@ -69,7 +73,9 @@ module Datadog
|
|
|
69
73
|
end
|
|
70
74
|
|
|
71
75
|
def build_request_options!(env)
|
|
72
|
-
datadog_configuration
|
|
76
|
+
datadog_configuration.options_hash # integration level settings
|
|
77
|
+
.merge(datadog_configuration(env[:url].host).options_hash) # per-host override
|
|
78
|
+
.merge(@options) # middleware instance override
|
|
73
79
|
end
|
|
74
80
|
|
|
75
81
|
def datadog_configuration(host = :default)
|
|
@@ -31,7 +31,7 @@ module Datadog
|
|
|
31
31
|
get_option(:service_name),
|
|
32
32
|
app: Ext::APP,
|
|
33
33
|
app_type: Datadog::Ext::AppTypes::WEB,
|
|
34
|
-
tracer: get_option(:tracer)
|
|
34
|
+
tracer: -> { get_option(:tracer) }
|
|
35
35
|
).onto(::Faraday)
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -41,8 +41,20 @@ module Datadog
|
|
|
41
41
|
|
|
42
42
|
def add_default_middleware!
|
|
43
43
|
if target_version >= Gem::Version.new('1.0.0')
|
|
44
|
+
# Patch the default connection (e.g. +Faraday.get+)
|
|
45
|
+
::Faraday.default_connection.use(:ddtrace)
|
|
46
|
+
|
|
47
|
+
# Patch new connection instances (e.g. +Faraday.new+)
|
|
44
48
|
::Faraday::Connection.send(:prepend, Connection)
|
|
45
49
|
else
|
|
50
|
+
# Patch the default connection (e.g. +Faraday.get+)
|
|
51
|
+
#
|
|
52
|
+
# We insert our middleware before the 'adapter', which is
|
|
53
|
+
# always the last handler.
|
|
54
|
+
idx = ::Faraday.default_connection.builder.handlers.size - 1
|
|
55
|
+
::Faraday.default_connection.builder.insert(idx, Middleware)
|
|
56
|
+
|
|
57
|
+
# Patch new connection instances (e.g. +Faraday.new+)
|
|
46
58
|
::Faraday::RackBuilder.send(:prepend, RackBuilder)
|
|
47
59
|
end
|
|
48
60
|
end
|
|
@@ -61,10 +73,6 @@ module Datadog
|
|
|
61
73
|
Upgrade to the configuration API using the migration guide here:
|
|
62
74
|
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
63
75
|
|
|
64
|
-
def tracer=(tracer)
|
|
65
|
-
Datadog.configuration[:faraday][:tracer] = tracer
|
|
66
|
-
end
|
|
67
|
-
|
|
68
76
|
def service_name=(service_name)
|
|
69
77
|
Datadog.configuration[:faraday][:service_name] = service_name
|
|
70
78
|
end
|
|
@@ -8,17 +8,21 @@ module Datadog
|
|
|
8
8
|
module Configuration
|
|
9
9
|
# Custom settings for the Grape 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, nil) }
|
|
17
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
|
|
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
|
|
|
21
|
-
option :enabled, default: true
|
|
22
26
|
option :service_name, default: Ext::SERVICE_NAME
|
|
23
27
|
end
|
|
24
28
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
require 'ddtrace/ext/http'
|
|
2
3
|
require 'ddtrace/ext/errors'
|
|
3
4
|
require 'ddtrace/contrib/analytics'
|
|
@@ -95,7 +96,7 @@ module Datadog
|
|
|
95
96
|
span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
|
|
96
97
|
span.set_tag(Ext::TAG_ROUTE_PATH, path)
|
|
97
98
|
ensure
|
|
98
|
-
span.
|
|
99
|
+
span.start(start)
|
|
99
100
|
span.finish(finish)
|
|
100
101
|
end
|
|
101
102
|
rescue StandardError => e
|
|
@@ -134,7 +135,7 @@ module Datadog
|
|
|
134
135
|
|
|
135
136
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
136
137
|
ensure
|
|
137
|
-
span.
|
|
138
|
+
span.start(start)
|
|
138
139
|
span.finish(finish)
|
|
139
140
|
end
|
|
140
141
|
rescue StandardError => e
|
|
@@ -153,7 +154,8 @@ module Datadog
|
|
|
153
154
|
span = tracer.trace(
|
|
154
155
|
Ext::SPAN_ENDPOINT_RUN_FILTERS,
|
|
155
156
|
service: service_name,
|
|
156
|
-
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
157
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
|
|
158
|
+
start_time: start
|
|
157
159
|
)
|
|
158
160
|
|
|
159
161
|
begin
|
|
@@ -169,7 +171,7 @@ module Datadog
|
|
|
169
171
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
170
172
|
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
171
173
|
ensure
|
|
172
|
-
span.
|
|
174
|
+
span.start(start)
|
|
173
175
|
span.finish(finish)
|
|
174
176
|
end
|
|
175
177
|
rescue StandardError => e
|