ddtrace 0.40.0 → 0.45.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 +148 -130
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.simplecov +3 -0
- data/Appraisals +414 -135
- data/CHANGELOG.md +1112 -342
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +4 -2
- data/README.md +1 -0
- data/Rakefile +231 -29
- data/ddtrace.gemspec +8 -8
- data/docker-compose.yml +30 -0
- data/docs/DevelopmentGuide.md +12 -2
- data/docs/GettingStarted.md +187 -16
- data/lib/ddtrace.rb +10 -0
- data/lib/ddtrace/auto_instrument.rb +3 -0
- data/lib/ddtrace/auto_instrument_base.rb +6 -0
- data/lib/ddtrace/buffer.rb +259 -52
- data/lib/ddtrace/configuration.rb +19 -0
- data/lib/ddtrace/configuration/options.rb +3 -1
- data/lib/ddtrace/configuration/settings.rb +9 -3
- data/lib/ddtrace/context.rb +18 -0
- data/lib/ddtrace/context_provider.rb +17 -5
- data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/event.rb +0 -4
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +4 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +67 -21
- 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/ext.rb +3 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
- 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/auto_instrument.rb +48 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +6 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +0 -1
- data/lib/ddtrace/contrib/aws/services.rb +1 -0
- data/lib/ddtrace/contrib/configurable.rb +2 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +6 -5
- 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 +45 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +4 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +10 -7
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +4 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +11 -1
- data/lib/ddtrace/contrib/extensions.rb +27 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +4 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +1 -1
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +53 -18
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- 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/http/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +152 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +35 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +4 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/patchable.rb +18 -7
- data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -0
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +72 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +32 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +2 -1
- data/lib/ddtrace/contrib/racecar/event.rb +4 -0
- data/lib/ddtrace/contrib/rack/integration.rb +7 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +1 -1
- data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +19 -5
- data/lib/ddtrace/contrib/rails/utils.rb +4 -0
- data/lib/ddtrace/contrib/rake/integration.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +3 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +27 -0
- data/lib/ddtrace/contrib/redis/tags.rb +9 -1
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
- 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/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 +46 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +25 -0
- 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 +1 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +16 -5
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -1
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -2
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -20
- data/lib/ddtrace/contrib/status_code_matcher.rb +67 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +297 -0
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +11 -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/opentracer/distributed_headers.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +18 -6
- data/lib/ddtrace/propagation/http_propagator.rb +17 -2
- data/lib/ddtrace/runtime/identity.rb +4 -5
- data/lib/ddtrace/runtime/metrics.rb +6 -2
- 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/adapters/net.rb +8 -2
- 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/runtime_metrics.rb +7 -3
- data/lib/ddtrace/writer.rb +19 -1
- metadata +111 -19
|
@@ -42,16 +42,27 @@ module Datadog
|
|
|
42
42
|
|
|
43
43
|
def patch
|
|
44
44
|
if !self.class.patchable? || patcher.nil?
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
return {
|
|
46
|
+
name: self.class.name,
|
|
47
|
+
available: self.class.available?,
|
|
48
|
+
loaded: self.class.loaded?,
|
|
49
|
+
compatible: self.class.compatible?,
|
|
50
|
+
patchable: self.class.patchable?
|
|
51
|
+
}
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
patcher.patch
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Can the patch for this integration be applied automatically?
|
|
59
|
+
# For example: test integrations should only be applied
|
|
60
|
+
# by the user explicitly setting `c.use :rspec`
|
|
61
|
+
# and rails sub-modules are auto-instrumented by enabling rails
|
|
62
|
+
# so auto-instrumenting them on their own will cause changes in
|
|
63
|
+
# service naming behavior
|
|
64
|
+
def auto_instrument?
|
|
65
|
+
true
|
|
55
66
|
end
|
|
56
67
|
end
|
|
57
68
|
end
|
|
@@ -90,6 +90,9 @@ module Datadog
|
|
|
90
90
|
set_nilable_tag!(span, :http_proxy, Ext::TAG_PROXY)
|
|
91
91
|
set_nilable_tag!(span, :model_version, Ext::TAG_MODEL_VERSION)
|
|
92
92
|
|
|
93
|
+
# Tag as an external peer service
|
|
94
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
95
|
+
|
|
93
96
|
# Set analytics sample rate
|
|
94
97
|
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
95
98
|
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/qless/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Qless
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Qless integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate do |o|
|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :tag_job_data do |o|
|
|
21
|
+
o.default { env_to_bool(Ext::ENV_TAG_JOB_DATA, false) }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
option :tag_job_tags do |o|
|
|
26
|
+
o.default { env_to_bool(Ext::ENV_TAG_JOB_TAGS, false) }
|
|
27
|
+
o.lazy
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Qless
|
|
4
|
+
# Qless integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'qless'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_QLESS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_QLESS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
ENV_TAG_JOB_DATA = 'DD_QLESS_TAG_JOB_DATA'.freeze
|
|
10
|
+
ENV_TAG_JOB_TAGS = 'DD_QLESS_TAG_JOB_TAGS'.freeze
|
|
11
|
+
SERVICE_NAME = 'qless'.freeze
|
|
12
|
+
SPAN_JOB = 'qless.job'.freeze
|
|
13
|
+
TAG_JOB_ID = 'qless.job.id'.freeze
|
|
14
|
+
TAG_JOB_DATA = 'qless.job.data'.freeze
|
|
15
|
+
TAG_JOB_QUEUE = 'qless.job.queue'.freeze
|
|
16
|
+
TAG_JOB_TAGS = 'qless.job.tags'.freeze
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/qless/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/qless/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Qless
|
|
8
|
+
# Description of Qless integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
MINIMUM_VERSION = Gem::Version.new('0.10.0')
|
|
13
|
+
|
|
14
|
+
register_as :qless, auto_patch: true
|
|
15
|
+
|
|
16
|
+
def self.version
|
|
17
|
+
Gem.loaded_specs['qless'] && Gem.loaded_specs['qless'].version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.loaded?
|
|
21
|
+
!defined?(::Qless).nil?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.compatible?
|
|
25
|
+
super && version >= MINIMUM_VERSION
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def default_configuration
|
|
29
|
+
Configuration::Settings.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def patcher
|
|
33
|
+
Patcher
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Qless
|
|
7
|
+
# Patcher enables patching of 'qless' 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
|
+
require_relative 'qless_job'
|
|
19
|
+
require_relative 'tracer_cleaner'
|
|
20
|
+
|
|
21
|
+
# Instrument all Qless Workers
|
|
22
|
+
::Qless::Workers::BaseWorker.class_eval do
|
|
23
|
+
# These are executed in inverse order of listing here
|
|
24
|
+
include QlessJob
|
|
25
|
+
include TracerCleaner
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def get_option(option)
|
|
30
|
+
Datadog.configuration[:qless].get_option(option)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require 'ddtrace/ext/app_types'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
3
|
+
require 'qless'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Qless
|
|
8
|
+
# Uses Qless job hooks to create traces
|
|
9
|
+
module QlessJob
|
|
10
|
+
def around_perform(job)
|
|
11
|
+
return super unless datadog_configuration && tracer
|
|
12
|
+
tracer.trace(Ext::SPAN_JOB, span_options) do |span|
|
|
13
|
+
span.resource = job.klass_name
|
|
14
|
+
span.span_type = Datadog::Ext::AppTypes::WORKER
|
|
15
|
+
span.set_tag(Ext::TAG_JOB_ID, job.jid)
|
|
16
|
+
span.set_tag(Ext::TAG_JOB_QUEUE, job.queue_name)
|
|
17
|
+
|
|
18
|
+
tag_job_tags = datadog_configuration[:tag_job_tags]
|
|
19
|
+
span.set_tag(Ext::TAG_JOB_TAGS, job.tags) if tag_job_tags
|
|
20
|
+
|
|
21
|
+
tag_job_data = datadog_configuration[:tag_job_data]
|
|
22
|
+
if tag_job_data && !job.data.empty?
|
|
23
|
+
job_data = job.data.with_indifferent_access
|
|
24
|
+
formatted_data = job_data.except(:tags).map do |key, value|
|
|
25
|
+
"#{key}:#{value}".underscore
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
span.set_tag(Ext::TAG_JOB_DATA, formatted_data)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Set analytics sample rate
|
|
32
|
+
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
33
|
+
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Measure service stats
|
|
37
|
+
Contrib::Analytics.set_measured(span)
|
|
38
|
+
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def after_fork
|
|
44
|
+
configuration = Datadog.configuration[:qless]
|
|
45
|
+
return if configuration.nil?
|
|
46
|
+
|
|
47
|
+
# Add a pin, marking the job as forked.
|
|
48
|
+
# Used to trigger shutdown in forks for performance reasons.
|
|
49
|
+
# Cleanup happens in the TracerCleaner class
|
|
50
|
+
Datadog::Pin.new(
|
|
51
|
+
configuration[:service_name],
|
|
52
|
+
config: { forked: true }
|
|
53
|
+
).onto(::Qless)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def span_options
|
|
59
|
+
{ service: datadog_configuration[:service_name] }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def tracer
|
|
63
|
+
datadog_configuration.tracer
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def datadog_configuration
|
|
67
|
+
Datadog.configuration[:qless]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Qless
|
|
4
|
+
# Shutdown Tracer in forks for performance reasons
|
|
5
|
+
module TracerCleaner
|
|
6
|
+
def around_perform(job)
|
|
7
|
+
return super unless datadog_configuration && tracer
|
|
8
|
+
|
|
9
|
+
super.tap do
|
|
10
|
+
tracer.shutdown! if forked?
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def forked?
|
|
17
|
+
pin = Datadog::Pin.get_from(::Qless)
|
|
18
|
+
return false unless pin
|
|
19
|
+
pin.config[:forked] == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def tracer
|
|
23
|
+
datadog_configuration.tracer
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def datadog_configuration
|
|
27
|
+
Datadog.configuration[:qless]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -10,7 +10,8 @@ module Datadog
|
|
|
10
10
|
def call(job)
|
|
11
11
|
trace_options = {
|
|
12
12
|
service: configuration[:service_name],
|
|
13
|
-
span_type: Datadog::Ext::AppTypes::WORKER
|
|
13
|
+
span_type: Datadog::Ext::AppTypes::WORKER,
|
|
14
|
+
on_error: configuration[:error_handler]
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/analytics'
|
|
2
2
|
require 'ddtrace/contrib/active_support/notifications/event'
|
|
3
3
|
require 'ddtrace/contrib/racecar/ext'
|
|
4
|
+
require 'ddtrace/ext/integration'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -37,6 +38,9 @@ module Datadog
|
|
|
37
38
|
span.service = configuration[:service_name]
|
|
38
39
|
span.resource = payload[:consumer_class]
|
|
39
40
|
|
|
41
|
+
# Tag as an external peer service
|
|
42
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
43
|
+
|
|
40
44
|
# Set analytics sample rate
|
|
41
45
|
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
42
46
|
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/rack/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/rack/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
tracer.provider.context = context if context.trace_id
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
#
|
|
56
|
+
# Create a root Span to keep track of frontend web servers
|
|
57
57
|
# (i.e. Apache, nginx) if the header is properly set
|
|
58
58
|
frontend_span = compute_queue_time(env, tracer)
|
|
59
59
|
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
|
-
#
|
|
4
|
+
# Retrieves the time spent in an upstream proxy
|
|
5
|
+
# for the current Rack request.
|
|
6
|
+
#
|
|
7
|
+
# This time captures the request delay introduced but
|
|
8
|
+
# such proxy before the request made it to the Ruby
|
|
9
|
+
# process.
|
|
5
10
|
module QueueTime
|
|
6
11
|
REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
|
|
7
12
|
QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'ddtrace'
|
|
2
|
+
|
|
3
|
+
# Railtie to include AutoInstrumentation in rails loading
|
|
4
|
+
class DatadogAutoInstrumentRailtie < Rails::Railtie
|
|
5
|
+
# we want to load before config initializers so that any user supplied config
|
|
6
|
+
# in config/initializers/datadog.rb will take precedence
|
|
7
|
+
initializer 'datadog.start_tracer', before: :load_config_initializers do
|
|
8
|
+
Datadog::Contrib::AutoInstrument.patch_all
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -53,16 +53,30 @@ module Datadog
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def add_logger(app)
|
|
56
|
+
should_warn = true
|
|
56
57
|
# check if lograge key exists
|
|
57
|
-
|
|
58
|
+
# Note: Rails executes initializers sequentially based on alphabetical order,
|
|
59
|
+
# and lograge config could occur after dd config.
|
|
60
|
+
# Checking for `app.config.lograge.enabled` may yield a false negative.
|
|
61
|
+
# Instead we should naively add custom options if `config.lograge` exists from the lograge Railtie,
|
|
62
|
+
# since the custom options get ignored without lograge explicitly being enabled.
|
|
63
|
+
# See: https://github.com/roidrage/lograge/blob/1729eab7956bb95c5992e4adab251e4f93ff9280/lib/lograge/railtie.rb#L7-L12
|
|
64
|
+
if app.config.respond_to?(:lograge)
|
|
58
65
|
Datadog::Contrib::Rails::LogInjection.add_lograge_logger(app)
|
|
59
|
-
|
|
66
|
+
should_warn = false
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# if lograge isn't set, check if tagged logged is enabled.
|
|
60
70
|
# if so, add proc that injects trace identifiers for tagged logging.
|
|
61
|
-
|
|
71
|
+
if (logger = app.config.logger) &&
|
|
72
|
+
defined?(::ActiveSupport::TaggedLogging) &&
|
|
73
|
+
logger.is_a?(::ActiveSupport::TaggedLogging)
|
|
74
|
+
|
|
62
75
|
Datadog::Contrib::Rails::LogInjection.add_as_tagged_logging_logger(app)
|
|
63
|
-
|
|
64
|
-
Datadog.logger.warn("Unabe to enable Datadog Trace context, Logger #{logger} is not supported")
|
|
76
|
+
should_warn = false
|
|
65
77
|
end
|
|
78
|
+
|
|
79
|
+
Datadog.logger.warn("Unable to enable Datadog Trace context, Logger #{logger} is not supported") if should_warn
|
|
66
80
|
end
|
|
67
81
|
|
|
68
82
|
def patch_after_intialize
|
|
@@ -4,6 +4,8 @@ module Datadog
|
|
|
4
4
|
module Contrib
|
|
5
5
|
module Redis
|
|
6
6
|
module Configuration
|
|
7
|
+
UNIX_SCHEME = 'unix'.freeze
|
|
8
|
+
|
|
7
9
|
# Converts Symbols, Strings, and Hashes to a normalized connection settings Hash.
|
|
8
10
|
class Resolver < Contrib::Configuration::Resolver
|
|
9
11
|
def resolve(key_or_hash)
|
|
@@ -13,7 +15,7 @@ module Datadog
|
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def normalize(hash)
|
|
16
|
-
return { url: hash[:url] } if hash[:scheme] ==
|
|
18
|
+
return { url: hash[:url] } if hash[:scheme] == UNIX_SCHEME
|
|
17
19
|
|
|
18
20
|
# Connexion strings are always converted to host, port, db and scheme
|
|
19
21
|
# but the host, port, db and scheme will generate the :url only after
|