ddtrace 0.16.1 → 0.17.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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +3 -3
  3. data/CHANGELOG.md +24 -2
  4. data/Rakefile +14 -28
  5. data/docker-compose.yml +1 -0
  6. data/docs/GettingStarted.md +302 -263
  7. data/lib/ddtrace.rb +22 -21
  8. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +23 -0
  9. data/lib/ddtrace/contrib/active_model_serializers/event.rb +4 -2
  10. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
  11. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
  12. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
  13. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +39 -0
  14. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +24 -43
  15. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +3 -2
  16. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +6 -7
  17. data/lib/ddtrace/contrib/active_record/events/sql.rb +10 -8
  18. data/lib/ddtrace/contrib/active_record/ext.rb +22 -0
  19. data/lib/ddtrace/contrib/aws/configuration/settings.rb +15 -0
  20. data/lib/ddtrace/contrib/aws/ext.rb +21 -0
  21. data/lib/ddtrace/contrib/aws/instrumentation.rb +11 -9
  22. data/lib/ddtrace/contrib/aws/integration.rb +32 -0
  23. data/lib/ddtrace/contrib/aws/patcher.rb +42 -41
  24. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +3 -1
  25. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
  26. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +7 -3
  27. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -0
  28. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +15 -0
  29. data/lib/ddtrace/contrib/dalli/ext.rb +15 -0
  30. data/lib/ddtrace/contrib/dalli/instrumentation.rb +3 -3
  31. data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
  32. data/lib/ddtrace/contrib/dalli/patcher.rb +31 -38
  33. data/lib/ddtrace/contrib/dalli/quantize.rb +3 -3
  34. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +15 -0
  35. data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
  36. data/lib/ddtrace/contrib/delayed_job/integration.rb +32 -0
  37. data/lib/ddtrace/contrib/delayed_job/patcher.rb +20 -27
  38. data/lib/ddtrace/contrib/delayed_job/plugin.rb +7 -6
  39. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +16 -0
  40. data/lib/ddtrace/contrib/elasticsearch/ext.rb +18 -0
  41. data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
  42. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +30 -39
  43. data/lib/ddtrace/contrib/excon/configuration/settings.rb +18 -0
  44. data/lib/ddtrace/contrib/excon/ext.rb +13 -0
  45. data/lib/ddtrace/contrib/excon/integration.rb +32 -0
  46. data/lib/ddtrace/contrib/excon/middleware.rb +10 -10
  47. data/lib/ddtrace/contrib/excon/patcher.rb +14 -30
  48. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +23 -0
  49. data/lib/ddtrace/contrib/faraday/ext.rb +13 -0
  50. data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
  51. data/lib/ddtrace/contrib/faraday/middleware.rb +10 -9
  52. data/lib/ddtrace/contrib/faraday/patcher.rb +39 -54
  53. data/lib/ddtrace/contrib/grape/configuration/settings.rb +16 -0
  54. data/lib/ddtrace/contrib/grape/endpoint.rb +10 -13
  55. data/lib/ddtrace/contrib/grape/ext.rb +19 -0
  56. data/lib/ddtrace/contrib/grape/integration.rb +36 -0
  57. data/lib/ddtrace/contrib/grape/patcher.rb +24 -24
  58. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +20 -0
  59. data/lib/ddtrace/contrib/graphql/ext.rb +11 -0
  60. data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
  61. data/lib/ddtrace/contrib/graphql/patcher.rb +33 -41
  62. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +15 -0
  63. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -2
  64. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
  65. data/lib/ddtrace/contrib/grpc/ext.rb +14 -0
  66. data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
  67. data/lib/ddtrace/contrib/grpc/patcher.rb +25 -35
  68. data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
  69. data/lib/ddtrace/contrib/http/configuration/settings.rb +16 -0
  70. data/lib/ddtrace/contrib/http/ext.rb +13 -0
  71. data/lib/ddtrace/contrib/http/integration.rb +32 -0
  72. data/lib/ddtrace/contrib/http/patcher.rb +10 -58
  73. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +18 -0
  74. data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
  75. data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
  76. data/lib/ddtrace/contrib/mongodb/patcher.rb +17 -27
  77. data/lib/ddtrace/contrib/mongodb/subscribers.rb +12 -11
  78. data/lib/ddtrace/contrib/mysql2/client.rb +8 -6
  79. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +15 -0
  80. data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
  81. data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
  82. data/lib/ddtrace/contrib/mysql2/patcher.rb +12 -22
  83. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +23 -0
  84. data/lib/ddtrace/contrib/racecar/event.rb +7 -6
  85. data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
  86. data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
  87. data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
  88. data/lib/ddtrace/contrib/racecar/integration.rb +36 -0
  89. data/lib/ddtrace/contrib/racecar/patcher.rb +24 -41
  90. data/lib/ddtrace/contrib/rack/configuration/settings.rb +39 -0
  91. data/lib/ddtrace/contrib/rack/ext.rb +18 -0
  92. data/lib/ddtrace/contrib/rack/integration.rb +32 -0
  93. data/lib/ddtrace/contrib/rack/middlewares.rb +5 -2
  94. data/lib/ddtrace/contrib/rack/patcher.rb +22 -40
  95. data/lib/ddtrace/contrib/rails/action_controller.rb +10 -7
  96. data/lib/ddtrace/contrib/rails/action_controller_patch.rb +1 -0
  97. data/lib/ddtrace/contrib/rails/active_support.rb +9 -9
  98. data/lib/ddtrace/contrib/rails/configuration/settings.rb +26 -0
  99. data/lib/ddtrace/contrib/rails/core_extensions.rb +12 -15
  100. data/lib/ddtrace/contrib/rails/ext.rb +30 -0
  101. data/lib/ddtrace/contrib/rails/framework.rb +3 -2
  102. data/lib/ddtrace/contrib/rails/integration.rb +37 -0
  103. data/lib/ddtrace/contrib/rails/patcher.rb +56 -63
  104. data/lib/ddtrace/contrib/rails/railtie.rb +3 -10
  105. data/lib/ddtrace/contrib/rake/configuration/settings.rb +17 -0
  106. data/lib/ddtrace/contrib/rake/ext.rb +18 -0
  107. data/lib/ddtrace/contrib/rake/instrumentation.rb +7 -8
  108. data/lib/ddtrace/contrib/rake/integration.rb +36 -0
  109. data/lib/ddtrace/contrib/rake/patcher.rb +23 -33
  110. data/lib/ddtrace/contrib/redis/configuration/settings.rb +15 -0
  111. data/lib/ddtrace/contrib/redis/ext.rb +19 -0
  112. data/lib/ddtrace/contrib/redis/integration.rb +36 -0
  113. data/lib/ddtrace/contrib/redis/patcher.rb +21 -29
  114. data/lib/ddtrace/contrib/redis/tags.rb +3 -3
  115. data/lib/ddtrace/contrib/resque/configuration/settings.rb +16 -0
  116. data/lib/ddtrace/contrib/resque/ext.rb +13 -0
  117. data/lib/ddtrace/contrib/resque/integration.rb +37 -0
  118. data/lib/ddtrace/contrib/resque/patcher.rb +30 -36
  119. data/lib/ddtrace/contrib/resque/resque_job.rb +2 -1
  120. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +5 -8
  121. data/lib/ddtrace/contrib/rest_client/ext.rb +13 -0
  122. data/lib/ddtrace/contrib/rest_client/integration.rb +9 -1
  123. data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
  124. data/lib/ddtrace/contrib/rest_client/request_patch.rb +9 -10
  125. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +2 -0
  126. data/lib/ddtrace/contrib/sequel/database.rb +4 -3
  127. data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
  128. data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
  129. data/lib/ddtrace/contrib/sequel/integration.rb +1 -3
  130. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -1
  131. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +15 -0
  132. data/lib/ddtrace/contrib/sidekiq/ext.rb +19 -0
  133. data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
  134. data/lib/ddtrace/contrib/sidekiq/patcher.rb +18 -18
  135. data/lib/ddtrace/contrib/sidekiq/tracer.rb +10 -10
  136. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +27 -0
  137. data/lib/ddtrace/contrib/sinatra/env.rb +3 -4
  138. data/lib/ddtrace/contrib/sinatra/ext.rb +19 -0
  139. data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
  140. data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
  141. data/lib/ddtrace/contrib/sinatra/tracer.rb +4 -34
  142. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +2 -3
  143. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +15 -0
  144. data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
  145. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +6 -5
  146. data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
  147. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +29 -35
  148. data/lib/ddtrace/encoding.rb +21 -16
  149. data/lib/ddtrace/span.rb +29 -0
  150. data/lib/ddtrace/transport.rb +2 -2
  151. data/lib/ddtrace/version.rb +2 -2
  152. metadata +74 -6
  153. data/lib/ddtrace/ext/cache.rb +0 -8
  154. data/lib/ddtrace/ext/grpc.rb +0 -7
  155. data/lib/ddtrace/ext/mongo.rb +0 -12
  156. data/lib/ddtrace/ext/redis.rb +0 -17
@@ -0,0 +1,37 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/resque/configuration/settings'
3
+ require 'ddtrace/contrib/resque/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Resque
8
+ # Description of Resque integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :resque, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['resque'] && Gem.loaded_specs['resque'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Resque)
20
+ end
21
+
22
+ def default_configuration
23
+ Configuration::Settings.new
24
+ end
25
+
26
+ def patcher
27
+ Patcher
28
+ end
29
+
30
+ class << self
31
+ # Globally-acccesible reference for pre-forking optimization
32
+ attr_accessor :sync_writer
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,49 +1,43 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/sidekiq/ext'
4
+
1
5
  module Datadog
2
6
  module Contrib
3
- # Namespace for `resque` integration
4
7
  module Resque
5
- SERVICE = 'resque'.freeze
6
-
7
- class << self
8
- # Globally-acccesible reference for pre-forking optimization
9
- attr_accessor :sync_writer
10
- end
11
-
12
- # Patcher for Resque integration - sets up the pin for the integration
8
+ # Patcher enables patching of 'resque' module.
13
9
  module Patcher
14
- include Base
15
- register_as :resque, auto_patch: true
16
- option :service_name, default: SERVICE
17
-
18
- @patched = false
19
- option :workers, default: []
20
-
21
- class << self
22
- def patch
23
- return @patched if patched? || !defined?(::Resque)
10
+ include Contrib::Patcher
24
11
 
25
- require 'ddtrace/ext/app_types'
26
- require_relative 'resque_job'
12
+ module_function
27
13
 
28
- add_pin
29
- get_option(:workers).each { |worker| worker.extend(ResqueJob) }
30
- @patched = true
31
- rescue => e
32
- Tracer.log.error("Unable to apply Resque integration: #{e}")
33
- @patched
34
- end
14
+ def patched?
15
+ done?(:resque)
16
+ end
35
17
 
36
- def patched?
37
- @patched
18
+ def patch
19
+ do_once(:resque) do
20
+ begin
21
+ require_relative 'resque_job'
22
+ add_pin
23
+ get_option(:workers).each { |worker| worker.extend(ResqueJob) }
24
+ rescue StandardError => e
25
+ Datadog::Tracer.log.error("Unable to apply Resque integration: #{e}")
26
+ end
38
27
  end
28
+ end
39
29
 
40
- private
30
+ def add_pin
31
+ Pin.new(
32
+ get_option(:service_name),
33
+ app: Ext::APP,
34
+ app_type: Datadog::Ext::AppTypes::WORKER,
35
+ tracer: get_option(:tracer)
36
+ ).onto(::Resque)
37
+ end
41
38
 
42
- def add_pin
43
- Pin
44
- .new(get_option(:service_name), app: 'resque', app_type: Ext::AppTypes::WORKER)
45
- .onto(::Resque)
46
- end
39
+ def get_option(option)
40
+ Datadog.configuration[:resque].get_option(option)
47
41
  end
48
42
  end
49
43
  end
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/ext/app_types'
2
2
  require 'ddtrace/sync_writer'
3
+ require 'ddtrace/contrib/sidekiq/ext'
3
4
  require 'resque'
4
5
 
5
6
  module Datadog
@@ -10,7 +11,7 @@ module Datadog
10
11
  def around_perform(*args)
11
12
  pin = Pin.get_from(::Resque)
12
13
  return yield unless pin && pin.tracer
13
- pin.tracer.trace('resque.job', service: pin.service) do |span|
14
+ pin.tracer.trace(Ext::SPAN_JOB, service: pin.service) do |span|
14
15
  span.resource = name
15
16
  span.span_type = pin.app_type
16
17
  yield
@@ -1,20 +1,17 @@
1
1
  require 'ddtrace/contrib/configuration/settings'
2
- require 'ddtrace/contrib/active_record/utils'
2
+ require 'ddtrace/contrib/rest_client/ext'
3
3
 
4
4
  module Datadog
5
5
  module Contrib
6
6
  module RestClient
7
7
  module Configuration
8
- # Unique settings for RestClient
8
+ # Custom settings for the RestClient integration
9
9
  class Settings < Contrib::Configuration::Settings
10
- NAME = 'rest_client'.freeze
11
-
12
- option :service_name, default: NAME, depends_on: [:tracer] do |value|
13
- get_option(:tracer).set_service_info(value, NAME, Ext::AppTypes::DB)
10
+ option :distributed_tracing, default: false
11
+ option :service_name, default: Ext::SERVICE_NAME, depends_on: [:tracer] do |value|
12
+ get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::DB)
14
13
  value
15
14
  end
16
-
17
- option :distributed_tracing, default: false
18
15
  end
19
16
  end
20
17
  end
@@ -0,0 +1,13 @@
1
+ module Datadog
2
+ module Contrib
3
+ module RestClient
4
+ # RestClient integration constants
5
+ module Ext
6
+ APP = 'rest_client'.freeze
7
+ SERVICE_NAME = 'rest_client'.freeze
8
+
9
+ SPAN_REQUEST = 'rest_client.request'.freeze
10
+ end
11
+ end
12
+ end
13
+ end
@@ -10,8 +10,16 @@ module Datadog
10
10
  include Contrib::Integration
11
11
  register_as :rest_client
12
12
 
13
+ def self.version
14
+ Gem.loaded_specs['rest-client'] && Gem.loaded_specs['rest-client'].version
15
+ end
16
+
17
+ def self.present?
18
+ super && defined?(::RestClient::Request)
19
+ end
20
+
13
21
  def self.compatible?
14
- RUBY_VERSION >= '1.9.3' && defined?(::RestClient::Request)
22
+ super && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('1.9.3')
15
23
  end
16
24
 
17
25
  def default_configuration
@@ -1,7 +1,7 @@
1
1
  module Datadog
2
2
  module Contrib
3
3
  module RestClient
4
- # RestClient integration
4
+ # Patcher enables patching of 'rest_client' module.
5
5
  module Patcher
6
6
  include Contrib::Patcher
7
7
 
@@ -1,14 +1,13 @@
1
1
  require 'ddtrace/ext/net'
2
2
  require 'ddtrace/ext/distributed'
3
3
  require 'ddtrace/propagation/http_propagator'
4
+ require 'ddtrace/contrib/rest_client/ext'
4
5
 
5
6
  module Datadog
6
7
  module Contrib
7
8
  module RestClient
8
9
  # RestClient RequestPatch
9
10
  module RequestPatch
10
- REQUEST_TRACE_NAME = 'rest_client.request'.freeze
11
-
12
11
  def self.included(base)
13
12
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
14
13
  base.class_eval do
@@ -48,14 +47,14 @@ module Datadog
48
47
 
49
48
  def datadog_tag_request(uri, span)
50
49
  span.resource = method.to_s.upcase
51
- span.set_tag(Ext::HTTP::URL, uri.path)
52
- span.set_tag(Ext::HTTP::METHOD, method.to_s.upcase)
53
- span.set_tag(Ext::NET::TARGET_HOST, uri.host)
54
- span.set_tag(Ext::NET::TARGET_PORT, uri.port)
50
+ span.set_tag(Datadog::Ext::HTTP::URL, uri.path)
51
+ span.set_tag(Datadog::Ext::HTTP::METHOD, method.to_s.upcase)
52
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, uri.host)
53
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, uri.port)
55
54
  end
56
55
 
57
56
  def datadog_trace_request(uri)
58
- span = datadog_configuration[:tracer].trace(REQUEST_TRACE_NAME,
57
+ span = datadog_configuration[:tracer].trace(Ext::SPAN_REQUEST,
59
58
  service: datadog_configuration[:service_name],
60
59
  span_type: Datadog::Ext::AppTypes::WEB)
61
60
 
@@ -63,11 +62,11 @@ module Datadog
63
62
 
64
63
  response = yield(span)
65
64
 
66
- span.set_tag(Ext::HTTP::STATUS_CODE, response.code)
65
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
67
66
  response
68
67
  rescue ::RestClient::ExceptionWithResponse => e
69
- span.set_error(e) if Ext::HTTP::ERROR_RANGE.cover?(e.http_code)
70
- span.set_tag(Ext::HTTP::STATUS_CODE, e.http_code)
68
+ span.set_error(e) if Datadog::Ext::HTTP::ERROR_RANGE.cover?(e.http_code)
69
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, e.http_code)
71
70
 
72
71
  raise e
73
72
  # rubocop:disable Lint/RescueException
@@ -1,9 +1,11 @@
1
1
  require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/sequel/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
5
6
  module Sequel
6
7
  module Configuration
8
+ # Custom settings for the Sequel integration
7
9
  class Settings < Contrib::Configuration::Settings
8
10
  # Add any custom Sequel settings or behavior here.
9
11
  end
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/ext/sql'
2
2
  require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/sequel/ext'
3
4
  require 'ddtrace/contrib/sequel/utils'
4
5
 
5
6
  module Datadog
@@ -18,11 +19,11 @@ module Datadog
18
19
 
19
20
  response = nil
20
21
 
21
- datadog_pin.tracer.trace('sequel.query') do |span|
22
+ datadog_pin.tracer.trace(Ext::SPAN_QUERY) do |span|
22
23
  span.service = datadog_pin.service
23
24
  span.resource = opts[:query]
24
25
  span.span_type = Datadog::Ext::SQL::TYPE
25
- span.set_tag('sequel.db.vendor', adapter_name)
26
+ span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
26
27
  response = super(sql, options)
27
28
  end
28
29
  response
@@ -31,7 +32,7 @@ module Datadog
31
32
  def datadog_pin
32
33
  @pin ||= Datadog::Pin.new(
33
34
  Datadog.configuration[:sequel][:service_name] || adapter_name,
34
- app: Integration::APP,
35
+ app: Ext::APP,
35
36
  app_type: Datadog::Ext::AppTypes::DB,
36
37
  tracer: Datadog.configuration[:sequel][:tracer] || Datadog.tracer
37
38
  )
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/ext/sql'
2
2
  require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/sequel/ext'
3
4
  require 'ddtrace/contrib/sequel/utils'
4
5
 
5
6
  module Datadog
@@ -39,11 +40,11 @@ module Datadog
39
40
  opts = Utils.parse_opts(sql, options, db.opts)
40
41
  response = nil
41
42
 
42
- datadog_pin.tracer.trace('sequel.query') do |span|
43
+ datadog_pin.tracer.trace(Ext::SPAN_QUERY) do |span|
43
44
  span.service = datadog_pin.service
44
45
  span.resource = opts[:query]
45
46
  span.span_type = Datadog::Ext::SQL::TYPE
46
- span.set_tag('sequel.db.vendor', adapter_name)
47
+ span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
47
48
  response = super_method.call(sql, options, &block)
48
49
  end
49
50
  response
@@ -0,0 +1,15 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Sequel
4
+ # Sequel integration constants
5
+ module Ext
6
+ APP = 'sequel'.freeze
7
+ SERVICE_NAME = 'sequel'.freeze
8
+
9
+ SPAN_QUERY = 'sequel.query'.freeze
10
+
11
+ TAG_DB_VENDOR = 'sequel.db.vendor'.freeze
12
+ end
13
+ end
14
+ end
15
+ end
@@ -9,8 +9,6 @@ module Datadog
9
9
  class Integration
10
10
  include Contrib::Integration
11
11
 
12
- APP = 'sequel'.freeze
13
-
14
12
  register_as :sequel, auto_patch: false
15
13
 
16
14
  def self.version
@@ -22,7 +20,7 @@ module Datadog
22
20
  end
23
21
 
24
22
  def self.compatible?
25
- super && RUBY_VERSION >= '2.0.0'
23
+ super && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0.0')
26
24
  end
27
25
 
28
26
  def default_configuration
@@ -6,7 +6,6 @@ module Datadog
6
6
  module Contrib
7
7
  module Sequel
8
8
  # Patcher enables patching of 'sequel' module.
9
- # This is used in monkey.rb to manually apply patches
10
9
  module Patcher
11
10
  include Contrib::Patcher
12
11
 
@@ -0,0 +1,15 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/sidekiq/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Sidekiq
7
+ module Configuration
8
+ # Custom settings for the Sidekiq integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :service_name, default: Ext::SERVICE_NAME
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Sidekiq
4
+ # Sidekiq integration constants
5
+ module Ext
6
+ APP = 'sidekiq'.freeze
7
+ SERVICE_NAME = 'sidekiq'.freeze
8
+
9
+ SPAN_JOB = 'sidekiq.job'.freeze
10
+
11
+ TAG_JOB_DELAY = 'sidekiq.job.delay'.freeze
12
+ TAG_JOB_ID = 'sidekiq.job.id'.freeze
13
+ TAG_JOB_QUEUE = 'sidekiq.job.queue'.freeze
14
+ TAG_JOB_RETRY = 'sidekiq.job.retry'.freeze
15
+ TAG_JOB_WRAPPER = 'sidekiq.job.wrapper'.freeze
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/sidekiq/configuration/settings'
3
+ require 'ddtrace/contrib/sidekiq/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Sidekiq
8
+ # Description of Sidekiq integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :sidekiq
13
+
14
+ def self.version
15
+ Gem.loaded_specs['sidekiq'] && Gem.loaded_specs['sidekiq'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Sidekiq)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && version >= Gem::Version.new('3.5.4')
24
+ end
25
+
26
+ def default_configuration
27
+ Configuration::Settings.new
28
+ end
29
+
30
+ def patcher
31
+ Patcher
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,32 +1,32 @@
1
+ require 'ddtrace/contrib/patcher'
2
+
1
3
  module Datadog
2
4
  module Contrib
3
5
  module Sidekiq
4
- # Provides instrumentation support for Sidekiq
6
+ # Patcher enables patching of 'sidekiq' module.
5
7
  module Patcher
6
- include Base
7
- VERSION_REQUIRED = Gem::Version.new('4.0.0')
8
- register_as :sidekiq
9
- option :service_name, default: 'sidekiq'
10
- option :tracer, default: Datadog.tracer
8
+ include Contrib::Patcher
11
9
 
12
10
  module_function
13
11
 
14
- def patch
15
- return unless compatible?
16
-
17
- require_relative 'tracer'
12
+ def patched?
13
+ done?(:sidekiq)
14
+ end
18
15
 
19
- ::Sidekiq.configure_server do |config|
20
- config.server_middleware do |chain|
21
- chain.add(Sidekiq::Tracer)
16
+ def patch
17
+ do_once(:sidekiq) do
18
+ begin
19
+ require 'ddtrace/contrib/sidekiq/tracer'
20
+ ::Sidekiq.configure_server do |config|
21
+ config.server_middleware do |chain|
22
+ chain.add(Sidekiq::Tracer)
23
+ end
24
+ end
25
+ rescue StandardError => e
26
+ Datadog::Tracer.log.error("Unable to apply Sidekiq integration: #{e}")
22
27
  end
23
28
  end
24
29
  end
25
-
26
- def compatible?
27
- defined?(::Sidekiq) &&
28
- Gem::Version.new(::Sidekiq::VERSION) >= VERSION_REQUIRED
29
- end
30
30
  end
31
31
  end
32
32
  end