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,15 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/mysql2/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Mysql2
7
+ module Configuration
8
+ # Custom settings for the Mysql2 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 Mysql2
4
+ # Mysql2 integration constants
5
+ module Ext
6
+ APP = 'mysql2'.freeze
7
+ SERVICE_NAME = 'mysql2'.freeze
8
+
9
+ SPAN_QUERY = 'mysql2.query'.freeze
10
+
11
+ TAG_DB_NAME = 'mysql2.db.name'.freeze
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/mysql2/configuration/settings'
3
+ require 'ddtrace/contrib/mysql2/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Mysql2
8
+ # Description of Mysql2 integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :mysql2
13
+
14
+ def self.version
15
+ Gem.loaded_specs['mysql2'] && Gem.loaded_specs['mysql2'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Mysql2)
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,37 +1,27 @@
1
+ require 'ddtrace/contrib/patcher'
1
2
  require 'ddtrace/contrib/mysql2/client'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
5
6
  module Mysql2
6
- # Mysql2 patcher
7
+ # Patcher enables patching of 'mysql2' module.
7
8
  module Patcher
8
- include Base
9
-
10
- register_as :mysql2
11
- option :service_name, default: 'mysql2'
12
- option :tracer, default: Datadog.tracer
13
-
14
- @patched = false
9
+ include Contrib::Patcher
15
10
 
16
11
  module_function
17
12
 
18
- def patch
19
- return @patched if patched? || !compatible?
20
-
21
- patch_mysql2_client
22
-
23
- @patched = true
24
- rescue StandardError => e
25
- Tracer.log.error("Unable to apply mysql2 integration: #{e}")
26
- @patched
27
- end
28
-
29
13
  def patched?
30
- @patched
14
+ done?(:mysql2)
31
15
  end
32
16
 
33
- def compatible?
34
- defined?(::Mysql2)
17
+ def patch
18
+ do_once(:mysql2) do
19
+ begin
20
+ patch_mysql2_client
21
+ rescue StandardError => e
22
+ Datadog::Tracer.log.error("Unable to apply mysql2 integration: #{e}")
23
+ end
24
+ end
35
25
  end
36
26
 
37
27
  def patch_mysql2_client
@@ -0,0 +1,23 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/racecar/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Racecar
7
+ module Configuration
8
+ # Custom settings for the Racecar integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :service_name, default: Ext::SERVICE_NAME
11
+ option :tracer, default: Datadog.tracer do |value|
12
+ (value || Datadog.tracer).tap do |v|
13
+ # Make sure to update tracers of all subscriptions
14
+ Events.subscriptions.each do |subscription|
15
+ subscription.tracer = v
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/contrib/active_support/notifications/event'
2
+ require 'ddtrace/contrib/racecar/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
@@ -35,12 +36,12 @@ module Datadog
35
36
  span.service = configuration[:service_name]
36
37
  span.resource = payload[:consumer_class]
37
38
 
38
- span.set_tag('kafka.topic', payload[:topic])
39
- span.set_tag('kafka.consumer', payload[:consumer_class])
40
- span.set_tag('kafka.partition', payload[:partition])
41
- span.set_tag('kafka.offset', payload[:offset]) if payload.key?(:offset)
42
- span.set_tag('kafka.first_offset', payload[:first_offset]) if payload.key?(:first_offset)
43
- span.set_tag('kafka.message_count', payload[:message_count]) if payload.key?(:message_count)
39
+ span.set_tag(Ext::TAG_TOPIC, payload[:topic])
40
+ span.set_tag(Ext::TAG_CONSUMER, payload[:consumer_class])
41
+ span.set_tag(Ext::TAG_PARTITION, payload[:partition])
42
+ span.set_tag(Ext::TAG_OFFSET, payload[:offset]) if payload.key?(:offset)
43
+ span.set_tag(Ext::TAG_FIRST_OFFSET, payload[:first_offset]) if payload.key?(:first_offset)
44
+ span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
44
45
  span.set_error(payload[:exception_object]) if payload[:exception_object]
45
46
  end
46
47
 
@@ -1,3 +1,4 @@
1
+ require 'ddtrace/contrib/racecar/ext'
1
2
  require 'ddtrace/contrib/racecar/event'
2
3
 
3
4
  module Datadog
@@ -9,7 +10,6 @@ module Datadog
9
10
  include Racecar::Event
10
11
 
11
12
  EVENT_NAME = 'process_batch.racecar'.freeze
12
- SPAN_NAME = 'racecar.batch'.freeze
13
13
 
14
14
  module_function
15
15
 
@@ -18,7 +18,7 @@ module Datadog
18
18
  end
19
19
 
20
20
  def span_name
21
- self::SPAN_NAME
21
+ Ext::SPAN_BATCH
22
22
  end
23
23
  end
24
24
  end
@@ -1,3 +1,4 @@
1
+ require 'ddtrace/contrib/racecar/ext'
1
2
  require 'ddtrace/contrib/racecar/event'
2
3
 
3
4
  module Datadog
@@ -9,7 +10,6 @@ module Datadog
9
10
  include Racecar::Event
10
11
 
11
12
  EVENT_NAME = 'process_message.racecar'.freeze
12
- SPAN_NAME = 'racecar.message'.freeze
13
13
 
14
14
  module_function
15
15
 
@@ -18,7 +18,7 @@ module Datadog
18
18
  end
19
19
 
20
20
  def span_name
21
- self::SPAN_NAME
21
+ Ext::SPAN_MESSAGE
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Racecar
4
+ # Racecar integration constants
5
+ module Ext
6
+ APP = 'racecar'.freeze
7
+ SERVICE_NAME = 'racecar'.freeze
8
+
9
+ SPAN_BATCH = 'racecar.batch'.freeze
10
+ SPAN_MESSAGE = 'racecar.message'.freeze
11
+
12
+ TAG_CONSUMER = 'kafka.consumer'.freeze
13
+ TAG_FIRST_OFFSET = 'kafka.first_offset'.freeze
14
+ TAG_MESSAGE_COUNT = 'kafka.message_count'.freeze
15
+ TAG_OFFSET = 'kafka.offset'.freeze
16
+ TAG_PARTITION = 'kafka.partition'.freeze
17
+ TAG_TOPIC = 'kafka.topic'.freeze
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/racecar/configuration/settings'
3
+ require 'ddtrace/contrib/racecar/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Racecar
8
+ # Description of Racecar integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :racecar, auto_patch: false
13
+
14
+ def self.version
15
+ Gem.loaded_specs['racecar'] && Gem.loaded_specs['racecar'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Racecar)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && defined?(::ActiveSupport::Notifications)
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,54 +1,37 @@
1
+ require 'ddtrace/contrib/patcher'
1
2
  require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/racecar/ext'
2
4
  require 'ddtrace/contrib/racecar/events'
3
5
 
4
6
  module Datadog
5
7
  module Contrib
6
8
  module Racecar
7
- # Provides instrumentation for `racecar` through ActiveSupport instrumentation signals
9
+ # Patcher enables patching of 'racecar' module.
8
10
  module Patcher
9
- include Base
11
+ include Contrib::Patcher
10
12
 
11
- register_as :racecar
12
- option :service_name, default: 'racecar'
13
- option :tracer, default: Datadog.tracer do |value|
14
- (value || Datadog.tracer).tap do |v|
15
- # Make sure to update tracers of all subscriptions
16
- Events.subscriptions.each do |subscription|
17
- subscription.tracer = v
18
- end
19
- end
20
- end
21
-
22
- class << self
23
- def patch
24
- return patched? if patched? || !compatible?
25
-
26
- # Subscribe to Racecar events
27
- Events.subscribe!
28
-
29
- # Set service info
30
- configuration[:tracer].set_service_info(
31
- configuration[:service_name],
32
- 'racecar',
33
- Ext::AppTypes::WORKER
34
- )
35
-
36
- @patched = true
37
- end
38
-
39
- def patched?
40
- return @patched if defined?(@patched)
41
- @patched = false
42
- end
43
-
44
- private
13
+ module_function
45
14
 
46
- def configuration
47
- Datadog.configuration[:racecar]
48
- end
15
+ def patched?
16
+ done?(:racecar)
17
+ end
49
18
 
50
- def compatible?
51
- defined?(::Racecar) && defined?(::ActiveSupport::Notifications)
19
+ def patch
20
+ do_once(:racecar) do
21
+ begin
22
+ # Subscribe to Racecar events
23
+ Events.subscribe!
24
+
25
+ # Set service info
26
+ configuration = Datadog.configuration[:racecar]
27
+ configuration[:tracer].set_service_info(
28
+ configuration[:service_name],
29
+ Ext::APP,
30
+ Datadog::Ext::AppTypes::WORKER
31
+ )
32
+ rescue StandardError => e
33
+ Datadog::Tracer.log.error("Unable to apply Racecar integration: #{e}")
34
+ end
52
35
  end
53
36
  end
54
37
  end
@@ -0,0 +1,39 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/rack/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Rack
7
+ module Configuration
8
+ # Custom settings for the Rack integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ DEFAULT_HEADERS = {
11
+ response: [
12
+ 'Content-Type',
13
+ 'X-Request-ID'
14
+ ]
15
+ }.freeze
16
+
17
+ option :application
18
+ option :distributed_tracing, default: false
19
+ option :headers, default: DEFAULT_HEADERS
20
+ option :middleware_names, default: false
21
+ option :quantize, default: {}
22
+ option :request_queuing, default: false
23
+
24
+ option :service_name, default: Ext::SERVICE_NAME, depends_on: [:tracer] do |value|
25
+ get_option(:tracer).set_service_info(value, Ext::APP, Datadog::Ext::AppTypes::WEB)
26
+ value
27
+ end
28
+
29
+ option :web_service_name, default: Ext::WEBSERVER_SERVICE_NAME, depends_on: [:tracer, :request_queuing] do |value|
30
+ if get_option(:request_queuing)
31
+ get_option(:tracer).set_service_info(value, Ext::WEBSERVER_APP, Datadog::Ext::AppTypes::WEB)
32
+ end
33
+ value
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Rack
4
+ # Rack integration constants
5
+ module Ext
6
+ APP = 'rack'.freeze
7
+ SERVICE_NAME = 'rack'.freeze
8
+ WEBSERVER_APP = 'webserver'.freeze
9
+ WEBSERVER_SERVICE_NAME = 'web-server'.freeze
10
+
11
+ RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
12
+
13
+ SPAN_HTTP_SERVER_QUEUE = 'http_server.queue'.freeze
14
+ SPAN_REQUEST = 'rack.request'.freeze
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/rack/configuration/settings'
3
+ require 'ddtrace/contrib/rack/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Rack
8
+ # Description of Rack integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :rack, auto_patch: false
13
+
14
+ def self.version
15
+ Gem.loaded_specs['rack'] && Gem.loaded_specs['rack'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Rack)
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