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,18 @@
1
+ module Datadog
2
+ module Contrib
3
+ module DelayedJob
4
+ # DelayedJob integration constants
5
+ module Ext
6
+ APP = 'delayed_job'.freeze
7
+ SERVICE_NAME = 'delayed_job'.freeze
8
+
9
+ SPAN_JOB = 'delayed_job'.freeze
10
+
11
+ TAG_ATTEMPTS = 'delayed_job.attempts'.freeze
12
+ TAG_ID = 'delayed_job.id'.freeze
13
+ TAG_PRIORITY = 'delayed_job.priority'.freeze
14
+ TAG_QUEUE = 'delayed_job.queue'.freeze
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/delayed_job/configuration/settings'
3
+ require 'ddtrace/contrib/delayed_job/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module DelayedJob
8
+ # Description of DelayedJob integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :delayed_job
13
+
14
+ def self.version
15
+ Gem.loaded_specs['delayed_job'] && Gem.loaded_specs['delayed_job'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Delayed)
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,39 +1,32 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+
1
4
  module Datadog
2
5
  module Contrib
3
6
  module DelayedJob
4
- # DelayedJob integration
7
+ # Patcher enables patching of 'delayed_job' module.
5
8
  module Patcher
6
- include Base
7
- register_as :delayed_job
8
-
9
- option :service_name, default: 'delayed_job'.freeze
10
- option :tracer, default: Datadog.tracer
11
-
12
- @patched = false
9
+ include Contrib::Patcher
13
10
 
14
- class << self
15
- def patch
16
- return @patched if patched? || !defined?(::Delayed)
11
+ module_function
17
12
 
18
- require 'ddtrace/ext/app_types'
19
- require_relative 'plugin'
20
-
21
- add_instrumentation(::Delayed::Worker)
22
- @patched = true
23
- rescue => e
24
- Tracer.log.error("Unable to apply DelayedJob integration: #{e}")
25
- @patched
26
- end
13
+ def patched?
14
+ done?(:delayed_job)
15
+ end
27
16
 
28
- def patched?
29
- @patched
17
+ def patch
18
+ do_once(:delayed_job) do
19
+ begin
20
+ require 'ddtrace/contrib/delayed_job/plugin'
21
+ add_instrumentation(::Delayed::Worker)
22
+ rescue StandardError => e
23
+ Datadog::Tracer.log.error("Unable to apply DelayedJob integration: #{e}")
24
+ end
30
25
  end
26
+ end
31
27
 
32
- private
33
-
34
- def add_instrumentation(klass)
35
- klass.plugins << Plugin
36
- end
28
+ def add_instrumentation(klass)
29
+ klass.plugins << Plugin
37
30
  end
38
31
  end
39
32
  end
@@ -1,4 +1,5 @@
1
1
  require 'delayed/plugin'
2
+ require 'ddtrace/contrib/delayed_job/ext'
2
3
 
3
4
  module Datadog
4
5
  module Contrib
@@ -8,12 +9,12 @@ module Datadog
8
9
  def self.instrument(job, &block)
9
10
  return block.call(job) unless tracer && tracer.enabled
10
11
 
11
- tracer.trace('delayed_job'.freeze, service: configuration[:service_name], resource: job.name) do |span|
12
- span.set_tag('delayed_job.id'.freeze, job.id)
13
- span.set_tag('delayed_job.queue'.freeze, job.queue) if job.queue
14
- span.set_tag('delayed_job.priority'.freeze, job.priority)
15
- span.set_tag('delayed_job.attempts'.freeze, job.attempts)
16
- span.span_type = Ext::AppTypes::WORKER
12
+ tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job.name) do |span|
13
+ span.set_tag(Ext::TAG_ID, job.id)
14
+ span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
15
+ span.set_tag(Ext::TAG_PRIORITY, job.priority)
16
+ span.set_tag(Ext::TAG_ATTEMPTS, job.attempts)
17
+ span.span_type = Datadog::Ext::AppTypes::WORKER
17
18
 
18
19
  yield job
19
20
  end
@@ -0,0 +1,16 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/elasticsearch/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Elasticsearch
7
+ module Configuration
8
+ # Custom settings for the Elasticsearch integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :quantize, default: {}
11
+ option :service_name, default: Ext::SERVICE_NAME
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Elasticsearch
4
+ # Elasticsearch integration constants
5
+ module Ext
6
+ APP = 'elasticsearch'.freeze
7
+ SERVICE_NAME = 'elasticsearch'.freeze
8
+
9
+ SPAN_QUERY = 'elasticsearch.query'.freeze
10
+
11
+ TAG_BODY = 'elasticsearch.body'.freeze
12
+ TAG_METHOD = 'elasticsearch.method'.freeze
13
+ TAG_PARAMS = 'elasticsearch.params'.freeze
14
+ TAG_URL = 'elasticsearch.url'.freeze
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/elasticsearch/configuration/settings'
3
+ require 'ddtrace/contrib/elasticsearch/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Elasticsearch
8
+ # Description of Elasticsearch integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :elasticsearch, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['elasticsearch-transport'] \
16
+ && Gem.loaded_specs['elasticsearch-transport'].version
17
+ end
18
+
19
+ def self.present?
20
+ super && defined?(::Elasticsearch::Transport)
21
+ end
22
+
23
+ def self.compatible?
24
+ super && version >= Gem::Version.new('1.0.0')
25
+ end
26
+
27
+ def default_configuration
28
+ Configuration::Settings.new
29
+ end
30
+
31
+ def patcher
32
+ Patcher
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,45 +1,34 @@
1
- # requirements should be kept minimal as Patcher is a shared requirement.
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/ext/net'
4
+ require 'ddtrace/contrib/elasticsearch/ext'
2
5
 
3
6
  module Datadog
4
7
  module Contrib
5
8
  module Elasticsearch
6
- URL = 'elasticsearch.url'.freeze
7
- METHOD = 'elasticsearch.method'.freeze
8
- PARAMS = 'elasticsearch.params'.freeze
9
- BODY = 'elasticsearch.body'.freeze
10
-
11
- SERVICE = 'elasticsearch'.freeze
12
-
13
- # Patcher enables patching of 'elasticsearch/transport' module.
9
+ # Patcher enables patching of 'elasticsearch' module.
14
10
  module Patcher
15
- include Base
16
- register_as :elasticsearch, auto_patch: true
17
- option :service_name, default: SERVICE
18
- option :quantize, default: {}
19
-
20
- @patched = false
11
+ include Contrib::Patcher
21
12
 
22
13
  module_function
23
14
 
24
- # patch applies our patch if needed
15
+ def patched?
16
+ done?(:elasticsearch)
17
+ end
18
+
25
19
  def patch
26
- if !@patched && (defined?(::Elasticsearch::Transport::VERSION) && \
27
- Gem::Version.new(::Elasticsearch::Transport::VERSION) >= Gem::Version.new('1.0.0'))
20
+ do_once(:elasticsearch) do
28
21
  begin
29
22
  require 'uri'
30
23
  require 'json'
31
24
  require 'ddtrace/pin'
32
- require 'ddtrace/ext/app_types'
33
25
  require 'ddtrace/contrib/elasticsearch/quantize'
34
26
 
35
- patch_elasticsearch_transport_client()
36
-
37
- @patched = true
27
+ patch_elasticsearch_transport_client
38
28
  rescue StandardError => e
39
- Datadog::Tracer.log.error("Unable to apply Elastic Search integration: #{e}")
29
+ Datadog::Tracer.log.error("Unable to apply Elasticsearch integration: #{e}")
40
30
  end
41
31
  end
42
- @patched
43
32
  end
44
33
 
45
34
  # rubocop:disable Metrics/MethodLength
@@ -53,8 +42,15 @@ module Datadog
53
42
  end
54
43
 
55
44
  def initialize(*args, &block)
45
+ tracer = Datadog.configuration[:elasticsearch][:tracer]
56
46
  service = Datadog.configuration[:elasticsearch][:service_name]
57
- pin = Datadog::Pin.new(service, app: 'elasticsearch', app_type: Datadog::Ext::AppTypes::DB)
47
+
48
+ pin = Datadog::Pin.new(
49
+ service,
50
+ app: Datadog::Contrib::Elasticsearch::Ext::APP,
51
+ app_type: Datadog::Ext::AppTypes::DB,
52
+ tracer: tracer
53
+ )
58
54
  pin.onto(self)
59
55
  initialize_without_datadog(*args, &block)
60
56
  end
@@ -74,29 +70,29 @@ module Datadog
74
70
 
75
71
  url = full_url.path
76
72
  response = nil
77
- pin.tracer.trace('elasticsearch.query') do |span|
73
+ pin.tracer.trace(Datadog::Contrib::Elasticsearch::Ext::SPAN_QUERY) do |span|
78
74
  begin
79
75
  connection = transport.connections.first
80
76
  host = connection.host[:host] if connection
81
77
  port = connection.host[:port] if connection
82
78
 
83
79
  span.service = pin.service
84
- span.span_type = Ext::AppTypes::DB
80
+ span.span_type = Datadog::Ext::AppTypes::DB
85
81
 
86
82
  # load JSON for the following fields unless they're already strings
87
83
  params = JSON.generate(params) if params && !params.is_a?(String)
88
84
  body = JSON.generate(body) if body && !body.is_a?(String)
89
85
 
90
- span.set_tag(METHOD, method)
91
- span.set_tag(URL, url)
92
- span.set_tag(PARAMS, params) if params
86
+ span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_METHOD, method)
87
+ span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_URL, url)
88
+ span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_PARAMS, params) if params
93
89
  if body
94
90
  quantize_options = Datadog.configuration[:elasticsearch][:quantize]
95
91
  quantized_body = Datadog::Contrib::Elasticsearch::Quantize.format_body(body, quantize_options)
96
- span.set_tag(BODY, quantized_body)
92
+ span.set_tag(Datadog::Contrib::Elasticsearch::Ext::TAG_BODY, quantized_body)
97
93
  end
98
- span.set_tag('out.host', host) if host
99
- span.set_tag('out.port', port) if port
94
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, host) if host
95
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, port) if port
100
96
 
101
97
  quantized_url = Datadog::Contrib::Elasticsearch::Quantize.format_url(url)
102
98
  span.resource = "#{method} #{quantized_url}"
@@ -105,18 +101,13 @@ module Datadog
105
101
  ensure
106
102
  # the call is still executed
107
103
  response = perform_request_without_datadog(*args)
108
- span.set_tag('http.status_code', response.status)
104
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.status)
109
105
  end
110
106
  end
111
107
  response
112
108
  end
113
109
  end
114
110
  end
115
-
116
- # patched? tells wether patch has been successfully applied
117
- def patched?
118
- @patched
119
- end
120
111
  end
121
112
  end
122
113
  end
@@ -0,0 +1,18 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/excon/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Excon
7
+ module Configuration
8
+ # Custom settings for the Excon integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :distributed_tracing, default: false
11
+ option :error_handler, default: nil
12
+ option :service_name, default: Ext::SERVICE_NAME
13
+ option :split_by_domain, default: false
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Excon
4
+ # Excon integration constants
5
+ module Ext
6
+ APP = 'excon'.freeze
7
+ SERVICE_NAME = 'excon'.freeze
8
+
9
+ SPAN_REQUEST = 'excon.request'.freeze
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/excon/configuration/settings'
3
+ require 'ddtrace/contrib/excon/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Excon
8
+ # Description of Excon integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :excon
13
+
14
+ def self.version
15
+ Gem.loaded_specs['excon'] && Gem.loaded_specs['excon'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Excon)
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
@@ -3,26 +3,26 @@ require 'ddtrace/ext/http'
3
3
  require 'ddtrace/ext/net'
4
4
  require 'ddtrace/ext/distributed'
5
5
  require 'ddtrace/propagation/http_propagator'
6
+ require 'ddtrace/contrib/excon/ext'
6
7
 
7
8
  module Datadog
8
9
  module Contrib
9
10
  module Excon
10
11
  # Middleware implements an excon-middleware for ddtrace instrumentation
11
12
  class Middleware < ::Excon::Middleware::Base
12
- SPAN_NAME = 'excon.request'.freeze
13
13
  DEFAULT_ERROR_HANDLER = lambda do |response|
14
- Ext::HTTP::ERROR_RANGE.cover?(response[:status])
14
+ Datadog::Ext::HTTP::ERROR_RANGE.cover?(response[:status])
15
15
  end
16
16
 
17
17
  def initialize(stack, options = {})
18
18
  super(stack)
19
- @options = Datadog.configuration[:excon].merge(options)
19
+ @options = Datadog.configuration[:excon].to_h.merge(options)
20
20
  end
21
21
 
22
22
  def request_call(datum)
23
23
  begin
24
24
  unless datum.key?(:datadog_span)
25
- tracer.trace(SPAN_NAME).tap do |span|
25
+ tracer.trace(Ext::SPAN_REQUEST).tap do |span|
26
26
  datum[:datadog_span] = span
27
27
  annotate!(span, datum)
28
28
  propagate!(span, datum) if distributed_tracing?
@@ -97,11 +97,11 @@ module Datadog
97
97
  def annotate!(span, datum)
98
98
  span.resource = datum[:method].to_s.upcase
99
99
  span.service = service_name(datum)
100
- span.span_type = Ext::HTTP::TYPE
101
- span.set_tag(Ext::HTTP::URL, datum[:path])
102
- span.set_tag(Ext::HTTP::METHOD, datum[:method].to_s.upcase)
103
- span.set_tag(Ext::NET::TARGET_HOST, datum[:host])
104
- span.set_tag(Ext::NET::TARGET_PORT, datum[:port].to_s)
100
+ span.span_type = Datadog::Ext::HTTP::TYPE
101
+ span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
102
+ span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
103
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, datum[:host])
104
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, datum[:port].to_s)
105
105
  end
106
106
 
107
107
  def handle_response(datum)
@@ -114,7 +114,7 @@ module Datadog
114
114
  if error_handler.call(response)
115
115
  span.set_error(["Error #{response[:status]}", response[:body]])
116
116
  end
117
- span.set_tag(Ext::HTTP::STATUS_CODE, response[:status])
117
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response[:status])
118
118
  end
119
119
  span.set_error(datum[:error]) if datum.key?(:error)
120
120
  span.finish