ddtrace 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
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