ddtrace 0.20.0 → 0.21.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/CHANGELOG.md +24 -3
- data/Rakefile +1 -1
- data/docs/GettingStarted.md +25 -7
- data/lib/ddtrace.rb +4 -31
- data/lib/ddtrace/configuration.rb +13 -46
- data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
- data/lib/ddtrace/configuration/option.rb +32 -0
- data/lib/ddtrace/configuration/option_definition.rb +27 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +93 -0
- data/lib/ddtrace/configuration/pin_setup.rb +1 -1
- data/lib/ddtrace/configuration/settings.rb +47 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +6 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +2 -2
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +7 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +6 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +2 -3
- data/lib/ddtrace/contrib/analytics.rb +3 -4
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/aws/ext.rb +5 -6
- data/lib/ddtrace/contrib/aws/instrumentation.rb +7 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +4 -14
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +3 -2
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +7 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -1
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +2 -2
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +11 -1
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/excon/ext.rb +2 -1
- data/lib/ddtrace/contrib/excon/middleware.rb +15 -0
- data/lib/ddtrace/contrib/extensions.rb +62 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +2 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +15 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +19 -0
- data/lib/ddtrace/contrib/grape/ext.rb +2 -2
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +2 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +8 -2
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +9 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +4 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +2 -1
- data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/http/ext.rb +2 -1
- data/lib/ddtrace/contrib/http/instrumentation.rb +54 -19
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +2 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +18 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/{client.rb → instrumentation.rb} +32 -12
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -2
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -1
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/rack/ext.rb +1 -1
- data/lib/ddtrace/contrib/rails/action_controller.rb +3 -0
- data/lib/ddtrace/contrib/rails/active_support.rb +1 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rails/ext.rb +2 -5
- data/lib/ddtrace/contrib/rails/utils.rb +17 -1
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/rake/ext.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/redis/ext.rb +4 -5
- data/lib/ddtrace/contrib/redis/tags.rb +24 -6
- data/lib/ddtrace/contrib/registerable.rb +1 -1
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +2 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +14 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -1
- data/lib/ddtrace/contrib/sequel/database.rb +2 -0
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -0
- data/lib/ddtrace/contrib/sequel/ext.rb +2 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +32 -14
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +3 -4
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +12 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -1
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -1
- data/lib/ddtrace/environment.rb +15 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
- data/lib/ddtrace/propagation/distributed_headers.rb +14 -4
- data/lib/ddtrace/span.rb +4 -0
- data/lib/ddtrace/tracer.rb +6 -1
- data/lib/ddtrace/version.rb +1 -1
- metadata +14 -15
- data/lib/ddtrace/configurable.rb +0 -83
- data/lib/ddtrace/configuration/proxy.rb +0 -25
- data/lib/ddtrace/contrib/base.rb +0 -16
- data/lib/ddtrace/contrib/configuration/option.rb +0 -33
- data/lib/ddtrace/contrib/configuration/option_definition.rb +0 -29
- data/lib/ddtrace/contrib/configuration/option_definition_set.rb +0 -20
- data/lib/ddtrace/contrib/configuration/option_set.rb +0 -8
- data/lib/ddtrace/contrib/configuration/options.rb +0 -95
- data/lib/ddtrace/registry.rb +0 -42
- data/lib/ddtrace/registry/registerable.rb +0 -20
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
2
3
|
require 'ddtrace/contrib/grpc/ext'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
@@ -44,6 +45,9 @@ module Datadog
|
|
|
44
45
|
next if reserved_headers.include?(header)
|
|
45
46
|
span.set_tag(header, value)
|
|
46
47
|
end
|
|
48
|
+
|
|
49
|
+
# Set analytics sample rate
|
|
50
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
47
51
|
rescue StandardError => e
|
|
48
52
|
Datadog::Tracer.log.debug("GRPC client trace failed: #{e}")
|
|
49
53
|
end
|
|
@@ -4,8 +4,9 @@ module Datadog
|
|
|
4
4
|
# gRPC integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'grpc'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'grpc'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_CLIENT = 'grpc.client'.freeze
|
|
10
11
|
SPAN_SERVICE = 'grpc.service'.freeze
|
|
11
12
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the HTTP integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled,
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
|
+
lazy: true
|
|
13
|
+
|
|
14
|
+
option :analytics_sample_rate,
|
|
15
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
16
|
+
lazy: true
|
|
17
|
+
|
|
10
18
|
option :distributed_tracing, default: true
|
|
11
19
|
option :service_name, default: Ext::SERVICE_NAME
|
|
12
20
|
end
|
|
@@ -4,8 +4,9 @@ module Datadog
|
|
|
4
4
|
# HTTP integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'net/http'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'net/http'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_REQUEST = 'http.request'.freeze
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -4,6 +4,7 @@ require 'ddtrace/ext/app_types'
|
|
|
4
4
|
require 'ddtrace/ext/http'
|
|
5
5
|
require 'ddtrace/ext/net'
|
|
6
6
|
require 'ddtrace/ext/distributed'
|
|
7
|
+
require 'ddtrace/contrib/analytics'
|
|
7
8
|
|
|
8
9
|
module Datadog
|
|
9
10
|
module Contrib
|
|
@@ -22,6 +23,17 @@ module Datadog
|
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
|
|
26
|
+
# Span hook invoked after request is completed.
|
|
27
|
+
def self.after_request(&block)
|
|
28
|
+
if block_given?
|
|
29
|
+
# Set hook
|
|
30
|
+
@after_request = block
|
|
31
|
+
else
|
|
32
|
+
# Get hook
|
|
33
|
+
@after_request ||= nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
25
37
|
# Compatibility shim for Rubies not supporting `.prepend`
|
|
26
38
|
module InstanceMethodsCompatibility
|
|
27
39
|
def self.included(base)
|
|
@@ -38,7 +50,6 @@ module Datadog
|
|
|
38
50
|
|
|
39
51
|
# InstanceMethods - implementing instrumentation
|
|
40
52
|
module InstanceMethods
|
|
41
|
-
# rubocop:disable Metrics/MethodLength
|
|
42
53
|
def request(req, body = nil, &block) # :yield: +response+
|
|
43
54
|
pin = datadog_pin
|
|
44
55
|
return super(req, body, &block) unless pin && pin.tracer
|
|
@@ -53,12 +64,7 @@ module Datadog
|
|
|
53
64
|
begin
|
|
54
65
|
span.service = pin.service
|
|
55
66
|
span.span_type = Datadog::Ext::HTTP::TYPE
|
|
56
|
-
|
|
57
67
|
span.resource = req.method
|
|
58
|
-
# Using the method as a resource, as URL/path can trigger
|
|
59
|
-
# a possibly infinite number of resources.
|
|
60
|
-
span.set_tag(Datadog::Ext::HTTP::URL, req.path)
|
|
61
|
-
span.set_tag(Datadog::Ext::HTTP::METHOD, req.method)
|
|
62
68
|
|
|
63
69
|
if pin.tracer.enabled && !Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
|
|
64
70
|
req.add_field(Datadog::Ext::DistributedTracing::HTTP_HEADER_TRACE_ID, span.trace_id)
|
|
@@ -75,26 +81,41 @@ module Datadog
|
|
|
75
81
|
ensure
|
|
76
82
|
response = super(req, body, &block)
|
|
77
83
|
end
|
|
78
|
-
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
|
|
79
|
-
if req.respond_to?(:uri) && req.uri
|
|
80
|
-
span.set_tag(Datadog::Ext::NET::TARGET_HOST, req.uri.host)
|
|
81
|
-
span.set_tag(Datadog::Ext::NET::TARGET_PORT, req.uri.port.to_s)
|
|
82
|
-
else
|
|
83
|
-
span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
|
|
84
|
-
span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
|
|
85
|
-
end
|
|
86
84
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
# Add additional tags to the span.
|
|
86
|
+
annotate_span!(span, req, response)
|
|
87
|
+
|
|
88
|
+
# Invoke hook, if set.
|
|
89
|
+
unless Contrib::HTTP::Instrumentation.after_request.nil?
|
|
90
|
+
Contrib::HTTP::Instrumentation.after_request.call(span, self, req, response)
|
|
92
91
|
end
|
|
93
92
|
|
|
94
93
|
response
|
|
95
94
|
end
|
|
96
95
|
end
|
|
97
96
|
|
|
97
|
+
def annotate_span!(span, request, response)
|
|
98
|
+
span.set_tag(Datadog::Ext::HTTP::URL, request.path)
|
|
99
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, request.method)
|
|
100
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
|
|
101
|
+
|
|
102
|
+
if request.respond_to?(:uri) && request.uri
|
|
103
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, request.uri.host)
|
|
104
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, request.uri.port.to_s)
|
|
105
|
+
else
|
|
106
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
|
|
107
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Set analytics sample rate
|
|
111
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
112
|
+
|
|
113
|
+
case response.code.to_i
|
|
114
|
+
when 400...599
|
|
115
|
+
span.set_error(response)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
98
119
|
def datadog_pin
|
|
99
120
|
@datadog_pin ||= begin
|
|
100
121
|
service = Datadog.configuration[:http][:service_name]
|
|
@@ -103,6 +124,20 @@ module Datadog
|
|
|
103
124
|
Datadog::Pin.new(service, app: Ext::APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
|
|
104
125
|
end
|
|
105
126
|
end
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
|
|
130
|
+
def datadog_configuration
|
|
131
|
+
Datadog.configuration[:http]
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def analytics_enabled?
|
|
135
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def analytics_sample_rate
|
|
139
|
+
datadog_configuration[:analytics_sample_rate]
|
|
140
|
+
end
|
|
106
141
|
end
|
|
107
142
|
end
|
|
108
143
|
end
|
|
@@ -9,6 +9,14 @@ module Datadog
|
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
10
|
DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
|
|
11
11
|
|
|
12
|
+
option :analytics_enabled,
|
|
13
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
14
|
+
lazy: true
|
|
15
|
+
|
|
16
|
+
option :analytics_sample_rate,
|
|
17
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
18
|
+
lazy: true
|
|
19
|
+
|
|
12
20
|
option :quantize, default: DEFAULT_QUANTIZE
|
|
13
21
|
option :service_name, default: Ext::SERVICE_NAME
|
|
14
22
|
end
|
|
@@ -4,11 +4,11 @@ module Datadog
|
|
|
4
4
|
# MongoDB integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'mongodb'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_MONGO_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'mongodb'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_COMMAND = 'mongo.cmd'.freeze
|
|
10
11
|
SPAN_TYPE_COMMAND = 'mongodb'.freeze
|
|
11
|
-
|
|
12
12
|
TAG_COLLECTION = 'mongodb.collection'.freeze
|
|
13
13
|
TAG_DB = 'mongodb.db'.freeze
|
|
14
14
|
TAG_OPERATION = 'mongodb.operation'.freeze
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
1
2
|
require 'ddtrace/contrib/mongodb/ext'
|
|
2
3
|
require 'ddtrace/contrib/mongodb/parsers'
|
|
3
4
|
|
|
@@ -23,6 +24,11 @@ module Datadog
|
|
|
23
24
|
query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
|
|
24
25
|
serialized_query = query.to_s
|
|
25
26
|
|
|
27
|
+
# Set analytics sample rate
|
|
28
|
+
if analytics_enabled?
|
|
29
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
30
|
+
end
|
|
31
|
+
|
|
26
32
|
# add operation tags; the full query is stored and used as a resource,
|
|
27
33
|
# since it has been quantized and reduced
|
|
28
34
|
span.set_tag(Ext::TAG_DB, query['database'])
|
|
@@ -84,6 +90,18 @@ module Datadog
|
|
|
84
90
|
return if Thread.current[:datadog_mongo_span].nil?
|
|
85
91
|
Thread.current[:datadog_mongo_span].delete(event.request_id)
|
|
86
92
|
end
|
|
93
|
+
|
|
94
|
+
def analytics_enabled?
|
|
95
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def analytics_sample_rate
|
|
99
|
+
datadog_configuration[:analytics_sample_rate]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def datadog_configuration
|
|
103
|
+
Datadog.configuration[:mongo]
|
|
104
|
+
end
|
|
87
105
|
end
|
|
88
106
|
end
|
|
89
107
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Mysql2 integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled,
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
|
+
lazy: true
|
|
13
|
+
|
|
14
|
+
option :analytics_sample_rate,
|
|
15
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
16
|
+
lazy: true
|
|
17
|
+
|
|
10
18
|
option :service_name, default: Ext::SERVICE_NAME
|
|
11
19
|
end
|
|
12
20
|
end
|
|
@@ -4,10 +4,10 @@ module Datadog
|
|
|
4
4
|
# Mysql2 integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'mysql2'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_MYSQL2_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_MYSQL2_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'mysql2'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_QUERY = 'mysql2.query'.freeze
|
|
10
|
-
|
|
11
11
|
TAG_DB_NAME = 'mysql2.db.name'.freeze
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
require 'ddtrace/ext/app_types'
|
|
2
2
|
require 'ddtrace/ext/net'
|
|
3
3
|
require 'ddtrace/ext/sql'
|
|
4
|
+
require 'ddtrace/contrib/analytics'
|
|
4
5
|
require 'ddtrace/contrib/mysql2/ext'
|
|
5
6
|
|
|
6
7
|
module Datadog
|
|
7
8
|
module Contrib
|
|
8
9
|
module Mysql2
|
|
9
10
|
# Mysql2::Client patch module
|
|
10
|
-
module
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def included(base)
|
|
11
|
+
module Instrumentation
|
|
12
|
+
def self.included(base)
|
|
14
13
|
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
|
|
15
14
|
base.class_eval do
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
# Instance methods
|
|
16
|
+
include InstanceMethodsCompatibility
|
|
18
17
|
include InstanceMethods
|
|
19
18
|
end
|
|
20
19
|
else
|
|
@@ -24,22 +23,29 @@ module Datadog
|
|
|
24
23
|
|
|
25
24
|
# Mysql2::Client patch 1.9.3 instance methods
|
|
26
25
|
module InstanceMethodsCompatibility
|
|
27
|
-
def
|
|
28
|
-
|
|
26
|
+
def self.included(base)
|
|
27
|
+
base.class_eval do
|
|
28
|
+
alias_method :query_without_datadog, :query
|
|
29
|
+
remove_method :query
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def query(*args, &block)
|
|
34
|
+
query_without_datadog(*args, &block)
|
|
29
35
|
end
|
|
30
36
|
end
|
|
31
37
|
|
|
32
38
|
# Mysql2::Client patch instance methods
|
|
33
39
|
module InstanceMethods
|
|
34
|
-
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
|
|
35
|
-
include InstanceMethodsCompatibility
|
|
36
|
-
end
|
|
37
|
-
|
|
38
40
|
def query(sql, options = {})
|
|
39
41
|
datadog_pin.tracer.trace(Ext::SPAN_QUERY) do |span|
|
|
40
42
|
span.resource = sql
|
|
41
43
|
span.service = datadog_pin.service
|
|
42
44
|
span.span_type = Datadog::Ext::SQL::TYPE
|
|
45
|
+
|
|
46
|
+
# Set analytics sample rate
|
|
47
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
48
|
+
|
|
43
49
|
span.set_tag(Ext::TAG_DB_NAME, query_options[:database])
|
|
44
50
|
span.set_tag(Datadog::Ext::NET::TARGET_HOST, query_options[:host])
|
|
45
51
|
span.set_tag(Datadog::Ext::NET::TARGET_PORT, query_options[:port])
|
|
@@ -55,6 +61,20 @@ module Datadog
|
|
|
55
61
|
tracer: Datadog.configuration[:mysql2][:tracer]
|
|
56
62
|
)
|
|
57
63
|
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def datadog_configuration
|
|
68
|
+
Datadog.configuration[:mysql2]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def analytics_enabled?
|
|
72
|
+
datadog_configuration[:analytics_enabled]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def analytics_sample_rate
|
|
76
|
+
datadog_configuration[:analytics_sample_rate]
|
|
77
|
+
end
|
|
58
78
|
end
|
|
59
79
|
end
|
|
60
80
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
|
2
|
-
require 'ddtrace/contrib/mysql2/
|
|
2
|
+
require 'ddtrace/contrib/mysql2/instrumentation'
|
|
3
3
|
|
|
4
4
|
module Datadog
|
|
5
5
|
module Contrib
|
|
@@ -25,7 +25,7 @@ module Datadog
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def patch_mysql2_client
|
|
28
|
-
::Mysql2::Client.send(:include,
|
|
28
|
+
::Mysql2::Client.send(:include, Instrumentation)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -8,7 +8,7 @@ module Datadog
|
|
|
8
8
|
# Custom settings for the Racecar integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
10
|
option :analytics_enabled,
|
|
11
|
-
default: -> { env_to_bool(Ext::
|
|
11
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
12
12
|
lazy: true
|
|
13
13
|
|
|
14
14
|
option :analytics_sample_rate,
|
|
@@ -4,7 +4,7 @@ module Datadog
|
|
|
4
4
|
# Racecar integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'racecar'.freeze
|
|
7
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_RACECAR_ANALYTICS_ENABLED'.freeze
|
|
8
8
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
9
|
SERVICE_NAME = 'racecar'.freeze
|
|
10
10
|
SPAN_BATCH = 'racecar.batch'.freeze
|
|
@@ -4,7 +4,7 @@ module Datadog
|
|
|
4
4
|
# Rack integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rack'.freeze
|
|
7
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_RACK_ANALYTICS_ENABLED'.freeze
|
|
8
8
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_RACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
9
|
RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
|
|
10
10
|
SERVICE_NAME = 'rack'.freeze
|
|
@@ -50,6 +50,9 @@ module Datadog
|
|
|
50
50
|
rack_request_span.resource = span.resource if rack_request_span
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
+
# Set analytics sample rate
|
|
54
|
+
Utils.set_analytics_sample_rate(span)
|
|
55
|
+
|
|
53
56
|
span.set_tag(Ext::TAG_ROUTE_ACTION, payload.fetch(:action))
|
|
54
57
|
span.set_tag(Ext::TAG_ROUTE_CONTROLLER, payload.fetch(:controller))
|
|
55
58
|
|
|
@@ -53,6 +53,7 @@ module Datadog
|
|
|
53
53
|
normalized_key = ::ActiveSupport::Cache.expand_cache_key(payload.fetch(:key))
|
|
54
54
|
cache_key = Datadog::Utils.truncate(normalized_key, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE)
|
|
55
55
|
span.set_tag(Ext::TAG_CACHE_KEY, cache_key)
|
|
56
|
+
|
|
56
57
|
span.set_error(payload[:exception]) if payload[:exception]
|
|
57
58
|
ensure
|
|
58
59
|
span.finish
|
|
@@ -6,6 +6,14 @@ module Datadog
|
|
|
6
6
|
module Configuration
|
|
7
7
|
# Custom settings for the Rails integration
|
|
8
8
|
class Settings < Contrib::Configuration::Settings
|
|
9
|
+
option :analytics_enabled,
|
|
10
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) },
|
|
11
|
+
lazy: true
|
|
12
|
+
|
|
13
|
+
option :analytics_sample_rate,
|
|
14
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
15
|
+
lazy: true
|
|
16
|
+
|
|
9
17
|
option :cache_service
|
|
10
18
|
option :controller_service
|
|
11
19
|
option :database_service, depends_on: [:service_name] do |value|
|
|
@@ -4,20 +4,17 @@ module Datadog
|
|
|
4
4
|
# Rails integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rails'.freeze
|
|
7
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_RAILS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
8
9
|
QUANTIZE_CACHE_MAX_KEY_SIZE = 300
|
|
9
|
-
|
|
10
10
|
RESOURCE_CACHE_DELETE = 'DELETE'.freeze
|
|
11
11
|
RESOURCE_CACHE_GET = 'GET'.freeze
|
|
12
12
|
RESOURCE_CACHE_SET = 'SET'.freeze
|
|
13
|
-
|
|
14
13
|
SPAN_ACTION_CONTROLLER = 'rails.action_controller'.freeze
|
|
15
14
|
SPAN_CACHE = 'rails.cache'.freeze
|
|
16
15
|
SPAN_RENDER_PARTIAL = 'rails.render_partial'.freeze
|
|
17
16
|
SPAN_RENDER_TEMPLATE = 'rails.render_template'.freeze
|
|
18
|
-
|
|
19
17
|
SPAN_TYPE_CACHE = 'cache'.freeze
|
|
20
|
-
|
|
21
18
|
TAG_CACHE_BACKEND = 'rails.cache.backend'.freeze
|
|
22
19
|
TAG_CACHE_KEY = 'rails.cache.key'.freeze
|
|
23
20
|
TAG_LAYOUT = 'rails.layout'.freeze
|