ddtrace 0.16.1 → 0.17.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/Appraisals +3 -3
- data/CHANGELOG.md +24 -2
- data/Rakefile +14 -28
- data/docker-compose.yml +1 -0
- data/docs/GettingStarted.md +302 -263
- data/lib/ddtrace.rb +22 -21
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +4 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +39 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +24 -43
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +6 -7
- data/lib/ddtrace/contrib/active_record/events/sql.rb +10 -8
- data/lib/ddtrace/contrib/active_record/ext.rb +22 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/aws/ext.rb +21 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +11 -9
- data/lib/ddtrace/contrib/aws/integration.rb +32 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +42 -41
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +3 -1
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +7 -3
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +15 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +3 -3
- data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +31 -38
- data/lib/ddtrace/contrib/dalli/quantize.rb +3 -3
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +32 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +20 -27
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +7 -6
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +18 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +30 -39
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/excon/ext.rb +13 -0
- data/lib/ddtrace/contrib/excon/integration.rb +32 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +10 -10
- data/lib/ddtrace/contrib/excon/patcher.rb +14 -30
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +13 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +10 -9
- data/lib/ddtrace/contrib/faraday/patcher.rb +39 -54
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +10 -13
- data/lib/ddtrace/contrib/grape/ext.rb +19 -0
- data/lib/ddtrace/contrib/grape/integration.rb +36 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +24 -24
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +20 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +11 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +33 -41
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
- data/lib/ddtrace/contrib/grpc/ext.rb +14 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +25 -35
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/http/ext.rb +13 -0
- data/lib/ddtrace/contrib/http/integration.rb +32 -0
- data/lib/ddtrace/contrib/http/patcher.rb +10 -58
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +17 -27
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +12 -11
- data/lib/ddtrace/contrib/mysql2/client.rb +8 -6
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +12 -22
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/racecar/event.rb +7 -6
- data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
- data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
- data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +36 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +24 -41
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +39 -0
- data/lib/ddtrace/contrib/rack/ext.rb +18 -0
- data/lib/ddtrace/contrib/rack/integration.rb +32 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +5 -2
- data/lib/ddtrace/contrib/rack/patcher.rb +22 -40
- data/lib/ddtrace/contrib/rails/action_controller.rb +10 -7
- data/lib/ddtrace/contrib/rails/action_controller_patch.rb +1 -0
- data/lib/ddtrace/contrib/rails/active_support.rb +9 -9
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/rails/core_extensions.rb +12 -15
- data/lib/ddtrace/contrib/rails/ext.rb +30 -0
- data/lib/ddtrace/contrib/rails/framework.rb +3 -2
- data/lib/ddtrace/contrib/rails/integration.rb +37 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +56 -63
- data/lib/ddtrace/contrib/rails/railtie.rb +3 -10
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +17 -0
- data/lib/ddtrace/contrib/rake/ext.rb +18 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +7 -8
- data/lib/ddtrace/contrib/rake/integration.rb +36 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +23 -33
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/redis/ext.rb +19 -0
- data/lib/ddtrace/contrib/redis/integration.rb +36 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +21 -29
- data/lib/ddtrace/contrib/redis/tags.rb +3 -3
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +16 -0
- data/lib/ddtrace/contrib/resque/ext.rb +13 -0
- data/lib/ddtrace/contrib/resque/integration.rb +37 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +30 -36
- data/lib/ddtrace/contrib/resque/resque_job.rb +2 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +5 -8
- data/lib/ddtrace/contrib/rest_client/ext.rb +13 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +9 -1
- data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +9 -10
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sequel/database.rb +4 -3
- data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
- data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -3
- data/lib/ddtrace/contrib/sequel/patcher.rb +0 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +19 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +18 -18
- data/lib/ddtrace/contrib/sidekiq/tracer.rb +10 -10
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +3 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +19 -0
- data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +4 -34
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -3
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +6 -5
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +29 -35
- data/lib/ddtrace/encoding.rb +21 -16
- data/lib/ddtrace/span.rb +29 -0
- data/lib/ddtrace/transport.rb +2 -2
- data/lib/ddtrace/version.rb +2 -2
- metadata +74 -6
- data/lib/ddtrace/ext/cache.rb +0 -8
- data/lib/ddtrace/ext/grpc.rb +0 -7
- data/lib/ddtrace/ext/mongo.rb +0 -12
- data/lib/ddtrace/ext/redis.rb +0 -17
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module DelayedJob
|
|
4
|
+
# DelayedJob integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'delayed_job'.freeze
|
|
7
|
+
SERVICE_NAME = 'delayed_job'.freeze
|
|
8
|
+
|
|
9
|
+
SPAN_JOB = 'delayed_job'.freeze
|
|
10
|
+
|
|
11
|
+
TAG_ATTEMPTS = 'delayed_job.attempts'.freeze
|
|
12
|
+
TAG_ID = 'delayed_job.id'.freeze
|
|
13
|
+
TAG_PRIORITY = 'delayed_job.priority'.freeze
|
|
14
|
+
TAG_QUEUE = 'delayed_job.queue'.freeze
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/delayed_job/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/delayed_job/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module DelayedJob
|
|
8
|
+
# Description of DelayedJob integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :delayed_job
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['delayed_job'] && Gem.loaded_specs['delayed_job'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Delayed)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def default_configuration
|
|
23
|
+
Configuration::Settings.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def patcher
|
|
27
|
+
Patcher
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,39 +1,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
|
|
1
4
|
module Datadog
|
|
2
5
|
module Contrib
|
|
3
6
|
module DelayedJob
|
|
4
|
-
#
|
|
7
|
+
# Patcher enables patching of 'delayed_job' module.
|
|
5
8
|
module Patcher
|
|
6
|
-
include
|
|
7
|
-
register_as :delayed_job
|
|
8
|
-
|
|
9
|
-
option :service_name, default: 'delayed_job'.freeze
|
|
10
|
-
option :tracer, default: Datadog.tracer
|
|
11
|
-
|
|
12
|
-
@patched = false
|
|
9
|
+
include Contrib::Patcher
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
def patch
|
|
16
|
-
return @patched if patched? || !defined?(::Delayed)
|
|
11
|
+
module_function
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
add_instrumentation(::Delayed::Worker)
|
|
22
|
-
@patched = true
|
|
23
|
-
rescue => e
|
|
24
|
-
Tracer.log.error("Unable to apply DelayedJob integration: #{e}")
|
|
25
|
-
@patched
|
|
26
|
-
end
|
|
13
|
+
def patched?
|
|
14
|
+
done?(:delayed_job)
|
|
15
|
+
end
|
|
27
16
|
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
def patch
|
|
18
|
+
do_once(:delayed_job) do
|
|
19
|
+
begin
|
|
20
|
+
require 'ddtrace/contrib/delayed_job/plugin'
|
|
21
|
+
add_instrumentation(::Delayed::Worker)
|
|
22
|
+
rescue StandardError => e
|
|
23
|
+
Datadog::Tracer.log.error("Unable to apply DelayedJob integration: #{e}")
|
|
24
|
+
end
|
|
30
25
|
end
|
|
26
|
+
end
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def add_instrumentation(klass)
|
|
35
|
-
klass.plugins << Plugin
|
|
36
|
-
end
|
|
28
|
+
def add_instrumentation(klass)
|
|
29
|
+
klass.plugins << Plugin
|
|
37
30
|
end
|
|
38
31
|
end
|
|
39
32
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'delayed/plugin'
|
|
2
|
+
require 'ddtrace/contrib/delayed_job/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
@@ -8,12 +9,12 @@ module Datadog
|
|
|
8
9
|
def self.instrument(job, &block)
|
|
9
10
|
return block.call(job) unless tracer && tracer.enabled
|
|
10
11
|
|
|
11
|
-
tracer.trace(
|
|
12
|
-
span.set_tag(
|
|
13
|
-
span.set_tag(
|
|
14
|
-
span.set_tag(
|
|
15
|
-
span.set_tag(
|
|
16
|
-
span.span_type = Ext::AppTypes::WORKER
|
|
12
|
+
tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job.name) do |span|
|
|
13
|
+
span.set_tag(Ext::TAG_ID, job.id)
|
|
14
|
+
span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
|
|
15
|
+
span.set_tag(Ext::TAG_PRIORITY, job.priority)
|
|
16
|
+
span.set_tag(Ext::TAG_ATTEMPTS, job.attempts)
|
|
17
|
+
span.span_type = Datadog::Ext::AppTypes::WORKER
|
|
17
18
|
|
|
18
19
|
yield job
|
|
19
20
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/elasticsearch/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Elasticsearch
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Elasticsearch integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :quantize, default: {}
|
|
11
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Elasticsearch
|
|
4
|
+
# Elasticsearch integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'elasticsearch'.freeze
|
|
7
|
+
SERVICE_NAME = 'elasticsearch'.freeze
|
|
8
|
+
|
|
9
|
+
SPAN_QUERY = 'elasticsearch.query'.freeze
|
|
10
|
+
|
|
11
|
+
TAG_BODY = 'elasticsearch.body'.freeze
|
|
12
|
+
TAG_METHOD = 'elasticsearch.method'.freeze
|
|
13
|
+
TAG_PARAMS = 'elasticsearch.params'.freeze
|
|
14
|
+
TAG_URL = 'elasticsearch.url'.freeze
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/elasticsearch/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/elasticsearch/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Elasticsearch
|
|
8
|
+
# Description of Elasticsearch integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :elasticsearch, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['elasticsearch-transport'] \
|
|
16
|
+
&& Gem.loaded_specs['elasticsearch-transport'].version
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.present?
|
|
20
|
+
super && defined?(::Elasticsearch::Transport)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.compatible?
|
|
24
|
+
super && version >= Gem::Version.new('1.0.0')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_configuration
|
|
28
|
+
Configuration::Settings.new
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def patcher
|
|
32
|
+
Patcher
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -1,45 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/ext/net'
|
|
4
|
+
require 'ddtrace/contrib/elasticsearch/ext'
|
|
2
5
|
|
|
3
6
|
module Datadog
|
|
4
7
|
module Contrib
|
|
5
8
|
module Elasticsearch
|
|
6
|
-
|
|
7
|
-
METHOD = 'elasticsearch.method'.freeze
|
|
8
|
-
PARAMS = 'elasticsearch.params'.freeze
|
|
9
|
-
BODY = 'elasticsearch.body'.freeze
|
|
10
|
-
|
|
11
|
-
SERVICE = 'elasticsearch'.freeze
|
|
12
|
-
|
|
13
|
-
# Patcher enables patching of 'elasticsearch/transport' module.
|
|
9
|
+
# Patcher enables patching of 'elasticsearch' module.
|
|
14
10
|
module Patcher
|
|
15
|
-
include
|
|
16
|
-
register_as :elasticsearch, auto_patch: true
|
|
17
|
-
option :service_name, default: SERVICE
|
|
18
|
-
option :quantize, default: {}
|
|
19
|
-
|
|
20
|
-
@patched = false
|
|
11
|
+
include Contrib::Patcher
|
|
21
12
|
|
|
22
13
|
module_function
|
|
23
14
|
|
|
24
|
-
|
|
15
|
+
def patched?
|
|
16
|
+
done?(:elasticsearch)
|
|
17
|
+
end
|
|
18
|
+
|
|
25
19
|
def patch
|
|
26
|
-
|
|
27
|
-
Gem::Version.new(::Elasticsearch::Transport::VERSION) >= Gem::Version.new('1.0.0'))
|
|
20
|
+
do_once(:elasticsearch) do
|
|
28
21
|
begin
|
|
29
22
|
require 'uri'
|
|
30
23
|
require 'json'
|
|
31
24
|
require 'ddtrace/pin'
|
|
32
|
-
require 'ddtrace/ext/app_types'
|
|
33
25
|
require 'ddtrace/contrib/elasticsearch/quantize'
|
|
34
26
|
|
|
35
|
-
patch_elasticsearch_transport_client
|
|
36
|
-
|
|
37
|
-
@patched = true
|
|
27
|
+
patch_elasticsearch_transport_client
|
|
38
28
|
rescue StandardError => e
|
|
39
|
-
Datadog::Tracer.log.error("Unable to apply
|
|
29
|
+
Datadog::Tracer.log.error("Unable to apply Elasticsearch integration: #{e}")
|
|
40
30
|
end
|
|
41
31
|
end
|
|
42
|
-
@patched
|
|
43
32
|
end
|
|
44
33
|
|
|
45
34
|
# rubocop:disable Metrics/MethodLength
|
|
@@ -53,8 +42,15 @@ module Datadog
|
|
|
53
42
|
end
|
|
54
43
|
|
|
55
44
|
def initialize(*args, &block)
|
|
45
|
+
tracer = Datadog.configuration[:elasticsearch][:tracer]
|
|
56
46
|
service = Datadog.configuration[:elasticsearch][:service_name]
|
|
57
|
-
|
|
47
|
+
|
|
48
|
+
pin = Datadog::Pin.new(
|
|
49
|
+
service,
|
|
50
|
+
app: Datadog::Contrib::Elasticsearch::Ext::APP,
|
|
51
|
+
app_type: Datadog::Ext::AppTypes::DB,
|
|
52
|
+
tracer: tracer
|
|
53
|
+
)
|
|
58
54
|
pin.onto(self)
|
|
59
55
|
initialize_without_datadog(*args, &block)
|
|
60
56
|
end
|
|
@@ -74,29 +70,29 @@ module Datadog
|
|
|
74
70
|
|
|
75
71
|
url = full_url.path
|
|
76
72
|
response = nil
|
|
77
|
-
pin.tracer.trace(
|
|
73
|
+
pin.tracer.trace(Datadog::Contrib::Elasticsearch::Ext::SPAN_QUERY) do |span|
|
|
78
74
|
begin
|
|
79
75
|
connection = transport.connections.first
|
|
80
76
|
host = connection.host[:host] if connection
|
|
81
77
|
port = connection.host[:port] if connection
|
|
82
78
|
|
|
83
79
|
span.service = pin.service
|
|
84
|
-
span.span_type = Ext::AppTypes::DB
|
|
80
|
+
span.span_type = Datadog::Ext::AppTypes::DB
|
|
85
81
|
|
|
86
82
|
# load JSON for the following fields unless they're already strings
|
|
87
83
|
params = JSON.generate(params) if params && !params.is_a?(String)
|
|
88
84
|
body = JSON.generate(body) if body && !body.is_a?(String)
|
|
89
85
|
|
|
90
|
-
span.set_tag(
|
|
91
|
-
span.set_tag(
|
|
92
|
-
span.set_tag(
|
|
86
|
+
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_METHOD, method)
|
|
87
|
+
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_URL, url)
|
|
88
|
+
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_PARAMS, params) if params
|
|
93
89
|
if body
|
|
94
90
|
quantize_options = Datadog.configuration[:elasticsearch][:quantize]
|
|
95
91
|
quantized_body = Datadog::Contrib::Elasticsearch::Quantize.format_body(body, quantize_options)
|
|
96
|
-
span.set_tag(
|
|
92
|
+
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_BODY, quantized_body)
|
|
97
93
|
end
|
|
98
|
-
span.set_tag(
|
|
99
|
-
span.set_tag(
|
|
94
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, host) if host
|
|
95
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, port) if port
|
|
100
96
|
|
|
101
97
|
quantized_url = Datadog::Contrib::Elasticsearch::Quantize.format_url(url)
|
|
102
98
|
span.resource = "#{method} #{quantized_url}"
|
|
@@ -105,18 +101,13 @@ module Datadog
|
|
|
105
101
|
ensure
|
|
106
102
|
# the call is still executed
|
|
107
103
|
response = perform_request_without_datadog(*args)
|
|
108
|
-
span.set_tag(
|
|
104
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.status)
|
|
109
105
|
end
|
|
110
106
|
end
|
|
111
107
|
response
|
|
112
108
|
end
|
|
113
109
|
end
|
|
114
110
|
end
|
|
115
|
-
|
|
116
|
-
# patched? tells wether patch has been successfully applied
|
|
117
|
-
def patched?
|
|
118
|
-
@patched
|
|
119
|
-
end
|
|
120
111
|
end
|
|
121
112
|
end
|
|
122
113
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/excon/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Excon
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Excon integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :distributed_tracing, default: false
|
|
11
|
+
option :error_handler, default: nil
|
|
12
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
13
|
+
option :split_by_domain, default: false
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/excon/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/excon/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Excon
|
|
8
|
+
# Description of Excon integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :excon
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['excon'] && Gem.loaded_specs['excon'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Excon)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def default_configuration
|
|
23
|
+
Configuration::Settings.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def patcher
|
|
27
|
+
Patcher
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -3,26 +3,26 @@ require 'ddtrace/ext/http'
|
|
|
3
3
|
require 'ddtrace/ext/net'
|
|
4
4
|
require 'ddtrace/ext/distributed'
|
|
5
5
|
require 'ddtrace/propagation/http_propagator'
|
|
6
|
+
require 'ddtrace/contrib/excon/ext'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
8
9
|
module Contrib
|
|
9
10
|
module Excon
|
|
10
11
|
# Middleware implements an excon-middleware for ddtrace instrumentation
|
|
11
12
|
class Middleware < ::Excon::Middleware::Base
|
|
12
|
-
SPAN_NAME = 'excon.request'.freeze
|
|
13
13
|
DEFAULT_ERROR_HANDLER = lambda do |response|
|
|
14
|
-
Ext::HTTP::ERROR_RANGE.cover?(response[:status])
|
|
14
|
+
Datadog::Ext::HTTP::ERROR_RANGE.cover?(response[:status])
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def initialize(stack, options = {})
|
|
18
18
|
super(stack)
|
|
19
|
-
@options = Datadog.configuration[:excon].merge(options)
|
|
19
|
+
@options = Datadog.configuration[:excon].to_h.merge(options)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def request_call(datum)
|
|
23
23
|
begin
|
|
24
24
|
unless datum.key?(:datadog_span)
|
|
25
|
-
tracer.trace(
|
|
25
|
+
tracer.trace(Ext::SPAN_REQUEST).tap do |span|
|
|
26
26
|
datum[:datadog_span] = span
|
|
27
27
|
annotate!(span, datum)
|
|
28
28
|
propagate!(span, datum) if distributed_tracing?
|
|
@@ -97,11 +97,11 @@ module Datadog
|
|
|
97
97
|
def annotate!(span, datum)
|
|
98
98
|
span.resource = datum[:method].to_s.upcase
|
|
99
99
|
span.service = service_name(datum)
|
|
100
|
-
span.span_type = Ext::HTTP::TYPE
|
|
101
|
-
span.set_tag(Ext::HTTP::URL, datum[:path])
|
|
102
|
-
span.set_tag(Ext::HTTP::METHOD, datum[:method].to_s.upcase)
|
|
103
|
-
span.set_tag(Ext::NET::TARGET_HOST, datum[:host])
|
|
104
|
-
span.set_tag(Ext::NET::TARGET_PORT, datum[:port].to_s)
|
|
100
|
+
span.span_type = Datadog::Ext::HTTP::TYPE
|
|
101
|
+
span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
|
|
102
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
|
|
103
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, datum[:host])
|
|
104
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, datum[:port].to_s)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
def handle_response(datum)
|
|
@@ -114,7 +114,7 @@ module Datadog
|
|
|
114
114
|
if error_handler.call(response)
|
|
115
115
|
span.set_error(["Error #{response[:status]}", response[:body]])
|
|
116
116
|
end
|
|
117
|
-
span.set_tag(Ext::HTTP::STATUS_CODE, response[:status])
|
|
117
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response[:status])
|
|
118
118
|
end
|
|
119
119
|
span.set_error(datum[:error]) if datum.key?(:error)
|
|
120
120
|
span.finish
|