ddtrace 0.35.2 → 0.40.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/.rubocop.yml +4 -0
- data/.simplecov +38 -0
- data/Appraisals +139 -12
- data/CHANGELOG.md +185 -1
- data/Rakefile +524 -464
- data/ddtrace.gemspec +6 -0
- data/docker-compose.yml +37 -2
- data/docs/DevelopmentGuide.md +16 -0
- data/docs/GettingStarted.md +192 -111
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/configuration.rb +36 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +27 -3
- 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/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 +1 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- 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/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 +1 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/extensions.rb +39 -5
- 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 +5 -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/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 +1 -3
- 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 +12 -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 +160 -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/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -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/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/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 -11
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- data/lib/ddtrace/contrib/rails/framework.rb +52 -46
- data/lib/ddtrace/contrib/rails/integration.rb +1 -1
- 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/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 +2 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
- 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/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/pin.rb +39 -15
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/runtime/metrics.rb +18 -4
- data/lib/ddtrace/sampler.rb +2 -0
- data/lib/ddtrace/span.rb +10 -0
- data/lib/ddtrace/tracer.rb +15 -8
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
- 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/response.rb +11 -0
- data/lib/ddtrace/version.rb +2 -2
- 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 +124 -4
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/contrib/integration'
|
|
4
|
+
require 'ddtrace/contrib/que/ext'
|
|
5
|
+
require 'ddtrace/contrib/que/configuration/settings'
|
|
6
|
+
require 'ddtrace/contrib/que/patcher'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Contrib
|
|
10
|
+
module Que
|
|
11
|
+
# Description of Que integration
|
|
12
|
+
class Integration
|
|
13
|
+
include Datadog::Contrib::Integration
|
|
14
|
+
|
|
15
|
+
MINIMUM_VERSION = Gem::Version.new('1.0.0.beta2')
|
|
16
|
+
|
|
17
|
+
register_as :que, auto_patch: true
|
|
18
|
+
|
|
19
|
+
def self.version
|
|
20
|
+
Gem.loaded_specs[Datadog::Contrib::Que::Ext::APP] &&
|
|
21
|
+
Gem.loaded_specs[Datadog::Contrib::Que::Ext::APP].version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.loaded?
|
|
25
|
+
!defined?(::Que).nil?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.compatible?
|
|
29
|
+
super && version >= MINIMUM_VERSION
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def default_configuration
|
|
33
|
+
Configuration::Settings.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def patcher
|
|
37
|
+
Patcher
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/contrib/que/tracer'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Que
|
|
8
|
+
# Patcher enables patching of 'que' module.
|
|
9
|
+
module Patcher
|
|
10
|
+
include Datadog::Contrib::Patcher
|
|
11
|
+
|
|
12
|
+
module_function
|
|
13
|
+
|
|
14
|
+
def target_version
|
|
15
|
+
Integration.version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def patch
|
|
19
|
+
::Que.job_middleware.push(Que::Tracer.new)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/contrib/analytics'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Que
|
|
8
|
+
# Tracer is a Que's server-side middleware which traces executed jobs
|
|
9
|
+
class Tracer
|
|
10
|
+
def call(job)
|
|
11
|
+
trace_options = {
|
|
12
|
+
service: configuration[:service_name],
|
|
13
|
+
span_type: Datadog::Ext::AppTypes::WORKER
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
|
|
17
|
+
request_span.resource = job.class.name.to_s
|
|
18
|
+
request_span.set_tag(Ext::TAG_JOB_QUEUE, job.que_attrs[:queue])
|
|
19
|
+
request_span.set_tag(Ext::TAG_JOB_ID, job.que_attrs[:id])
|
|
20
|
+
request_span.set_tag(Ext::TAG_JOB_PRIORITY, job.que_attrs[:priority])
|
|
21
|
+
request_span.set_tag(Ext::TAG_JOB_ERROR_COUNT, job.que_attrs[:error_count])
|
|
22
|
+
request_span.set_tag(Ext::TAG_JOB_RUN_AT, job.que_attrs[:run_at])
|
|
23
|
+
request_span.set_tag(Ext::TAG_JOB_EXPIRED_AT, job.que_attrs[:expired_at])
|
|
24
|
+
request_span.set_tag(Ext::TAG_JOB_FINISHED_AT, job.que_attrs[:finished_at])
|
|
25
|
+
request_span.set_tag(Ext::TAG_JOB_ARGS, job.que_attrs[:args]) if configuration[:tag_args]
|
|
26
|
+
request_span.set_tag(Ext::TAG_JOB_DATA, job.que_attrs[:data]) if configuration[:tag_data]
|
|
27
|
+
|
|
28
|
+
set_sample_rate(request_span)
|
|
29
|
+
Contrib::Analytics.set_measured(request_span)
|
|
30
|
+
|
|
31
|
+
yield
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def set_sample_rate(request_span)
|
|
38
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
39
|
+
Contrib::Analytics.set_sample_rate(
|
|
40
|
+
request_span,
|
|
41
|
+
configuration[:analytics_sample_rate]
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def tracer
|
|
47
|
+
configuration[:tracer]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def configuration
|
|
51
|
+
Datadog.configuration[Datadog::Contrib::Que::Ext::APP.to_sym]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Racecar 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/contrib/racecar/events/batch'
|
|
2
2
|
require 'ddtrace/contrib/racecar/events/message'
|
|
3
|
+
require 'ddtrace/contrib/racecar/events/consume'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
5
6
|
module Contrib
|
|
@@ -7,6 +8,7 @@ module Datadog
|
|
|
7
8
|
# Defines collection of instrumented Racecar events
|
|
8
9
|
module Events
|
|
9
10
|
ALL = [
|
|
11
|
+
Events::Consume,
|
|
10
12
|
Events::Batch,
|
|
11
13
|
Events::Message
|
|
12
14
|
].freeze
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ddtrace/contrib/racecar/ext'
|
|
2
|
+
require 'ddtrace/contrib/racecar/event'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Racecar
|
|
7
|
+
module Events
|
|
8
|
+
# Defines instrumentation for main_loop.racecar event
|
|
9
|
+
module Consume
|
|
10
|
+
include Racecar::Event
|
|
11
|
+
|
|
12
|
+
EVENT_NAME = 'main_loop.racecar'.freeze
|
|
13
|
+
|
|
14
|
+
module_function
|
|
15
|
+
|
|
16
|
+
def event_name
|
|
17
|
+
self::EVENT_NAME
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def span_name
|
|
21
|
+
Ext::SPAN_CONSUME
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -4,9 +4,13 @@ module Datadog
|
|
|
4
4
|
# Racecar integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'racecar'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_RACECAR_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACECAR_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_RACECAR_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'racecar'.freeze
|
|
13
|
+
SPAN_CONSUME = 'racecar.consume'.freeze
|
|
10
14
|
SPAN_BATCH = 'racecar.batch'.freeze
|
|
11
15
|
SPAN_MESSAGE = 'racecar.message'.freeze
|
|
12
16
|
TAG_CONSUMER = 'kafka.consumer'.freeze
|
|
@@ -14,13 +14,18 @@ module Datadog
|
|
|
14
14
|
]
|
|
15
15
|
}.freeze
|
|
16
16
|
|
|
17
|
+
option :enabled do |o|
|
|
18
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
19
|
+
o.lazy
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
option :analytics_enabled do |o|
|
|
18
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
23
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
|
|
19
24
|
o.lazy
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
option :analytics_sample_rate do |o|
|
|
23
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
28
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
24
29
|
o.lazy
|
|
25
30
|
end
|
|
26
31
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# Rack integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rack'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_RACK_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
|
|
10
13
|
SERVICE_NAME = 'rack'.freeze
|
|
11
14
|
SPAN_HTTP_SERVER_QUEUE = 'http_server.queue'.freeze
|
|
@@ -4,6 +4,8 @@ require 'ddtrace/propagation/http_propagator'
|
|
|
4
4
|
require 'ddtrace/contrib/analytics'
|
|
5
5
|
require 'ddtrace/contrib/rack/ext'
|
|
6
6
|
require 'ddtrace/contrib/rack/request_queue'
|
|
7
|
+
require 'ddtrace/environment'
|
|
8
|
+
require 'date'
|
|
7
9
|
|
|
8
10
|
module Datadog
|
|
9
11
|
module Contrib
|
|
@@ -98,23 +100,26 @@ module Datadog
|
|
|
98
100
|
request_span.set_error(e) unless request_span.nil?
|
|
99
101
|
raise e
|
|
100
102
|
ensure
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
if request_span
|
|
104
|
+
# Rack is a really low level interface and it doesn't provide any
|
|
105
|
+
# advanced functionality like routers. Because of that, we assume that
|
|
106
|
+
# the underlying framework or application has more knowledge about
|
|
107
|
+
# the result for this request; `resource` and `tags` are expected to
|
|
108
|
+
# be set in another level but if they're missing, reasonable defaults
|
|
109
|
+
# are used.
|
|
110
|
+
set_request_tags!(request_span, env, status, headers, response, original_env || env)
|
|
111
|
+
|
|
112
|
+
# ensure the request_span is finished and the context reset;
|
|
113
|
+
# this assumes that the Rack middleware creates a root span
|
|
114
|
+
request_span.finish
|
|
115
|
+
end
|
|
116
|
+
|
|
112
117
|
frontend_span.finish unless frontend_span.nil?
|
|
113
118
|
|
|
114
119
|
# TODO: Remove this once we change how context propagation works. This
|
|
115
120
|
# ensures we clean thread-local variables on each HTTP request avoiding
|
|
116
121
|
# memory leaks.
|
|
117
|
-
tracer.provider.context = Datadog::Context.new
|
|
122
|
+
tracer.provider.context = Datadog::Context.new if tracer
|
|
118
123
|
end
|
|
119
124
|
|
|
120
125
|
def resource_name_for(env, status)
|
|
@@ -19,8 +19,13 @@ module Datadog
|
|
|
19
19
|
analytics_sample_rate
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
option :enabled do |o|
|
|
23
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
24
|
+
o.lazy
|
|
25
|
+
end
|
|
26
|
+
|
|
22
27
|
option :analytics_enabled do |o|
|
|
23
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
28
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
|
|
24
29
|
o.lazy
|
|
25
30
|
o.on_set do |value|
|
|
26
31
|
# Update ActionPack analytics too
|
|
@@ -29,7 +34,7 @@ module Datadog
|
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
option :analytics_sample_rate do |o|
|
|
32
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
37
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
33
38
|
o.lazy
|
|
34
39
|
o.on_set do |value|
|
|
35
40
|
# Update ActionPack analytics too
|
|
@@ -77,15 +82,9 @@ module Datadog
|
|
|
77
82
|
end
|
|
78
83
|
end
|
|
79
84
|
|
|
80
|
-
option :
|
|
81
|
-
o.
|
|
82
|
-
o.
|
|
83
|
-
Datadog.configuration[:action_cable][:tracer] = value
|
|
84
|
-
Datadog.configuration[:active_record][:tracer] = value
|
|
85
|
-
Datadog.configuration[:active_support][:tracer] = value
|
|
86
|
-
Datadog.configuration[:action_pack][:tracer] = value
|
|
87
|
-
Datadog.configuration[:action_view][:tracer] = value
|
|
88
|
-
end
|
|
85
|
+
option :log_injection do |o|
|
|
86
|
+
o.default { env_to_bool(Ext::ENV_LOGS_INJECTION_ENABLED, false) }
|
|
87
|
+
o.lazy
|
|
89
88
|
end
|
|
90
89
|
end
|
|
91
90
|
end
|
|
@@ -4,9 +4,13 @@ module Datadog
|
|
|
4
4
|
# Rails integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rails'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_RAILS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RAILS_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_RAILS_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
ENV_DISABLE = 'DISABLE_DATADOG_RAILS'.freeze
|
|
13
|
+
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'.freeze
|
|
10
14
|
end
|
|
11
15
|
end
|
|
12
16
|
end
|
|
@@ -19,32 +19,40 @@ module Datadog
|
|
|
19
19
|
# - handle configuration entries which are specific to Datadog tracing
|
|
20
20
|
# - instrument parts of the framework when needed
|
|
21
21
|
module Framework
|
|
22
|
-
# configure
|
|
22
|
+
# After the Rails application finishes initializing, we configure the Rails
|
|
23
|
+
# integration and all its sub-components with the application information
|
|
24
|
+
# available.
|
|
25
|
+
# We do this after the initialization because not all the information we
|
|
26
|
+
# require is available before then.
|
|
23
27
|
def self.setup
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
# NOTE: #configure has the side effect of rebuilding trace components.
|
|
29
|
+
# During a typical Rails application lifecycle, we will see trace
|
|
30
|
+
# components initialized twice because of this. This is necessary
|
|
31
|
+
# because key configuration is not available until after the Rails
|
|
32
|
+
# application has fully loaded, and some of this configuration is
|
|
33
|
+
# used to reconfigure tracer components with Rails-sourced defaults.
|
|
34
|
+
# This is a trade-off we take to get nice defaults.
|
|
35
|
+
Datadog.configure do |datadog_config|
|
|
36
|
+
rails_config = config_with_defaults(datadog_config)
|
|
37
|
+
|
|
38
|
+
# By default, default service would be guessed from the script
|
|
39
|
+
# being executed, but here we know better, get it from Rails config.
|
|
40
|
+
# Don't set this if service has been explicitly provided by the user.
|
|
41
|
+
datadog_config.service ||= rails_config[:service_name]
|
|
42
|
+
|
|
43
|
+
activate_rack!(datadog_config, rails_config)
|
|
44
|
+
activate_action_cable!(datadog_config, rails_config)
|
|
45
|
+
activate_active_support!(datadog_config, rails_config)
|
|
46
|
+
activate_action_pack!(datadog_config, rails_config)
|
|
47
|
+
activate_action_view!(datadog_config, rails_config)
|
|
48
|
+
activate_active_record!(datadog_config, rails_config)
|
|
41
49
|
end
|
|
42
50
|
end
|
|
43
51
|
|
|
44
|
-
def self.config_with_defaults
|
|
52
|
+
def self.config_with_defaults(datadog_config)
|
|
45
53
|
# We set defaults here instead of in the patcher because we need to wait
|
|
46
54
|
# for the Rails application to be fully initialized.
|
|
47
|
-
|
|
55
|
+
datadog_config[:rails].tap do |config|
|
|
48
56
|
config[:service_name] ||= (Datadog.configuration.service || Utils.app_name)
|
|
49
57
|
config[:database_service] ||= "#{config[:service_name]}-#{Contrib::ActiveRecord::Utils.adapter_name}"
|
|
50
58
|
config[:controller_service] ||= config[:service_name]
|
|
@@ -52,64 +60,62 @@ module Datadog
|
|
|
52
60
|
end
|
|
53
61
|
end
|
|
54
62
|
|
|
55
|
-
def self.activate_rack!(
|
|
56
|
-
|
|
63
|
+
def self.activate_rack!(datadog_config, rails_config)
|
|
64
|
+
datadog_config.use(
|
|
57
65
|
:rack,
|
|
58
|
-
tracer: config[:tracer],
|
|
59
66
|
application: ::Rails.application,
|
|
60
|
-
service_name:
|
|
61
|
-
middleware_names:
|
|
62
|
-
distributed_tracing:
|
|
67
|
+
service_name: rails_config[:service_name],
|
|
68
|
+
middleware_names: rails_config[:middleware_names],
|
|
69
|
+
distributed_tracing: rails_config[:distributed_tracing]
|
|
63
70
|
)
|
|
64
71
|
end
|
|
65
72
|
|
|
66
|
-
def self.activate_active_support!(
|
|
73
|
+
def self.activate_active_support!(datadog_config, rails_config)
|
|
67
74
|
return unless defined?(::ActiveSupport)
|
|
68
75
|
|
|
69
|
-
|
|
76
|
+
datadog_config.use(
|
|
70
77
|
:active_support,
|
|
71
|
-
cache_service:
|
|
72
|
-
tracer: config[:tracer]
|
|
78
|
+
cache_service: rails_config[:cache_service]
|
|
73
79
|
)
|
|
74
80
|
end
|
|
75
81
|
|
|
76
|
-
def self.activate_action_cable!(
|
|
82
|
+
def self.activate_action_cable!(datadog_config, rails_config)
|
|
77
83
|
return unless defined?(::ActionCable)
|
|
78
84
|
|
|
79
|
-
|
|
85
|
+
datadog_config.use(
|
|
80
86
|
:action_cable,
|
|
81
|
-
service_name: "#{
|
|
82
|
-
tracer: config[:tracer]
|
|
87
|
+
service_name: "#{rails_config[:service_name]}-#{Contrib::ActionCable::Ext::SERVICE_NAME}"
|
|
83
88
|
)
|
|
84
89
|
end
|
|
85
90
|
|
|
86
|
-
def self.activate_action_pack!(
|
|
91
|
+
def self.activate_action_pack!(datadog_config, rails_config)
|
|
87
92
|
return unless defined?(::ActionPack)
|
|
88
93
|
|
|
89
|
-
|
|
94
|
+
# TODO: This is configuring ActionPack but not patching. It will queue ActionPack
|
|
95
|
+
# for patching, but patching won't take place until Datadog.configure completes.
|
|
96
|
+
# Should we manually patch here?
|
|
97
|
+
|
|
98
|
+
datadog_config.use(
|
|
90
99
|
:action_pack,
|
|
91
|
-
service_name:
|
|
92
|
-
tracer: config[:tracer]
|
|
100
|
+
service_name: rails_config[:service_name]
|
|
93
101
|
)
|
|
94
102
|
end
|
|
95
103
|
|
|
96
|
-
def self.activate_action_view!(
|
|
104
|
+
def self.activate_action_view!(datadog_config, rails_config)
|
|
97
105
|
return unless defined?(::ActionView)
|
|
98
106
|
|
|
99
|
-
|
|
107
|
+
datadog_config.use(
|
|
100
108
|
:action_view,
|
|
101
|
-
service_name:
|
|
102
|
-
tracer: config[:tracer]
|
|
109
|
+
service_name: rails_config[:service_name]
|
|
103
110
|
)
|
|
104
111
|
end
|
|
105
112
|
|
|
106
|
-
def self.activate_active_record!(
|
|
113
|
+
def self.activate_active_record!(datadog_config, rails_config)
|
|
107
114
|
return unless defined?(::ActiveRecord)
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
datadog_config.use(
|
|
110
117
|
:active_record,
|
|
111
|
-
service_name:
|
|
112
|
-
tracer: config[:tracer]
|
|
118
|
+
service_name: rails_config[:database_service]
|
|
113
119
|
)
|
|
114
120
|
end
|
|
115
121
|
end
|