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
|
@@ -8,7 +8,7 @@ module Datadog
|
|
|
8
8
|
# Custom settings for the DelayedJob 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
|
# DelayedJob integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'delayed_job'.freeze
|
|
7
|
-
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_DELAYED_JOB_ANALYTICS_ENABLED'.freeze
|
|
8
8
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
9
|
SERVICE_NAME = 'delayed_job'.freeze
|
|
10
10
|
SPAN_JOB = 'delayed_job'.freeze
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Elasticsearch 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 :quantize, default: {}
|
|
11
19
|
option :service_name, default: Ext::SERVICE_NAME
|
|
12
20
|
end
|
|
@@ -4,10 +4,10 @@ module Datadog
|
|
|
4
4
|
# Elasticsearch integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'elasticsearch'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'elasticsearch'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_QUERY = 'elasticsearch.query'.freeze
|
|
10
|
-
|
|
11
11
|
TAG_BODY = 'elasticsearch.body'.freeze
|
|
12
12
|
TAG_METHOD = 'elasticsearch.method'.freeze
|
|
13
13
|
TAG_PARAMS = 'elasticsearch.params'.freeze
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
|
2
2
|
require 'ddtrace/ext/app_types'
|
|
3
3
|
require 'ddtrace/ext/net'
|
|
4
|
+
require 'ddtrace/contrib/analytics'
|
|
4
5
|
require 'ddtrace/contrib/elasticsearch/ext'
|
|
5
6
|
|
|
6
7
|
module Datadog
|
|
@@ -83,11 +84,16 @@ module Datadog
|
|
|
83
84
|
params = JSON.generate(params) if params && !params.is_a?(String)
|
|
84
85
|
body = JSON.generate(body) if body && !body.is_a?(String)
|
|
85
86
|
|
|
87
|
+
# Set analytics sample rate
|
|
88
|
+
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
89
|
+
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
90
|
+
end
|
|
91
|
+
|
|
86
92
|
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_METHOD, method)
|
|
87
93
|
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_URL, url)
|
|
88
94
|
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_PARAMS, params) if params
|
|
89
95
|
if body
|
|
90
|
-
quantize_options =
|
|
96
|
+
quantize_options = datadog_configuration[:quantize]
|
|
91
97
|
quantized_body = Datadog::Contrib::Elasticsearch::Quantize.format_body(body, quantize_options)
|
|
92
98
|
span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_BODY, quantized_body)
|
|
93
99
|
end
|
|
@@ -106,6 +112,10 @@ module Datadog
|
|
|
106
112
|
end
|
|
107
113
|
response
|
|
108
114
|
end
|
|
115
|
+
|
|
116
|
+
def datadog_configuration
|
|
117
|
+
Datadog.configuration[:elasticsearch]
|
|
118
|
+
end
|
|
109
119
|
end
|
|
110
120
|
end
|
|
111
121
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Excon 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 :error_handler, default: nil
|
|
12
20
|
option :service_name, default: Ext::SERVICE_NAME
|
|
@@ -4,8 +4,9 @@ module Datadog
|
|
|
4
4
|
# Excon integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'excon'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_EXCON_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'excon'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_REQUEST = 'excon.request'.freeze
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -3,6 +3,7 @@ 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/analytics'
|
|
6
7
|
require 'ddtrace/contrib/excon/ext'
|
|
7
8
|
|
|
8
9
|
module Datadog
|
|
@@ -82,6 +83,14 @@ module Datadog
|
|
|
82
83
|
@options[:tracer]
|
|
83
84
|
end
|
|
84
85
|
|
|
86
|
+
def analytics_enabled?
|
|
87
|
+
Contrib::Analytics.enabled?(@options[:analytics_enabled])
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def analytics_sample_rate
|
|
91
|
+
@options[:analytics_sample_rate]
|
|
92
|
+
end
|
|
93
|
+
|
|
85
94
|
def distributed_tracing?
|
|
86
95
|
@options[:distributed_tracing] == true && tracer.enabled
|
|
87
96
|
end
|
|
@@ -98,6 +107,12 @@ module Datadog
|
|
|
98
107
|
span.resource = datum[:method].to_s.upcase
|
|
99
108
|
span.service = service_name(datum)
|
|
100
109
|
span.span_type = Datadog::Ext::HTTP::TYPE
|
|
110
|
+
|
|
111
|
+
# Set analytics sample rate
|
|
112
|
+
if analytics_enabled?
|
|
113
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
114
|
+
end
|
|
115
|
+
|
|
101
116
|
span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
|
|
102
117
|
span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
|
|
103
118
|
span.set_tag(Datadog::Ext::NET::TARGET_HOST, datum[:host])
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'ddtrace/contrib/registry'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
# Extensions that can be added to the base library
|
|
6
|
+
# Adds registry, configuration access for integrations.
|
|
7
|
+
module Extensions
|
|
8
|
+
def self.extended(base)
|
|
9
|
+
Datadog.send(:extend, Helpers)
|
|
10
|
+
Datadog::Configuration::Settings.send(:include, Configuration)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Helper methods for Datadog module.
|
|
14
|
+
module Helpers
|
|
15
|
+
def registry
|
|
16
|
+
configuration.registry
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Extensions for Datadog::Configuration::Settings
|
|
21
|
+
module Configuration
|
|
22
|
+
InvalidIntegrationError = Class.new(StandardError)
|
|
23
|
+
|
|
24
|
+
def self.included(base)
|
|
25
|
+
# Add the additional options to the global configuration settings
|
|
26
|
+
base.instance_eval do
|
|
27
|
+
option :registry, default: Registry.new
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def initialize(options = {})
|
|
32
|
+
super
|
|
33
|
+
set_option(:registry, options[:registry]) if options.key?(:registry)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def [](integration_name, configuration_name = :default)
|
|
37
|
+
integration = fetch_integration(integration_name)
|
|
38
|
+
integration.configuration(configuration_name) unless integration.nil?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def use(integration_name, options = {}, &block)
|
|
42
|
+
integration = fetch_integration(integration_name)
|
|
43
|
+
|
|
44
|
+
unless integration.nil?
|
|
45
|
+
configuration_name = options[:describes] || :default
|
|
46
|
+
filtered_options = options.reject { |k, _v| k == :describes }
|
|
47
|
+
integration.configure(configuration_name, filtered_options, &block)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
integration.patch if integration.respond_to?(:patch)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def fetch_integration(name)
|
|
56
|
+
get_option(:registry)[name] ||
|
|
57
|
+
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -12,6 +12,14 @@ module Datadog
|
|
|
12
12
|
Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
option :analytics_enabled,
|
|
16
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
|
|
17
|
+
lazy: true
|
|
18
|
+
|
|
19
|
+
option :analytics_sample_rate,
|
|
20
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
21
|
+
lazy: true
|
|
22
|
+
|
|
15
23
|
option :distributed_tracing, default: true
|
|
16
24
|
option :error_handler, default: DEFAULT_ERROR_HANDLER
|
|
17
25
|
option :service_name, default: Ext::SERVICE_NAME
|
|
@@ -4,8 +4,9 @@ module Datadog
|
|
|
4
4
|
# Faraday integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'faraday'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_FARADAY_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'faraday'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_REQUEST = 'faraday.request'.freeze
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -2,6 +2,7 @@ require 'faraday'
|
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
3
|
require 'ddtrace/ext/net'
|
|
4
4
|
require 'ddtrace/propagation/http_propagator'
|
|
5
|
+
require 'ddtrace/contrib/analytics'
|
|
5
6
|
require 'ddtrace/contrib/faraday/ext'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
@@ -33,6 +34,12 @@ module Datadog
|
|
|
33
34
|
span.resource = env[:method].to_s.upcase
|
|
34
35
|
span.service = service_name(env)
|
|
35
36
|
span.span_type = Datadog::Ext::HTTP::TYPE
|
|
37
|
+
|
|
38
|
+
# Set analytics sample rate
|
|
39
|
+
if analytics_enabled?
|
|
40
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
41
|
+
end
|
|
42
|
+
|
|
36
43
|
span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path)
|
|
37
44
|
span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase)
|
|
38
45
|
span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host)
|
|
@@ -65,6 +72,14 @@ module Datadog
|
|
|
65
72
|
options[:service_name]
|
|
66
73
|
end
|
|
67
74
|
|
|
75
|
+
def analytics_enabled?
|
|
76
|
+
Contrib::Analytics.enabled?(options[:analytics_enabled])
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def analytics_sample_rate
|
|
80
|
+
options[:analytics_sample_rate]
|
|
81
|
+
end
|
|
82
|
+
|
|
68
83
|
def setup_service!
|
|
69
84
|
return if options[:service_name] == datadog_configuration[:service_name]
|
|
70
85
|
|
|
@@ -8,6 +8,14 @@ module Datadog
|
|
|
8
8
|
module Configuration
|
|
9
9
|
# Custom settings for the Grape integration
|
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :analytics_enabled,
|
|
12
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) },
|
|
13
|
+
lazy: true
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate,
|
|
16
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
17
|
+
lazy: true
|
|
18
|
+
|
|
11
19
|
option :enabled, default: true
|
|
12
20
|
option :service_name, default: Ext::SERVICE_NAME
|
|
13
21
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/ext/http'
|
|
2
2
|
require 'ddtrace/ext/errors'
|
|
3
|
+
require 'ddtrace/contrib/analytics'
|
|
3
4
|
require 'ddtrace/contrib/rack/ext'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
@@ -79,6 +80,11 @@ module Datadog
|
|
|
79
80
|
request_span.resource = resource
|
|
80
81
|
end
|
|
81
82
|
|
|
83
|
+
# Set analytics sample rate
|
|
84
|
+
if analytics_enabled?
|
|
85
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
86
|
+
end
|
|
87
|
+
|
|
82
88
|
# catch thrown exceptions
|
|
83
89
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
84
90
|
|
|
@@ -145,6 +151,11 @@ module Datadog
|
|
|
145
151
|
)
|
|
146
152
|
|
|
147
153
|
begin
|
|
154
|
+
# Set analytics sample rate
|
|
155
|
+
if analytics_enabled?
|
|
156
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
157
|
+
end
|
|
158
|
+
|
|
148
159
|
# catch thrown exceptions
|
|
149
160
|
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
150
161
|
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
@@ -166,6 +177,14 @@ module Datadog
|
|
|
166
177
|
datadog_configuration[:service_name]
|
|
167
178
|
end
|
|
168
179
|
|
|
180
|
+
def analytics_enabled?
|
|
181
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def analytics_sample_rate
|
|
185
|
+
datadog_configuration[:analytics_sample_rate]
|
|
186
|
+
end
|
|
187
|
+
|
|
169
188
|
def enabled?
|
|
170
189
|
datadog_configuration[:enabled] == true
|
|
171
190
|
end
|
|
@@ -4,12 +4,12 @@ module Datadog
|
|
|
4
4
|
# Grape integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'grape'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_GRAPE_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRAPE_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'grape'.freeze
|
|
8
|
-
|
|
9
10
|
SPAN_ENDPOINT_RENDER = 'grape.endpoint_render'.freeze
|
|
10
11
|
SPAN_ENDPOINT_RUN = 'grape.endpoint_run'.freeze
|
|
11
12
|
SPAN_ENDPOINT_RUN_FILTERS = 'grape.endpoint_run_filters'.freeze
|
|
12
|
-
|
|
13
13
|
TAG_FILTER_TYPE = 'grape.filter.type'.freeze
|
|
14
14
|
TAG_ROUTE_ENDPOINT = 'grape.route.endpoint'.freeze
|
|
15
15
|
TAG_ROUTE_PATH = 'grape.route.path'.freeze
|
|
@@ -8,6 +8,14 @@ module Datadog
|
|
|
8
8
|
module Configuration
|
|
9
9
|
# Custom settings for the GraphQL integration
|
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :analytics_enabled,
|
|
12
|
+
default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) },
|
|
13
|
+
lazy: true
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate,
|
|
16
|
+
default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
|
|
17
|
+
lazy: true
|
|
18
|
+
|
|
11
19
|
option :schemas
|
|
12
20
|
option :service_name, default: Ext::SERVICE_NAME, depends_on: [:tracer] do |value|
|
|
13
21
|
get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
|
|
@@ -4,6 +4,8 @@ module Datadog
|
|
|
4
4
|
# GraphQL integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'ruby-graphql'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_GRAPHQL_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRAPHQL_ANALYTICS_SAMPLE_RATE'.freeze
|
|
7
9
|
SERVICE_NAME = 'ruby-graphql'.freeze
|
|
8
10
|
end
|
|
9
11
|
end
|
|
@@ -30,19 +30,25 @@ module Datadog
|
|
|
30
30
|
def patch_schema!(schema)
|
|
31
31
|
tracer = get_option(:tracer)
|
|
32
32
|
service_name = get_option(:service_name)
|
|
33
|
+
analytics_enabled = Contrib::Analytics.enabled?(get_option(:analytics_enabled))
|
|
34
|
+
analytics_sample_rate = get_option(:analytics_sample_rate)
|
|
33
35
|
|
|
34
36
|
if schema.respond_to?(:use)
|
|
35
37
|
schema.use(
|
|
36
38
|
::GraphQL::Tracing::DataDogTracing,
|
|
37
39
|
tracer: tracer,
|
|
38
|
-
service: service_name
|
|
40
|
+
service: service_name,
|
|
41
|
+
analytics_enabled: analytics_enabled,
|
|
42
|
+
analytics_sample_rate: analytics_sample_rate
|
|
39
43
|
)
|
|
40
44
|
else
|
|
41
45
|
schema.define do
|
|
42
46
|
use(
|
|
43
47
|
::GraphQL::Tracing::DataDogTracing,
|
|
44
48
|
tracer: tracer,
|
|
45
|
-
service: service_name
|
|
49
|
+
service: service_name,
|
|
50
|
+
analytics_enabled: analytics_enabled,
|
|
51
|
+
analytics_sample_rate: analytics_sample_rate
|
|
46
52
|
)
|
|
47
53
|
end
|
|
48
54
|
end
|
|
@@ -7,6 +7,14 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the gRPC 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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/ext/app_types'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
2
3
|
require 'ddtrace/contrib/grpc/ext'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
@@ -55,6 +56,14 @@ module Datadog
|
|
|
55
56
|
def service_name
|
|
56
57
|
(datadog_pin && datadog_pin.service_name) || datadog_configuration[:service_name]
|
|
57
58
|
end
|
|
59
|
+
|
|
60
|
+
def analytics_enabled?
|
|
61
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def analytics_sample_rate
|
|
65
|
+
datadog_configuration[:analytics_sample_rate]
|
|
66
|
+
end
|
|
58
67
|
end
|
|
59
68
|
|
|
60
69
|
require_relative 'datadog_interceptor/client'
|
|
@@ -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
|
|
@@ -33,6 +34,9 @@ module Datadog
|
|
|
33
34
|
span.set_tag(header, value)
|
|
34
35
|
end
|
|
35
36
|
|
|
37
|
+
# Set analytics sample rate
|
|
38
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
39
|
+
|
|
36
40
|
Datadog::GRPCPropagator
|
|
37
41
|
.inject!(span.context, metadata)
|
|
38
42
|
rescue StandardError => e
|