ddtrace 0.35.2 → 0.40.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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +59 -1
  3. data/.gitignore +2 -0
  4. data/.gitlab-ci.yml +27 -0
  5. data/.rubocop.yml +4 -0
  6. data/.simplecov +38 -0
  7. data/Appraisals +139 -12
  8. data/CHANGELOG.md +185 -1
  9. data/Rakefile +524 -464
  10. data/ddtrace.gemspec +6 -0
  11. data/docker-compose.yml +37 -2
  12. data/docs/DevelopmentGuide.md +16 -0
  13. data/docs/GettingStarted.md +192 -111
  14. data/lib/ddtrace.rb +4 -0
  15. data/lib/ddtrace/configuration.rb +36 -5
  16. data/lib/ddtrace/configuration/components.rb +4 -7
  17. data/lib/ddtrace/configuration/pin_setup.rb +3 -2
  18. data/lib/ddtrace/configuration/settings.rb +27 -3
  19. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
  20. data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
  21. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
  22. data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
  23. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
  24. data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
  25. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
  26. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
  27. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
  28. data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
  29. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
  30. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
  31. data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
  32. data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
  33. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +1 -1
  34. data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
  35. data/lib/ddtrace/contrib/aws/ext.rb +5 -2
  36. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
  37. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
  38. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  39. data/lib/ddtrace/contrib/configuration/settings.rb +19 -0
  40. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
  41. data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
  42. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -5
  43. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
  44. data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
  45. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
  46. data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
  47. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -2
  48. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
  49. data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
  50. data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
  51. data/lib/ddtrace/contrib/excon/ext.rb +5 -2
  52. data/lib/ddtrace/contrib/extensions.rb +39 -5
  53. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
  54. data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
  55. data/lib/ddtrace/contrib/faraday/middleware.rb +5 -3
  56. data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
  57. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
  58. data/lib/ddtrace/contrib/grape/ext.rb +5 -2
  59. data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
  60. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
  61. data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
  62. data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
  63. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
  64. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
  65. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -3
  66. data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
  67. data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
  68. data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
  69. data/lib/ddtrace/contrib/http/ext.rb +5 -2
  70. data/lib/ddtrace/contrib/http/instrumentation.rb +12 -7
  71. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
  72. data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
  73. data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
  74. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  75. data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
  76. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
  77. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  78. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  79. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  80. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  81. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  82. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  83. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  84. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  85. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  86. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  87. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  88. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  89. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  90. data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
  91. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  92. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  93. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
  94. data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
  95. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
  96. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
  97. data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
  98. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
  99. data/lib/ddtrace/contrib/patcher.rb +14 -8
  100. data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
  101. data/lib/ddtrace/contrib/presto/ext.rb +5 -2
  102. data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
  103. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  104. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  105. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  106. data/lib/ddtrace/contrib/que/tracer.rb +56 -0
  107. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
  108. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  109. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  110. data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
  111. data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
  112. data/lib/ddtrace/contrib/rack/ext.rb +5 -2
  113. data/lib/ddtrace/contrib/rack/middlewares.rb +17 -12
  114. data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -11
  115. data/lib/ddtrace/contrib/rails/ext.rb +6 -2
  116. data/lib/ddtrace/contrib/rails/framework.rb +52 -46
  117. data/lib/ddtrace/contrib/rails/integration.rb +1 -1
  118. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  119. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  120. data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
  121. data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
  122. data/lib/ddtrace/contrib/rake/ext.rb +5 -2
  123. data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
  124. data/lib/ddtrace/contrib/redis/ext.rb +5 -2
  125. data/lib/ddtrace/contrib/redis/patcher.rb +1 -1
  126. data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
  127. data/lib/ddtrace/contrib/resque/ext.rb +5 -2
  128. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
  129. data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
  130. data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
  131. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
  132. data/lib/ddtrace/contrib/sequel/database.rb +1 -1
  133. data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
  134. data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
  135. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
  136. data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
  137. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
  138. data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
  139. data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
  140. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
  141. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
  142. data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
  143. data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
  144. data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
  145. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
  146. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
  147. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  148. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  149. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  150. data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
  151. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
  152. data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
  153. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +1 -1
  154. data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
  155. data/lib/ddtrace/environment.rb +17 -3
  156. data/lib/ddtrace/ext/diagnostics.rb +3 -0
  157. data/lib/ddtrace/ext/environment.rb +2 -0
  158. data/lib/ddtrace/ext/transport.rb +1 -0
  159. data/lib/ddtrace/logger.rb +1 -1
  160. data/lib/ddtrace/pin.rb +39 -15
  161. data/lib/ddtrace/pipeline/span_filter.rb +15 -15
  162. data/lib/ddtrace/runtime/metrics.rb +18 -4
  163. data/lib/ddtrace/sampler.rb +2 -0
  164. data/lib/ddtrace/span.rb +10 -0
  165. data/lib/ddtrace/tracer.rb +15 -8
  166. data/lib/ddtrace/transport/http.rb +15 -0
  167. data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
  168. data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
  169. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
  170. data/lib/ddtrace/transport/response.rb +11 -0
  171. data/lib/ddtrace/version.rb +2 -2
  172. data/lib/ddtrace/workers/async.rb +2 -2
  173. data/lib/ddtrace/workers/loop.rb +1 -1
  174. data/lib/ddtrace/workers/polling.rb +1 -1
  175. data/lib/ddtrace/workers/trace_writer.rb +3 -0
  176. data/lib/ddtrace/writer.rb +33 -12
  177. metadata +124 -4
@@ -16,7 +16,7 @@ module Datadog
16
16
  register_as :rails, auto_patch: false
17
17
 
18
18
  def self.version
19
- Gem.loaded_specs['rails'] && Gem.loaded_specs['rails'].version
19
+ Gem.loaded_specs['railties'] && Gem.loaded_specs['railties'].version
20
20
  end
21
21
 
22
22
  def self.loaded?
@@ -0,0 +1,81 @@
1
+ module Datadog
2
+ module Contrib
3
+ # Instrument Rails.
4
+ module Rails
5
+ # Rails log injection helper methods
6
+ module LogInjection
7
+ module_function
8
+
9
+ def add_lograge_logger(app)
10
+ # custom_options defaults to nil and can be either a hash or a lambda which returns a hash
11
+ # https://github.com/roidrage/lograge/blob/1729eab7956bb95c5992e4adab251e4f93ff9280/lib/lograge.rb#L28
12
+ if (custom_options = app.config.lograge.custom_options).nil?
13
+ # if it's not set, we set to a lambda that returns DD tracing context
14
+ app.config.lograge.custom_options = lambda do |_event|
15
+ # Retrieves trace information for current thread
16
+ correlation = Datadog.tracer.active_correlation
17
+
18
+ datadog_trace_log_hash(correlation)
19
+ end
20
+ # check if lambda, if so then define a new lambda which invokes the original lambda and
21
+ # merges the returned hash with the the DD tracing context hash.
22
+ elsif custom_options.respond_to?(:call)
23
+ app.config.lograge.custom_options = lambda do |event|
24
+ # invoke original lambda
25
+ result = custom_options.call(event)
26
+ # Retrieves trace information for current thread
27
+ correlation = Datadog.tracer.active_correlation
28
+ # merge original lambda with datadog context
29
+ result.merge(datadog_trace_log_hash(correlation))
30
+ end
31
+ # otherwise if it's just a static hash, we have to wrap that hash in a lambda to retrieve
32
+ # the DD tracing context, then merge the tracing context with the original static hash.
33
+ # don't modify if custom_options is not an accepted format.
34
+ elsif custom_options.is_a?(Hash)
35
+ app.config.lograge.custom_options = lambda do |_event|
36
+ # Retrieves trace information for current thread
37
+ correlation = Datadog.tracer.active_correlation
38
+
39
+ # merge original lambda with datadog context
40
+ custom_options.merge(datadog_trace_log_hash(correlation))
41
+ end
42
+ end
43
+ rescue StandardError => e
44
+ # TODO: can we use Datadog.logger at this point?
45
+ Datadog.logger.warn("Unable to add Datadog Trace context to Lograge: #{e.message}")
46
+ false
47
+ end
48
+
49
+ def add_as_tagged_logging_logger(app)
50
+ # we want to check if the current logger is a tagger logger instance
51
+ # log_tags defaults to nil so we have to set as an array if nothing exists yet
52
+ if (log_tags = app.config.log_tags).nil?
53
+ app.config.log_tags = [proc { Datadog.tracer.active_correlation.to_s }]
54
+ # if existing log_tags configuration exists, append to the end of the array
55
+ elsif log_tags.is_a?(Array)
56
+ app.config.log_tags << proc { Datadog.tracer.active_correlation.to_s }
57
+ end
58
+ rescue StandardError => e
59
+ # TODO: can we use Datadog.logger at this point?
60
+ Datadog.logger.warn("Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.message}")
61
+ false
62
+ end
63
+
64
+ def datadog_trace_log_hash(correlation)
65
+ {
66
+ # Adds IDs as tags to log output
67
+ dd: {
68
+ # To preserve precision during JSON serialization, use strings for large numbers
69
+ trace_id: correlation.trace_id.to_s,
70
+ span_id: correlation.span_id.to_s,
71
+ env: correlation.env.to_s,
72
+ service: correlation.service.to_s,
73
+ version: correlation.version.to_s
74
+ },
75
+ ddsource: ['ruby']
76
+ }
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -24,11 +24,16 @@ module Datadog
24
24
  rescue Exception => e
25
25
  tracer = Datadog.configuration[:rails][:tracer]
26
26
  span = tracer.active_span
27
- unless span.nil?
27
+ if !span.nil? && ActionPack::Utils.exception_is_error?(e)
28
28
  # Only set error if it's supposed to be flagged as such
29
29
  # e.g. we don't want to flag 404s.
30
30
  # You can add custom errors via `config.action_dispatch.rescue_responses`
31
- span.set_error(e) if ActionPack::Utils.exception_is_error?(e)
31
+ span.set_error(e)
32
+
33
+ # Some exception gets handled by Rails middleware before it can be set on Rack middleware
34
+ # The rack span is the root span of the request and should make sure it has the full exception
35
+ # set on it.
36
+ env[:datadog_rack_request_span].set_error(e) if env[:datadog_rack_request_span]
32
37
  end
33
38
  raise e
34
39
  end
@@ -1,6 +1,7 @@
1
1
  require 'ddtrace/contrib/rails/utils'
2
2
  require 'ddtrace/contrib/rails/framework'
3
3
  require 'ddtrace/contrib/rails/middlewares'
4
+ require 'ddtrace/contrib/rails/log_injection'
4
5
  require 'ddtrace/contrib/rack/middlewares'
5
6
 
6
7
  module Datadog
@@ -33,6 +34,7 @@ module Datadog
33
34
  # Otherwise the middleware stack will be frozen.
34
35
  # Sometimes we don't want to activate middleware e.g. OpenTracing, etc.
35
36
  add_middleware(app) if Datadog.configuration[:rails][:middleware]
37
+ add_logger(app) if Datadog.configuration[:rails][:log_injection]
36
38
  end
37
39
  end
38
40
 
@@ -50,6 +52,19 @@ module Datadog
50
52
  )
51
53
  end
52
54
 
55
+ def add_logger(app)
56
+ # check if lograge key exists
57
+ if app.config.respond_to?(:lograge) && app.config.lograge.enabled
58
+ Datadog::Contrib::Rails::LogInjection.add_lograge_logger(app)
59
+ # if lograge isn't set, check if tagged logged is enabed.
60
+ # if so, add proc that injects trace identifiers for tagged logging.
61
+ elsif (logger = app.config.logger) && logger.is_a?(::ActiveSupport::TaggedLogging)
62
+ Datadog::Contrib::Rails::LogInjection.add_as_tagged_logging_logger(app)
63
+ else
64
+ Datadog.logger.warn("Unabe to enable Datadog Trace context, Logger #{logger} is not supported")
65
+ end
66
+ end
67
+
53
68
  def patch_after_intialize
54
69
  ::ActiveSupport.on_load(:after_initialize) do
55
70
  Datadog::Contrib::Rails::Patcher.after_intialize(self)
@@ -7,17 +7,21 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Rake integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
20
- option :enabled, default: true
21
25
  option :quantize, default: {}
22
26
  option :service_name, default: Ext::SERVICE_NAME
23
27
  end
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Rake integration constants
5
5
  module Ext
6
6
  APP = 'rake'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_RAKE_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_RAKE_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_RAKE_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_RAKE_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_RAKE_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RAKE_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RAKE_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'rake'.freeze
10
13
  SPAN_INVOKE = 'rake.invoke'.freeze
11
14
  SPAN_EXECUTE = 'rake.execute'.freeze
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Redis integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Redis integration constants
5
5
  module Ext
6
6
  APP = 'redis'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_REDIS_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_REDIS_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_REDIS_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_REDIS_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  METRIC_PIPELINE_LEN = 'redis.pipeline_length'.freeze
10
13
  SERVICE_NAME = 'redis'.freeze
11
14
  SPAN_COMMAND = 'redis.command'.freeze
@@ -76,7 +76,7 @@ module Datadog
76
76
  datadog_configuration[:service_name],
77
77
  app: Ext::APP,
78
78
  app_type: Datadog::Ext::AppTypes::DB,
79
- tracer: datadog_configuration[:tracer]
79
+ tracer: -> { datadog_configuration[:tracer] }
80
80
  )
81
81
  pin.onto(self)
82
82
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Resque integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Resque integration constants
5
5
  module Ext
6
6
  APP = 'resque'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_RESQUE_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_RESQUE_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_RESQUE_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_RESQUE_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_RESQUE_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RESQUE_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RESQUE_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'resque'.freeze
10
13
  SPAN_JOB = 'resque.job'.freeze
11
14
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the RestClient integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # RestClient integration constants
5
5
  module Ext
6
6
  APP = 'rest_client'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_REST_CLIENT_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_REST_CLIENT_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_REST_CLIENT_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_REST_CLIENT_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_REST_CLIENT_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_REST_CLIENT_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_REST_CLIENT_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'rest_client'.freeze
10
13
  SPAN_REQUEST = 'rest_client.request'.freeze
11
14
  end
@@ -62,11 +62,11 @@ module Datadog
62
62
  # rubocop:disable Lint/RescueException
63
63
  rescue Exception => e
64
64
  # rubocop:enable Lint/RescueException
65
- span.set_error(e)
65
+ span.set_error(e) if span
66
66
 
67
67
  raise e
68
68
  ensure
69
- span.finish
69
+ span.finish if span
70
70
  end
71
71
 
72
72
  private
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Sequel integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
  end
@@ -36,7 +36,7 @@ module Datadog
36
36
  Datadog.configuration[:sequel][:service_name] || adapter_name,
37
37
  app: Ext::APP,
38
38
  app_type: Datadog::Ext::AppTypes::DB,
39
- tracer: Datadog.configuration[:sequel][:tracer] || Datadog.tracer
39
+ tracer: -> { Datadog.configuration[:sequel][:tracer] }
40
40
  )
41
41
  end
42
42
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Sequel integration constants
5
5
  module Ext
6
6
  APP = 'sequel'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_SEQUEL_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_SEQUEL_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_SEQUEL_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SEQUEL_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_SEQUEL_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SEQUEL_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SEQUEL_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'sequel'.freeze
10
13
  SPAN_QUERY = 'sequel.query'.freeze
11
14
  TAG_DB_VENDOR = 'sequel.db.vendor'.freeze
@@ -4,8 +4,26 @@ module Datadog
4
4
  # General purpose functions for Sequel
5
5
  module Utils
6
6
  class << self
7
+ # Ruby database connector library
8
+ #
9
+ # e.g. adapter:mysql2 (database:mysql), adapter:jdbc (database:postgres)
7
10
  def adapter_name(database)
8
- Datadog::Utils::Database.normalize_vendor(database.adapter_scheme.to_s)
11
+ scheme = database.adapter_scheme.to_s
12
+
13
+ if scheme == 'jdbc'.freeze
14
+ # The subtype is more important in this case,
15
+ # otherwise all database adapters will be 'jdbc'.
16
+ database_type(database)
17
+ else
18
+ Datadog::Utils::Database.normalize_vendor(scheme)
19
+ end
20
+ end
21
+
22
+ # Database engine
23
+ #
24
+ # e.g. database:mysql (adapter:mysql2), database:postgres (adapter:jdbc)
25
+ def database_type(database)
26
+ Datadog::Utils::Database.normalize_vendor(database.database_type.to_s)
9
27
  end
10
28
 
11
29
  def parse_opts(sql, opts, db_opts)
@@ -6,13 +6,18 @@ module Datadog
6
6
  module Configuration
7
7
  # Default settings for the Shoryuken integration
8
8
  class Settings < Contrib::Configuration::Settings
9
+ option :enabled do |o|
10
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
11
+ o.lazy
12
+ end
13
+
9
14
  option :analytics_enabled do |o|
10
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
15
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
11
16
  o.lazy
12
17
  end
13
18
 
14
19
  option :analytics_sample_rate do |o|
15
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
20
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
16
21
  o.lazy
17
22
  end
18
23
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Shoryuken integration constants
5
5
  module Ext
6
6
  APP = 'shoryuken'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_SHORYUKEN_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_SHORYUKEN_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_SHORYUKEN_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SHORYUKEN_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_SHORYUKEN_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SHORYUKEN_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SHORYUKEN_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'shoryuken'.freeze
10
13
  SPAN_JOB = 'shoryuken.job'.freeze
11
14
  TAG_JOB_ID = 'shoryuken.id'.freeze
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Sidekiq integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24