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,39 @@
1
+
2
+ module Datadog
3
+ module Contrib
4
+ module HTTP
5
+ # HTTP integration circuit breaker behavior
6
+ # For avoiding recursive traces.
7
+ module CircuitBreaker
8
+ def should_skip_tracing?(req, address, port, transport, pin)
9
+ # we don't want to trace our own call to the API (they use net/http)
10
+ # when we know the host & port (from the URI) we use it, else (most-likely
11
+ # called with a block) rely on the URL at the end.
12
+ if req.respond_to?(:uri) && req.uri
13
+ if req.uri.host.to_s == transport.hostname.to_s &&
14
+ req.uri.port.to_i == transport.port.to_i
15
+ return true
16
+ end
17
+ elsif address && port &&
18
+ address.to_s == transport.hostname.to_s &&
19
+ port.to_i == transport.port.to_i
20
+ return true
21
+ end
22
+ # we don't want a "shotgun" effect with two nested traces for one
23
+ # logical get, and request is likely to call itself recursively
24
+ active = pin.tracer.active_span
25
+ return true if active && (active.name == Ext::SPAN_REQUEST)
26
+ false
27
+ end
28
+
29
+ def should_skip_distributed_tracing?(pin)
30
+ if pin.config && pin.config.key?(:distributed_tracing)
31
+ return !pin.config[:distributed_tracing]
32
+ end
33
+
34
+ !Datadog.configuration[:http][:distributed_tracing]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/http/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module HTTP
7
+ module Configuration
8
+ # Custom settings for the HTTP integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :distributed_tracing, default: false
11
+ option :service_name, default: Ext::SERVICE_NAME
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Datadog
2
+ module Contrib
3
+ module HTTP
4
+ # HTTP integration constants
5
+ module Ext
6
+ APP = 'net/http'.freeze
7
+ SERVICE_NAME = 'net/http'.freeze
8
+
9
+ SPAN_REQUEST = 'http.request'.freeze
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/http/configuration/settings'
3
+ require 'ddtrace/contrib/http/patcher'
4
+ require 'ddtrace/contrib/http/circuit_breaker'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ # HTTP integration
9
+ module HTTP
10
+ extend CircuitBreaker
11
+
12
+ # Description of HTTP integration
13
+ class Integration
14
+ include Contrib::Integration
15
+
16
+ register_as :http, auto_patch: true
17
+
18
+ def self.version
19
+ Gem::Version.new(RUBY_VERSION)
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,63 +1,23 @@
1
- # requirements should be kept minimal as Patcher is a shared requirement.
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/contrib/http/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
5
6
  # Datadog Net/HTTP integration.
6
7
  module HTTP
7
- URL = 'http.url'.freeze
8
- METHOD = 'http.method'.freeze
9
- BODY = 'http.body'.freeze
10
-
11
- NAME = 'http.request'.freeze
12
- APP = 'net/http'.freeze
13
- SERVICE = 'net/http'.freeze
14
-
15
- module_function
16
-
17
- def should_skip_tracing?(req, address, port, transport, pin)
18
- # we don't want to trace our own call to the API (they use net/http)
19
- # when we know the host & port (from the URI) we use it, else (most-likely
20
- # called with a block) rely on the URL at the end.
21
- if req.respond_to?(:uri) && req.uri
22
- if req.uri.host.to_s == transport.hostname.to_s &&
23
- req.uri.port.to_i == transport.port.to_i
24
- return true
25
- end
26
- elsif address && port &&
27
- address.to_s == transport.hostname.to_s &&
28
- port.to_i == transport.port.to_i
29
- return true
30
- end
31
- # we don't want a "shotgun" effect with two nested traces for one
32
- # logical get, and request is likely to call itself recursively
33
- active = pin.tracer.active_span()
34
- return true if active && (active.name == NAME)
35
- false
36
- end
37
-
38
- def should_skip_distributed_tracing?(pin)
39
- if pin.config && pin.config.key?(:distributed_tracing)
40
- return !pin.config[:distributed_tracing]
41
- end
42
-
43
- !Datadog.configuration[:http][:distributed_tracing]
44
- end
45
-
46
8
  # Patcher enables patching of 'net/http' module.
47
9
  module Patcher
48
- include Base
49
- register_as :http, auto_patch: true
50
- option :distributed_tracing, default: false
51
- option :service_name, default: SERVICE
52
- option :tracer, default: Datadog.tracer
53
-
54
- @patched = false
10
+ include Contrib::Patcher
55
11
 
56
12
  module_function
57
13
 
14
+ def patched?
15
+ done?(:http)
16
+ end
17
+
58
18
  # patch applies our patch if needed
59
19
  def patch
60
- unless @patched
20
+ do_once(:http) do
61
21
  begin
62
22
  require 'uri'
63
23
  require 'ddtrace/pin'
@@ -67,18 +27,10 @@ module Datadog
67
27
  require 'ddtrace/ext/distributed'
68
28
 
69
29
  patch_http
70
-
71
- @patched = true
72
30
  rescue StandardError => e
73
31
  Datadog::Tracer.log.error("Unable to apply net/http integration: #{e}")
74
32
  end
75
33
  end
76
- @patched
77
- end
78
-
79
- # patched? tells whether patch has been successfully applied
80
- def patched?
81
- @patched
82
34
  end
83
35
 
84
36
  # rubocop:disable Metrics/MethodLength
@@ -94,7 +46,7 @@ module Datadog
94
46
  service = Datadog.configuration[:http][:service_name]
95
47
  tracer = Datadog.configuration[:http][:tracer]
96
48
 
97
- Datadog::Pin.new(service, app: APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
49
+ Datadog::Pin.new(service, app: Ext::APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
98
50
  end
99
51
  end
100
52
 
@@ -108,7 +60,7 @@ module Datadog
108
60
  return request_without_datadog(req, body, &block)
109
61
  end
110
62
 
111
- pin.tracer.trace(NAME) do |span|
63
+ pin.tracer.trace(Ext::SPAN_REQUEST) do |span|
112
64
  begin
113
65
  span.service = pin.service
114
66
  span.span_type = Datadog::Ext::HTTP::TYPE
@@ -0,0 +1,18 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/mongodb/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module MongoDB
7
+ module Configuration
8
+ # Custom settings for the MongoDB integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
11
+
12
+ option :quantize, default: DEFAULT_QUANTIZE
13
+ option :service_name, default: Ext::SERVICE_NAME
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Datadog
2
+ module Contrib
3
+ module MongoDB
4
+ # MongoDB integration constants
5
+ module Ext
6
+ APP = 'mongodb'.freeze
7
+ SERVICE_NAME = 'mongodb'.freeze
8
+
9
+ SPAN_COMMAND = 'mongo.cmd'.freeze
10
+ SPAN_TYPE_COMMAND = 'mongodb'.freeze
11
+
12
+ TAG_COLLECTION = 'mongodb.collection'.freeze
13
+ TAG_DB = 'mongodb.db'.freeze
14
+ TAG_OPERATION = 'mongodb.operation'.freeze
15
+ TAG_QUERY = 'mongodb.query'.freeze
16
+ TAG_ROWS = 'mongodb.rows'.freeze
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/mongodb/configuration/settings'
3
+ require 'ddtrace/contrib/mongodb/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module MongoDB
8
+ # Description of MongoDB integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :mongo, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['mongo'] && Gem.loaded_specs['mongo'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Mongo::Monitoring::Global)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && version >= Gem::Version.new('2.1.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,56 +1,40 @@
1
- # requirements should be kept minimal as Patcher is a shared requirement.
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/contrib/mongodb/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
5
- # MongoDB module includes classes and functions to instrument MongoDB clients
6
6
  module MongoDB
7
- APP = 'mongodb'.freeze
8
- SERVICE = 'mongodb'.freeze
9
-
10
- # Patcher adds subscribers to the MongoDB driver so that each command is traced.
7
+ # Patcher enables patching of 'mongo' module.
11
8
  module Patcher
12
- include Base
13
- register_as :mongo, auto_patch: true
14
- option :service_name, default: SERVICE
15
- option :quantize, default: { show: [:collection, :database, :operation] }
16
-
17
- @patched = false
9
+ include Contrib::Patcher
18
10
 
19
11
  module_function
20
12
 
21
13
  def patched?
22
- @patched
14
+ done?(:mongo)
23
15
  end
24
16
 
25
17
  def patch
26
- # versions prior to 2.1.0 don't support the Monitoring API
27
- if !@patched && (defined?(::Mongo::Monitoring::Global) && \
28
- Gem::Version.new(::Mongo::VERSION) >= Gem::Version.new('2.1.0'))
18
+ do_once(:mongo) do
29
19
  begin
30
20
  require 'ddtrace/pin'
31
21
  require 'ddtrace/ext/net'
32
- require 'ddtrace/ext/mongo'
33
22
  require 'ddtrace/ext/app_types'
23
+ require 'ddtrace/contrib/mongodb/ext'
34
24
  require 'ddtrace/contrib/mongodb/parsers'
35
25
  require 'ddtrace/contrib/mongodb/subscribers'
36
26
 
37
- patch_mongo_client()
38
- add_mongo_monitoring()
39
-
40
- @patched = true
27
+ patch_mongo_client
28
+ add_mongo_monitoring
41
29
  rescue StandardError => e
42
30
  Datadog::Tracer.log.error("Unable to apply MongoDB integration: #{e}")
43
31
  end
44
32
  end
45
- @patched
46
33
  end
47
34
 
48
35
  def add_mongo_monitoring
49
36
  # Subscribe to all COMMAND queries with our subscriber class
50
- ::Mongo::Monitoring::Global.subscribe(
51
- ::Mongo::Monitoring::COMMAND,
52
- Datadog::Contrib::MongoDB::MongoCommandSubscriber.new
53
- )
37
+ ::Mongo::Monitoring::Global.subscribe(::Mongo::Monitoring::COMMAND, MongoCommandSubscriber.new)
54
38
  end
55
39
 
56
40
  def patch_mongo_client
@@ -63,8 +47,14 @@ module Datadog
63
47
  def initialize(*args, &blk)
64
48
  # attach the Pin instance
65
49
  initialize_without_datadog(*args, &blk)
50
+ tracer = Datadog.configuration[:mongo][:tracer]
66
51
  service = Datadog.configuration[:mongo][:service_name]
67
- pin = Datadog::Pin.new(service, app: APP, app_type: Datadog::Ext::AppTypes::DB)
52
+ pin = Datadog::Pin.new(
53
+ service,
54
+ app: Datadog::Contrib::MongoDB::Ext::APP,
55
+ app_type: Datadog::Ext::AppTypes::DB,
56
+ tracer: tracer
57
+ )
68
58
  pin.onto(self)
69
59
  end
70
60
 
@@ -1,6 +1,8 @@
1
+ require 'ddtrace/contrib/mongodb/ext'
2
+ require 'ddtrace/contrib/mongodb/parsers'
3
+
1
4
  module Datadog
2
5
  module Contrib
3
- # MongoDB module includes classes and functions to instrument MongoDB clients
4
6
  module MongoDB
5
7
  # `MongoCommandSubscriber` listens to all events from the `Monitoring`
6
8
  # system available in the Mongo driver.
@@ -14,20 +16,19 @@ module Datadog
14
16
  # thread is involved in this execution so thread-local storage should be safe. Reference:
15
17
  # https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/monitoring.rb#L70
16
18
  # https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/monitoring/publishable.rb#L38-L56
17
- span = pin.tracer.trace('mongo.cmd', service: pin.service, span_type: Datadog::Ext::Mongo::TYPE)
19
+ span = pin.tracer.trace(Ext::SPAN_COMMAND, service: pin.service, span_type: Ext::SPAN_TYPE_COMMAND)
18
20
  Thread.current[:datadog_mongo_span] = span
19
21
 
20
22
  # build a quantized Query using the Parser module
21
- query = Datadog::Contrib::MongoDB
22
- .query_builder(event.command_name, event.database_name, event.command)
23
+ query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
23
24
  serialized_query = query.to_s
24
25
 
25
26
  # add operation tags; the full query is stored and used as a resource,
26
27
  # since it has been quantized and reduced
27
- span.set_tag(Datadog::Ext::Mongo::DB, query['database'])
28
- span.set_tag(Datadog::Ext::Mongo::COLLECTION, query['collection'])
29
- span.set_tag(Datadog::Ext::Mongo::OPERATION, query['operation'])
30
- span.set_tag(Datadog::Ext::Mongo::QUERY, serialized_query)
28
+ span.set_tag(Ext::TAG_DB, query['database'])
29
+ span.set_tag(Ext::TAG_COLLECTION, query['collection'])
30
+ span.set_tag(Ext::TAG_OPERATION, query['operation'])
31
+ span.set_tag(Ext::TAG_QUERY, serialized_query)
31
32
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, event.address.host)
32
33
  span.set_tag(Datadog::Ext::NET::TARGET_PORT, event.address.port)
33
34
 
@@ -47,7 +48,7 @@ module Datadog
47
48
  ensure
48
49
  # whatever happens, the Span must be removed from the local storage and
49
50
  # it must be finished to prevent any leak
50
- span.finish() unless span.nil?
51
+ span.finish unless span.nil?
51
52
  Thread.current[:datadog_mongo_span] = nil
52
53
  end
53
54
 
@@ -57,13 +58,13 @@ module Datadog
57
58
 
58
59
  # add fields that are available only after executing the query
59
60
  rows = event.reply.fetch('n', nil)
60
- span.set_tag(Datadog::Ext::Mongo::ROWS, rows) unless rows.nil?
61
+ span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
61
62
  rescue StandardError => e
62
63
  Datadog::Tracer.log.debug("error when handling MongoDB 'succeeded' event: #{e}")
63
64
  ensure
64
65
  # whatever happens, the Span must be removed from the local storage and
65
66
  # it must be finished to prevent any leak
66
- span.finish() unless span.nil?
67
+ span.finish unless span.nil?
67
68
  Thread.current[:datadog_mongo_span] = nil
68
69
  end
69
70
  end
@@ -1,5 +1,7 @@
1
- require 'ddtrace/ext/sql'
2
1
  require 'ddtrace/ext/app_types'
2
+ require 'ddtrace/ext/net'
3
+ require 'ddtrace/ext/sql'
4
+ require 'ddtrace/contrib/mysql2/ext'
3
5
 
4
6
  module Datadog
5
7
  module Contrib
@@ -34,13 +36,13 @@ module Datadog
34
36
  end
35
37
 
36
38
  def query(sql, options = {})
37
- datadog_pin.tracer.trace('mysql2.query') do |span|
39
+ datadog_pin.tracer.trace(Ext::SPAN_QUERY) do |span|
38
40
  span.resource = sql
39
41
  span.service = datadog_pin.service
40
42
  span.span_type = Datadog::Ext::SQL::TYPE
41
- span.set_tag('mysql2.db.name', query_options[:database])
42
- span.set_tag('out.host', query_options[:host])
43
- span.set_tag('out.port', query_options[:port])
43
+ span.set_tag(Ext::TAG_DB_NAME, query_options[:database])
44
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, query_options[:host])
45
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, query_options[:port])
44
46
  super(sql, options)
45
47
  end
46
48
  end
@@ -48,7 +50,7 @@ module Datadog
48
50
  def datadog_pin
49
51
  @datadog_pin ||= Datadog::Pin.new(
50
52
  Datadog.configuration[:mysql2][:service_name],
51
- app: 'mysql2',
53
+ app: Ext::APP,
52
54
  app_type: Datadog::Ext::AppTypes::DB,
53
55
  tracer: Datadog.configuration[:mysql2][:tracer]
54
56
  )