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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -3
  3. data/Rakefile +1 -1
  4. data/docs/GettingStarted.md +25 -7
  5. data/lib/ddtrace.rb +4 -31
  6. data/lib/ddtrace/configuration.rb +13 -46
  7. data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
  8. data/lib/ddtrace/configuration/option.rb +32 -0
  9. data/lib/ddtrace/configuration/option_definition.rb +27 -0
  10. data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
  11. data/lib/ddtrace/configuration/option_set.rb +6 -0
  12. data/lib/ddtrace/configuration/options.rb +93 -0
  13. data/lib/ddtrace/configuration/pin_setup.rb +1 -1
  14. data/lib/ddtrace/configuration/settings.rb +47 -0
  15. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -0
  16. data/lib/ddtrace/contrib/active_model_serializers/event.rb +6 -0
  17. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +2 -2
  18. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +8 -0
  19. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +7 -0
  20. data/lib/ddtrace/contrib/active_record/events/sql.rb +6 -0
  21. data/lib/ddtrace/contrib/active_record/ext.rb +2 -3
  22. data/lib/ddtrace/contrib/analytics.rb +3 -4
  23. data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -0
  24. data/lib/ddtrace/contrib/aws/ext.rb +5 -6
  25. data/lib/ddtrace/contrib/aws/instrumentation.rb +7 -0
  26. data/lib/ddtrace/contrib/configuration/settings.rb +4 -14
  27. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -0
  28. data/lib/ddtrace/contrib/dalli/ext.rb +3 -2
  29. data/lib/ddtrace/contrib/dalli/instrumentation.rb +7 -0
  30. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -1
  31. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -1
  32. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -0
  33. data/lib/ddtrace/contrib/elasticsearch/ext.rb +2 -2
  34. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +11 -1
  35. data/lib/ddtrace/contrib/excon/configuration/settings.rb +8 -0
  36. data/lib/ddtrace/contrib/excon/ext.rb +2 -1
  37. data/lib/ddtrace/contrib/excon/middleware.rb +15 -0
  38. data/lib/ddtrace/contrib/extensions.rb +62 -0
  39. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -0
  40. data/lib/ddtrace/contrib/faraday/ext.rb +2 -1
  41. data/lib/ddtrace/contrib/faraday/middleware.rb +15 -0
  42. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  43. data/lib/ddtrace/contrib/grape/endpoint.rb +19 -0
  44. data/lib/ddtrace/contrib/grape/ext.rb +2 -2
  45. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -0
  46. data/lib/ddtrace/contrib/graphql/ext.rb +2 -0
  47. data/lib/ddtrace/contrib/graphql/patcher.rb +8 -2
  48. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -0
  49. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +9 -0
  50. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +4 -0
  51. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
  52. data/lib/ddtrace/contrib/grpc/ext.rb +2 -1
  53. data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -0
  54. data/lib/ddtrace/contrib/http/ext.rb +2 -1
  55. data/lib/ddtrace/contrib/http/instrumentation.rb +54 -19
  56. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -0
  57. data/lib/ddtrace/contrib/mongodb/ext.rb +2 -2
  58. data/lib/ddtrace/contrib/mongodb/subscribers.rb +18 -0
  59. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -0
  60. data/lib/ddtrace/contrib/mysql2/ext.rb +2 -2
  61. data/lib/ddtrace/contrib/mysql2/{client.rb → instrumentation.rb} +32 -12
  62. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -2
  63. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -1
  64. data/lib/ddtrace/contrib/racecar/ext.rb +1 -1
  65. data/lib/ddtrace/contrib/rack/configuration/settings.rb +1 -1
  66. data/lib/ddtrace/contrib/rack/ext.rb +1 -1
  67. data/lib/ddtrace/contrib/rails/action_controller.rb +3 -0
  68. data/lib/ddtrace/contrib/rails/active_support.rb +1 -0
  69. data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
  70. data/lib/ddtrace/contrib/rails/ext.rb +2 -5
  71. data/lib/ddtrace/contrib/rails/utils.rb +17 -1
  72. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -1
  73. data/lib/ddtrace/contrib/rake/ext.rb +1 -1
  74. data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -0
  75. data/lib/ddtrace/contrib/redis/ext.rb +4 -5
  76. data/lib/ddtrace/contrib/redis/tags.rb +24 -6
  77. data/lib/ddtrace/contrib/registerable.rb +1 -1
  78. data/lib/ddtrace/contrib/registry.rb +42 -0
  79. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -1
  80. data/lib/ddtrace/contrib/resque/ext.rb +1 -1
  81. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -0
  82. data/lib/ddtrace/contrib/rest_client/ext.rb +2 -1
  83. data/lib/ddtrace/contrib/rest_client/request_patch.rb +14 -0
  84. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -1
  85. data/lib/ddtrace/contrib/sequel/database.rb +2 -0
  86. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -0
  87. data/lib/ddtrace/contrib/sequel/ext.rb +2 -2
  88. data/lib/ddtrace/contrib/sequel/utils.rb +32 -14
  89. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -1
  90. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -1
  91. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -1
  92. data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -1
  93. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -0
  94. data/lib/ddtrace/contrib/sinatra/ext.rb +3 -4
  95. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -0
  96. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +12 -0
  97. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -1
  98. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -1
  99. data/lib/ddtrace/environment.rb +15 -0
  100. data/lib/ddtrace/ext/analytics.rb +1 -0
  101. data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
  102. data/lib/ddtrace/propagation/distributed_headers.rb +14 -4
  103. data/lib/ddtrace/span.rb +4 -0
  104. data/lib/ddtrace/tracer.rb +6 -1
  105. data/lib/ddtrace/version.rb +1 -1
  106. metadata +14 -15
  107. data/lib/ddtrace/configurable.rb +0 -83
  108. data/lib/ddtrace/configuration/proxy.rb +0 -25
  109. data/lib/ddtrace/contrib/base.rb +0 -16
  110. data/lib/ddtrace/contrib/configuration/option.rb +0 -33
  111. data/lib/ddtrace/contrib/configuration/option_definition.rb +0 -29
  112. data/lib/ddtrace/contrib/configuration/option_definition_set.rb +0 -20
  113. data/lib/ddtrace/contrib/configuration/option_set.rb +0 -8
  114. data/lib/ddtrace/contrib/configuration/options.rb +0 -95
  115. data/lib/ddtrace/registry.rb +0 -42
  116. 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::ENV_ANALYTICS_ENALBED, nil) },
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
- ENV_ANALYTICS_ENALBED = 'DD_DELAYED_JOB_ANALYTICS_ENABLED'.freeze
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 = Datadog.configuration[:elasticsearch][:quantize]
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