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
@@ -1,3 +1,5 @@
1
+ require 'ddtrace/contrib/aws/ext'
2
+
1
3
  module Datadog
2
4
  module Contrib
3
5
  module Aws
@@ -15,7 +17,7 @@ module Datadog
15
17
 
16
18
  return @handler.call(context) unless pin && pin.enabled?
17
19
 
18
- pin.tracer.trace(RESOURCE) do |span|
20
+ pin.tracer.trace(Ext::SPAN_COMMAND) do |span|
19
21
  result = @handler.call(context)
20
22
  annotate!(span, pin, ParsedContext.new(context))
21
23
  result
@@ -27,15 +29,15 @@ module Datadog
27
29
  def annotate!(span, pin, context)
28
30
  span.service = pin.service
29
31
  span.span_type = pin.app_type
30
- span.name = RESOURCE
32
+ span.name = Ext::SPAN_COMMAND
31
33
  span.resource = context.safely(:resource)
32
- span.set_tag('aws.agent', AGENT)
33
- span.set_tag('aws.operation', context.safely(:operation))
34
- span.set_tag('aws.region', context.safely(:region))
35
- span.set_tag('path', context.safely(:path))
36
- span.set_tag('host', context.safely(:host))
37
- span.set_tag(Ext::HTTP::METHOD, context.safely(:http_method))
38
- span.set_tag(Ext::HTTP::STATUS_CODE, context.safely(:status_code))
34
+ span.set_tag(Ext::TAG_AGENT, Ext::TAG_DEFAULT_AGENT)
35
+ span.set_tag(Ext::TAG_OPERATION, context.safely(:operation))
36
+ span.set_tag(Ext::TAG_REGION, context.safely(:region))
37
+ span.set_tag(Ext::TAG_PATH, context.safely(:path))
38
+ span.set_tag(Ext::TAG_HOST, context.safely(:host))
39
+ span.set_tag(Datadog::Ext::HTTP::METHOD, context.safely(:http_method))
40
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, context.safely(:status_code))
39
41
  end
40
42
  end
41
43
  end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/aws/configuration/settings'
3
+ require 'ddtrace/contrib/aws/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Aws
8
+ # Description of AWS integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :aws, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['aws-sdk'] && Gem.loaded_specs['aws-sdk'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Seahorse::Client::Base)
20
+ end
21
+
22
+ def default_configuration
23
+ Configuration::Settings.new
24
+ end
25
+
26
+ def patcher
27
+ Patcher
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,57 +1,58 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/aws/ext'
4
+
1
5
  module Datadog
2
6
  module Contrib
3
7
  module Aws
4
- AGENT = 'aws-sdk-ruby'.freeze
5
- RESOURCE = 'aws.command'.freeze
6
-
7
- # Responsible for hooking the instrumentation into aws-sdk
8
+ # Patcher enables patching of 'aws' module.
8
9
  module Patcher
9
- include Base
10
- register_as :aws, auto_patch: true
11
- option :service_name, default: 'aws'
12
-
13
- @patched = false
14
-
15
- class << self
16
- def patch
17
- return @patched if patched? || !defined?(Seahorse::Client::Base)
10
+ include Contrib::Patcher
18
11
 
19
- require 'ddtrace/ext/app_types'
20
- require 'ddtrace/contrib/aws/parsed_context'
21
- require 'ddtrace/contrib/aws/instrumentation'
22
- require 'ddtrace/contrib/aws/services'
12
+ module_function
23
13
 
24
- add_pin
25
- add_plugin(Seahorse::Client::Base, *loaded_constants)
26
-
27
- @patched = true
28
- rescue => e
29
- Datadog::Tracer.log.error("Unable to apply AWS integration: #{e}")
30
- @patched
31
- end
14
+ def patched?
15
+ done?(:aws)
16
+ end
32
17
 
33
- def patched?
34
- @patched
18
+ def patch
19
+ do_once(:aws) do
20
+ begin
21
+ require 'ddtrace/contrib/aws/parsed_context'
22
+ require 'ddtrace/contrib/aws/instrumentation'
23
+ require 'ddtrace/contrib/aws/services'
24
+
25
+ add_pin
26
+ add_plugin(Seahorse::Client::Base, *loaded_constants)
27
+ rescue StandardError => e
28
+ Datadog::Tracer.log.error("Unable to apply AWS integration: #{e}")
29
+ end
35
30
  end
31
+ end
36
32
 
37
- private
33
+ def add_pin
34
+ Pin
35
+ .new(
36
+ get_option(:service_name),
37
+ app: Ext::APP,
38
+ app_type: Datadog::Ext::AppTypes::WEB,
39
+ tracer: get_option(:tracer)
40
+ ).onto(::Aws)
41
+ end
38
42
 
39
- def add_pin
40
- Pin
41
- .new(get_option(:service_name), app: 'aws', app_type: Ext::AppTypes::WEB)
42
- .onto(::Aws)
43
- end
43
+ def add_plugin(*targets)
44
+ targets.each { |klass| klass.add_plugin(Instrumentation) }
45
+ end
44
46
 
45
- def add_plugin(*targets)
46
- targets.each { |klass| klass.add_plugin(Instrumentation) }
47
+ def loaded_constants
48
+ SERVICES.each_with_object([]) do |service, constants|
49
+ next if ::Aws.autoload?(service)
50
+ constants << ::Aws.const_get(service).const_get(:Client) rescue next
47
51
  end
52
+ end
48
53
 
49
- def loaded_constants
50
- SERVICES.each_with_object([]) do |service, constants|
51
- next if ::Aws.autoload?(service)
52
- constants << ::Aws.const_get(service).const_get(:Client) rescue next
53
- end
54
- end
54
+ def get_option(option)
55
+ Datadog.configuration[:aws].get_option(option)
55
56
  end
56
57
  end
57
58
  end
@@ -1,11 +1,13 @@
1
1
  require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/concurrent_ruby/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
5
6
  module ConcurrentRuby
6
7
  module Configuration
8
+ # Custom settings for the ConcurrentRuby integration
7
9
  class Settings < Contrib::Configuration::Settings
8
- # Add any custom ConcurrentRuby configuration or behavior here.
10
+ option :service_name, default: Ext::SERVICE_NAME
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,11 @@
1
+ module Datadog
2
+ module Contrib
3
+ module ConcurrentRuby
4
+ # ConcurrentRuby integration constants
5
+ module Ext
6
+ APP = 'concurrent-ruby'.freeze
7
+ SERVICE_NAME = 'concurrent-ruby'.freeze
8
+ end
9
+ end
10
+ end
11
+ end
@@ -5,14 +5,18 @@ require 'ddtrace/contrib/concurrent_ruby/configuration/settings'
5
5
  module Datadog
6
6
  module Contrib
7
7
  module ConcurrentRuby
8
- # Propagate Tracing context in Concurrent::Future
8
+ # Describes the ConcurrentRuby integration
9
9
  class Integration
10
10
  include Contrib::Integration
11
11
 
12
12
  register_as :concurrent_ruby
13
13
 
14
- def self.compatible?
15
- defined?(::Concurrent::Future)
14
+ def self.version
15
+ Gem.loaded_specs['concurrent-ruby'] && Gem.loaded_specs['concurrent-ruby'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Concurrent::Future)
16
20
  end
17
21
 
18
22
  def default_configuration
@@ -25,6 +25,7 @@ module Datadog
25
25
  end
26
26
  end
27
27
 
28
+ # Propagate tracing context in Concurrent::Future
28
29
  def patch_future
29
30
  ::Concurrent::Future.send(:include, FuturePatch)
30
31
  end
@@ -0,0 +1,15 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/dalli/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Dalli
7
+ module Configuration
8
+ # Custom settings for the Dalli 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,15 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Dalli
4
+ # Dalli integration constants
5
+ module Ext
6
+ APP = 'dalli'.freeze
7
+ SERVICE_NAME = 'memcached'.freeze
8
+
9
+ QUANTIZE_MAX_CMD_LENGTH = 100
10
+ SPAN_COMMAND = 'memcached.command'.freeze
11
+ TAG_COMMAND = 'memcached.command'.freeze
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
- require_relative 'quantize'
2
1
  require 'ddtrace/ext/net'
2
+ require 'ddtrace/contrib/dalli/quantize'
3
3
 
4
4
  module Datadog
5
5
  module Contrib
@@ -15,14 +15,14 @@ module Datadog
15
15
  def request(op, *args)
16
16
  pin = Datadog::Pin.get_from(::Dalli)
17
17
 
18
- pin.tracer.trace(Datadog::Contrib::Dalli::NAME) do |span|
18
+ pin.tracer.trace(Datadog::Contrib::Dalli::Ext::SPAN_COMMAND) do |span|
19
19
  span.resource = op.to_s.upcase
20
20
  span.service = pin.service
21
21
  span.span_type = pin.app_type
22
22
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, hostname)
23
23
  span.set_tag(Datadog::Ext::NET::TARGET_PORT, port)
24
24
  cmd = Datadog::Contrib::Dalli::Quantize.format_command(op, args)
25
- span.set_tag(Datadog::Contrib::Dalli::CMD_TAG, cmd)
25
+ span.set_tag(Datadog::Contrib::Dalli::Ext::TAG_COMMAND, cmd)
26
26
 
27
27
  __request(op, *args)
28
28
  end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/dalli/configuration/settings'
3
+ require 'ddtrace/contrib/dalli/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Dalli
8
+ # Description of Dalli integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :dalli, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['dalli'] && Gem.loaded_specs['dalli'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Dalli)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && version > Gem::Version.new('2.0.0')
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,51 +1,44 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/dalli/ext'
4
+ require 'ddtrace/contrib/dalli/instrumentation'
5
+
1
6
  module Datadog
2
7
  module Contrib
3
8
  module Dalli
4
- COMPATIBLE_WITH = Gem::Version.new('2.0.0')
5
- NAME = 'memcached.command'.freeze
6
- CMD_TAG = 'memcached.command'.freeze
7
-
8
- # Responsible for hooking the instrumentation into `dalli`
9
+ # Patcher enables patching of 'dalli' module.
9
10
  module Patcher
10
- include Base
11
- register_as :dalli, auto_patch: true
12
- option :service_name, default: 'memcached'
13
-
14
- @patched = false
15
-
16
- class << self
17
- def patch
18
- return @patched if patched? || !compatible?
11
+ include Contrib::Patcher
19
12
 
20
- require 'ddtrace/ext/app_types'
21
- require_relative 'instrumentation'
13
+ module_function
22
14
 
23
- add_pin!
24
- Instrumentation.patch!
25
-
26
- @patched = true
27
- rescue => e
28
- Tracer.log.error("Unable to apply Dalli integration: #{e}")
29
- @patched
30
- end
15
+ def patched?
16
+ done?(:dalli)
17
+ end
31
18
 
32
- def patched?
33
- @patched
19
+ def patch
20
+ do_once(:dalli) do
21
+ begin
22
+ add_pin!
23
+ Instrumentation.patch!
24
+ rescue StandardError => e
25
+ Datadog::Tracer.log.error("Unable to apply Dalli integration: #{e}")
26
+ end
34
27
  end
28
+ end
35
29
 
36
- private
37
-
38
- def compatible?
39
- return unless defined?(::Dalli::VERSION)
40
-
41
- Gem::Version.new(::Dalli::VERSION) > COMPATIBLE_WITH
42
- end
30
+ def add_pin!
31
+ Pin
32
+ .new(
33
+ get_option(:service_name),
34
+ app: Ext::APP,
35
+ app_type: Datadog::Ext::AppTypes::CACHE,
36
+ tracer: get_option(:tracer)
37
+ ).onto(::Dalli)
38
+ end
43
39
 
44
- def add_pin!
45
- Pin
46
- .new(get_option(:service_name), app: 'dalli', app_type: Ext::AppTypes::CACHE)
47
- .onto(::Dalli)
48
- end
40
+ def get_option(option)
41
+ Datadog.configuration[:dalli].get_option(option)
49
42
  end
50
43
  end
51
44
  end
@@ -1,17 +1,17 @@
1
+ require 'ddtrace/contrib/dalli/ext'
2
+
1
3
  module Datadog
2
4
  module Contrib
3
5
  module Dalli
4
6
  # Quantize contains dalli-specic quantization tools.
5
7
  module Quantize
6
- MAX_CMD_LENGTH = 100
7
-
8
8
  module_function
9
9
 
10
10
  def format_command(operation, args)
11
11
  placeholder = "#{operation} BLOB (OMITTED)"
12
12
  command = [operation, *args].join(' ').strip
13
13
  command = Utils.utf8_encode(command, binary: true, placeholder: placeholder)
14
- Utils.truncate(command, MAX_CMD_LENGTH)
14
+ Utils.truncate(command, Ext::QUANTIZE_MAX_CMD_LENGTH)
15
15
  rescue => e
16
16
  Tracer.log.debug("Error sanitizing Dalli operation: #{e}")
17
17
  placeholder
@@ -0,0 +1,15 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/delayed_job/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module DelayedJob
7
+ module Configuration
8
+ # Custom settings for the DelayedJob 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