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
|
@@ -6,19 +6,12 @@ module Datadog
|
|
|
6
6
|
# Railtie class initializes
|
|
7
7
|
class Railtie < Rails::Railtie
|
|
8
8
|
# Add the trace middleware to the application stack
|
|
9
|
-
initializer 'datadog.
|
|
10
|
-
|
|
11
|
-
# Insert right after Rails exception handling middleware, because if it's before,
|
|
12
|
-
# it catches and swallows the error. If it's too far after, custom middleware can find itself
|
|
13
|
-
# between, and raise exceptions that don't end up getting tagged on the request properly (e.g lost stack trace.)
|
|
14
|
-
app.middleware.insert_after(ActionDispatch::ShowExceptions, Datadog::Contrib::Rails::ExceptionMiddleware)
|
|
9
|
+
initializer 'datadog.before_intialize' do |app|
|
|
10
|
+
Datadog::Contrib::Rails::Patcher.before_intialize(app)
|
|
15
11
|
end
|
|
16
12
|
|
|
17
13
|
config.after_initialize do
|
|
18
|
-
Datadog::Contrib::Rails::
|
|
19
|
-
Datadog::Contrib::Rails::ActionController.instrument
|
|
20
|
-
Datadog::Contrib::Rails::ActionView.instrument
|
|
21
|
-
Datadog::Contrib::Rails::ActiveSupport.instrument
|
|
14
|
+
Datadog::Contrib::Rails::Patcher.after_intialize(self)
|
|
22
15
|
end
|
|
23
16
|
end
|
|
24
17
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/rake/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Rake
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Rake integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled, default: true
|
|
11
|
+
option :quantize, default: {}
|
|
12
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Rake
|
|
4
|
+
# Rake integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'rake'.freeze
|
|
7
|
+
SERVICE_NAME = 'rake'.freeze
|
|
8
|
+
|
|
9
|
+
SPAN_INVOKE = 'rake.invoke'.freeze
|
|
10
|
+
SPAN_EXECUTE = 'rake.execute'.freeze
|
|
11
|
+
|
|
12
|
+
TAG_EXECUTE_ARGS = 'rake.execute.args'.freeze
|
|
13
|
+
TAG_INVOKE_ARGS = 'rake.invoke.args'.freeze
|
|
14
|
+
TAG_TASK_ARG_NAMES = 'rake.task.arg_names'.freeze
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
require 'ddtrace/contrib/rake/ext'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Contrib
|
|
3
5
|
module Rake
|
|
4
6
|
# Instrumentation for Rake tasks
|
|
5
7
|
module Instrumentation
|
|
6
|
-
SPAN_NAME_INVOKE = 'rake.invoke'.freeze
|
|
7
|
-
SPAN_NAME_EXECUTE = 'rake.execute'.freeze
|
|
8
|
-
|
|
9
8
|
def self.included(base)
|
|
10
9
|
base.send(:prepend, InstanceMethods)
|
|
11
10
|
end
|
|
@@ -15,7 +14,7 @@ module Datadog
|
|
|
15
14
|
def invoke(*args)
|
|
16
15
|
return super unless enabled?
|
|
17
16
|
|
|
18
|
-
tracer.trace(
|
|
17
|
+
tracer.trace(Ext::SPAN_INVOKE, span_options) do |span|
|
|
19
18
|
super
|
|
20
19
|
annotate_invoke!(span, args)
|
|
21
20
|
end
|
|
@@ -26,7 +25,7 @@ module Datadog
|
|
|
26
25
|
def execute(args = nil)
|
|
27
26
|
return super unless enabled?
|
|
28
27
|
|
|
29
|
-
tracer.trace(
|
|
28
|
+
tracer.trace(Ext::SPAN_EXECUTE, span_options) do |span|
|
|
30
29
|
super
|
|
31
30
|
annotate_execute!(span, args)
|
|
32
31
|
end
|
|
@@ -42,15 +41,15 @@ module Datadog
|
|
|
42
41
|
|
|
43
42
|
def annotate_invoke!(span, args)
|
|
44
43
|
span.resource = name
|
|
45
|
-
span.set_tag(
|
|
46
|
-
span.set_tag(
|
|
44
|
+
span.set_tag(Ext::TAG_TASK_ARG_NAMES, arg_names)
|
|
45
|
+
span.set_tag(Ext::TAG_INVOKE_ARGS, quantize_args(args)) unless args.nil?
|
|
47
46
|
rescue StandardError => e
|
|
48
47
|
Datadog::Tracer.log.debug("Error while tracing Rake invoke: #{e.message}")
|
|
49
48
|
end
|
|
50
49
|
|
|
51
50
|
def annotate_execute!(span, args)
|
|
52
51
|
span.resource = name
|
|
53
|
-
span.set_tag(
|
|
52
|
+
span.set_tag(Ext::TAG_EXECUTE_ARGS, quantize_args(args.to_hash)) unless args.nil?
|
|
54
53
|
rescue StandardError => e
|
|
55
54
|
Datadog::Tracer.log.debug("Error while tracing Rake execute: #{e.message}")
|
|
56
55
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/rake/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/rake/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Rake
|
|
8
|
+
# Description of Rake integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :rake
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['rake'] && Gem.loaded_specs['rake'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Rake)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && RUBY_VERSION >= '2.0.0'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_configuration
|
|
27
|
+
Configuration::Settings.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patcher
|
|
31
|
+
Patcher
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,51 +1,41 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
1
2
|
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/rake/ext'
|
|
2
4
|
require 'ddtrace/contrib/rake/instrumentation'
|
|
3
5
|
|
|
4
6
|
module Datadog
|
|
5
7
|
module Contrib
|
|
6
8
|
module Rake
|
|
7
|
-
# Patcher
|
|
9
|
+
# Patcher enables patching of 'rake' module.
|
|
8
10
|
module Patcher
|
|
9
|
-
include
|
|
10
|
-
|
|
11
|
-
register_as :rake
|
|
12
|
-
option :service_name, default: 'rake'
|
|
13
|
-
option :tracer, default: Datadog.tracer
|
|
14
|
-
option :enabled, default: true
|
|
15
|
-
option :quantize, default: {}
|
|
11
|
+
include Contrib::Patcher
|
|
16
12
|
|
|
17
13
|
module_function
|
|
18
14
|
|
|
19
|
-
def patch
|
|
20
|
-
return patched? if patched? || !compatible?
|
|
21
|
-
|
|
22
|
-
patch_rake
|
|
23
|
-
|
|
24
|
-
# Set service info
|
|
25
|
-
configuration[:tracer].set_service_info(
|
|
26
|
-
configuration[:service_name],
|
|
27
|
-
'rake',
|
|
28
|
-
Ext::AppTypes::WORKER
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
@patched = true
|
|
32
|
-
end
|
|
33
|
-
|
|
34
15
|
def patched?
|
|
35
|
-
|
|
36
|
-
@patched = false
|
|
16
|
+
done?(:rake)
|
|
37
17
|
end
|
|
38
18
|
|
|
39
|
-
def
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
19
|
+
def patch
|
|
20
|
+
do_once(:rake) do
|
|
21
|
+
begin
|
|
22
|
+
# Add instrumentation patch to Rake task
|
|
23
|
+
::Rake::Task.send(:include, Instrumentation)
|
|
24
|
+
|
|
25
|
+
# Set service info
|
|
26
|
+
get_option(:tracer).set_service_info(
|
|
27
|
+
get_option(:service_name),
|
|
28
|
+
Ext::APP,
|
|
29
|
+
Datadog::Ext::AppTypes::WORKER
|
|
30
|
+
)
|
|
31
|
+
rescue StandardError => e
|
|
32
|
+
Datadog::Tracer.log.error("Unable to apply Rake integration: #{e}")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
45
35
|
end
|
|
46
36
|
|
|
47
|
-
def
|
|
48
|
-
Datadog.configuration[:rake]
|
|
37
|
+
def get_option(option)
|
|
38
|
+
Datadog.configuration[:rake].get_option(option)
|
|
49
39
|
end
|
|
50
40
|
end
|
|
51
41
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/redis/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Redis
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Redis integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Redis
|
|
4
|
+
# Redis integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'redis'.freeze
|
|
7
|
+
SERVICE_NAME = 'redis'.freeze
|
|
8
|
+
TYPE = 'redis'.freeze
|
|
9
|
+
|
|
10
|
+
METRIC_PIPELINE_LEN = 'redis.pipeline_length'.freeze
|
|
11
|
+
|
|
12
|
+
SPAN_COMMAND = 'redis.command'.freeze
|
|
13
|
+
|
|
14
|
+
TAG_DB = 'out.redis_db'.freeze
|
|
15
|
+
TAG_RAW_COMMAND = 'redis.raw_command'.freeze
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/redis/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/redis/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Redis
|
|
8
|
+
# Description of Redis integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :redis, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['redis'] && Gem.loaded_specs['redis'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Redis)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
!version.nil? && version >= Gem::Version.new('3.0.0')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_configuration
|
|
27
|
+
Configuration::Settings.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patcher
|
|
31
|
+
Patcher
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,43 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/redis/ext'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
5
6
|
module Redis
|
|
6
|
-
SERVICE = 'redis'.freeze
|
|
7
|
-
DRIVER = 'redis.driver'.freeze
|
|
8
|
-
|
|
9
7
|
# Patcher enables patching of 'redis' module.
|
|
10
8
|
module Patcher
|
|
11
|
-
include
|
|
12
|
-
register_as :redis, auto_patch: true
|
|
13
|
-
option :service_name, default: SERVICE
|
|
14
|
-
option :tracer, default: Datadog.tracer
|
|
15
|
-
|
|
16
|
-
@patched = false
|
|
9
|
+
include Contrib::Patcher
|
|
17
10
|
|
|
18
11
|
module_function
|
|
19
12
|
|
|
13
|
+
def patched?
|
|
14
|
+
done?(:redis)
|
|
15
|
+
end
|
|
16
|
+
|
|
20
17
|
# patch applies our patch if needed
|
|
21
18
|
def patch
|
|
22
|
-
|
|
19
|
+
do_once(:redis) do
|
|
23
20
|
begin
|
|
24
21
|
# do not require these by default, but only when actually patching
|
|
22
|
+
require 'redis'
|
|
25
23
|
require 'ddtrace/ext/app_types'
|
|
26
24
|
require 'ddtrace/contrib/redis/tags'
|
|
27
25
|
require 'ddtrace/contrib/redis/quantize'
|
|
28
26
|
|
|
29
27
|
patch_redis_client
|
|
30
|
-
|
|
31
|
-
RailsCachePatcher.reload_cache_store if Datadog.registry[:rails].patched?
|
|
28
|
+
RailsCachePatcher.reload_cache_store if Datadog.registry[:rails].patcher.patched?
|
|
32
29
|
rescue StandardError => e
|
|
33
30
|
Datadog::Tracer.log.error("Unable to apply Redis integration: #{e}")
|
|
34
31
|
end
|
|
35
32
|
end
|
|
36
|
-
@patched
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def compatible?
|
|
40
|
-
defined?(::Redis::VERSION) && Gem::Version.new(::Redis::VERSION) >= Gem::Version.new('3.0.0')
|
|
41
33
|
end
|
|
42
34
|
|
|
43
35
|
# rubocop:disable Metrics/MethodLength
|
|
@@ -52,7 +44,12 @@ module Datadog
|
|
|
52
44
|
def initialize(*args)
|
|
53
45
|
service = Datadog.configuration[:redis][:service_name]
|
|
54
46
|
tracer = Datadog.configuration[:redis][:tracer]
|
|
55
|
-
pin = Datadog::Pin.new(
|
|
47
|
+
pin = Datadog::Pin.new(
|
|
48
|
+
service,
|
|
49
|
+
app: Ext::APP,
|
|
50
|
+
app_type: Datadog::Ext::AppTypes::DB,
|
|
51
|
+
tracer: tracer
|
|
52
|
+
)
|
|
56
53
|
pin.onto(self)
|
|
57
54
|
initialize_without_datadog(*args)
|
|
58
55
|
end
|
|
@@ -64,9 +61,9 @@ module Datadog
|
|
|
64
61
|
return call_without_datadog(*args, &block) unless pin && pin.tracer
|
|
65
62
|
|
|
66
63
|
response = nil
|
|
67
|
-
pin.tracer.trace(
|
|
64
|
+
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
68
65
|
span.service = pin.service
|
|
69
|
-
span.span_type = Datadog::
|
|
66
|
+
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
70
67
|
span.resource = Datadog::Contrib::Redis::Quantize.format_command_args(*args)
|
|
71
68
|
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
72
69
|
|
|
@@ -83,13 +80,13 @@ module Datadog
|
|
|
83
80
|
return call_pipeline_without_datadog(*args, &block) unless pin && pin.tracer
|
|
84
81
|
|
|
85
82
|
response = nil
|
|
86
|
-
pin.tracer.trace(
|
|
83
|
+
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
87
84
|
span.service = pin.service
|
|
88
|
-
span.span_type = Datadog::
|
|
85
|
+
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
89
86
|
commands = args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) }
|
|
90
87
|
span.resource = commands.join("\n")
|
|
91
88
|
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
92
|
-
span.set_metric Datadog::
|
|
89
|
+
span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
|
93
90
|
|
|
94
91
|
response = call_pipeline_without_datadog(*args, &block)
|
|
95
92
|
end
|
|
@@ -98,11 +95,6 @@ module Datadog
|
|
|
98
95
|
end
|
|
99
96
|
end
|
|
100
97
|
end
|
|
101
|
-
|
|
102
|
-
# patched? tells wether patch has been successfully applied
|
|
103
|
-
def patched?
|
|
104
|
-
@patched
|
|
105
|
-
end
|
|
106
98
|
end
|
|
107
99
|
end
|
|
108
100
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/ext/net'
|
|
2
|
-
require 'ddtrace/
|
|
2
|
+
require 'ddtrace/contrib/redis/ext'
|
|
3
3
|
|
|
4
4
|
module Datadog
|
|
5
5
|
module Contrib
|
|
@@ -11,8 +11,8 @@ module Datadog
|
|
|
11
11
|
def set_common_tags(client, span)
|
|
12
12
|
span.set_tag Datadog::Ext::NET::TARGET_HOST, client.host
|
|
13
13
|
span.set_tag Datadog::Ext::NET::TARGET_PORT, client.port
|
|
14
|
-
span.set_tag
|
|
15
|
-
span.set_tag
|
|
14
|
+
span.set_tag Ext::TAG_DB, client.db
|
|
15
|
+
span.set_tag Ext::TAG_RAW_COMMAND, span.resource
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/resque/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Resque
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Resque integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
11
|
+
option :workers, default: []
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|