ddtrace 0.38.0 → 0.43.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 (194) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +56 -0
  3. data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
  4. data/.github/workflows/create-next-milestone.yml +20 -0
  5. data/.gitlab-ci.yml +1 -0
  6. data/.simplecov +38 -0
  7. data/Appraisals +293 -105
  8. data/CHANGELOG.md +192 -1
  9. data/CONTRIBUTING.md +2 -2
  10. data/Rakefile +554 -480
  11. data/ddtrace.gemspec +3 -0
  12. data/docs/DevelopmentGuide.md +28 -2
  13. data/docs/GettingStarted.md +207 -82
  14. data/lib/ddtrace.rb +4 -0
  15. data/lib/ddtrace/buffer.rb +259 -52
  16. data/lib/ddtrace/configuration.rb +55 -5
  17. data/lib/ddtrace/configuration/components.rb +4 -7
  18. data/lib/ddtrace/configuration/options.rb +3 -1
  19. data/lib/ddtrace/configuration/settings.rb +18 -6
  20. data/lib/ddtrace/context.rb +18 -0
  21. data/lib/ddtrace/context_provider.rb +17 -5
  22. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
  23. data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
  24. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
  25. data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
  26. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
  27. data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
  28. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
  29. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
  30. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
  31. data/lib/ddtrace/contrib/active_record/events/sql.rb +4 -0
  32. data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
  33. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
  34. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
  35. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
  36. data/lib/ddtrace/contrib/active_support/ext.rb +8 -2
  37. data/lib/ddtrace/contrib/active_support/notifications/event.rb +10 -0
  38. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +2 -2
  39. data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
  40. data/lib/ddtrace/contrib/aws/ext.rb +5 -2
  41. data/lib/ddtrace/contrib/aws/instrumentation.rb +6 -1
  42. data/lib/ddtrace/contrib/aws/patcher.rb +0 -1
  43. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
  44. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  45. data/lib/ddtrace/contrib/configurable.rb +2 -0
  46. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +4 -5
  47. data/lib/ddtrace/contrib/configuration/settings.rb +1 -0
  48. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +38 -0
  49. data/lib/ddtrace/contrib/cucumber/ext.rb +19 -0
  50. data/lib/ddtrace/contrib/cucumber/formatter.rb +104 -0
  51. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
  52. data/lib/ddtrace/contrib/cucumber/integration.rb +40 -0
  53. data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
  54. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
  55. data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
  56. data/lib/ddtrace/contrib/dalli/instrumentation.rb +4 -0
  57. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +9 -2
  58. data/lib/ddtrace/contrib/delayed_job/ext.rb +7 -2
  59. data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
  60. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
  61. data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
  62. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +4 -0
  63. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
  64. data/lib/ddtrace/contrib/ethon/easy_patch.rb +4 -2
  65. data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
  66. data/lib/ddtrace/contrib/ethon/multi_patch.rb +4 -0
  67. data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
  68. data/lib/ddtrace/contrib/excon/ext.rb +5 -2
  69. data/lib/ddtrace/contrib/excon/middleware.rb +11 -1
  70. data/lib/ddtrace/contrib/extensions.rb +1 -1
  71. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
  72. data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
  73. data/lib/ddtrace/contrib/faraday/middleware.rb +4 -0
  74. data/lib/ddtrace/contrib/faraday/patcher.rb +13 -4
  75. data/lib/ddtrace/contrib/grape/configuration/settings.rb +14 -3
  76. data/lib/ddtrace/contrib/grape/endpoint.rb +24 -7
  77. data/lib/ddtrace/contrib/grape/ext.rb +5 -2
  78. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
  79. data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
  80. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
  81. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -1
  82. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
  83. data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
  84. data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
  85. data/lib/ddtrace/contrib/http/ext.rb +5 -2
  86. data/lib/ddtrace/contrib/http/instrumentation.rb +6 -2
  87. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +7 -2
  88. data/lib/ddtrace/contrib/httprb/ext.rb +5 -2
  89. data/lib/ddtrace/contrib/httprb/instrumentation.rb +8 -8
  90. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +7 -2
  91. data/lib/ddtrace/contrib/kafka/event.rb +1 -1
  92. data/lib/ddtrace/contrib/kafka/ext.rb +5 -2
  93. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
  94. data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
  95. data/lib/ddtrace/contrib/mongodb/subscribers.rb +4 -0
  96. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
  97. data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
  98. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +4 -0
  99. data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
  100. data/lib/ddtrace/contrib/presto/ext.rb +5 -2
  101. data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -0
  102. data/lib/ddtrace/contrib/que/configuration/settings.rb +43 -0
  103. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  104. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  105. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  106. data/lib/ddtrace/contrib/que/tracer.rb +57 -0
  107. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
  108. data/lib/ddtrace/contrib/racecar/event.rb +4 -0
  109. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  110. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  111. data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
  112. data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
  113. data/lib/ddtrace/contrib/rack/ext.rb +5 -2
  114. data/lib/ddtrace/contrib/rack/middlewares.rb +2 -0
  115. data/lib/ddtrace/contrib/rails/configuration/settings.rb +12 -2
  116. data/lib/ddtrace/contrib/rails/ext.rb +6 -2
  117. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  118. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  119. data/lib/ddtrace/contrib/rails/patcher.rb +29 -0
  120. data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
  121. data/lib/ddtrace/contrib/rake/ext.rb +5 -2
  122. data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
  123. data/lib/ddtrace/contrib/redis/ext.rb +5 -2
  124. data/lib/ddtrace/contrib/redis/tags.rb +4 -0
  125. data/lib/ddtrace/contrib/resque/configuration/settings.rb +8 -2
  126. data/lib/ddtrace/contrib/resque/ext.rb +5 -2
  127. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  128. data/lib/ddtrace/contrib/resque/resque_job.rb +1 -1
  129. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
  130. data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
  131. data/lib/ddtrace/contrib/rest_client/request_patch.rb +4 -0
  132. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +38 -0
  133. data/lib/ddtrace/contrib/rspec/example.rb +61 -0
  134. data/lib/ddtrace/contrib/rspec/example_group.rb +61 -0
  135. data/lib/ddtrace/contrib/rspec/ext.rb +19 -0
  136. data/lib/ddtrace/contrib/rspec/integration.rb +41 -0
  137. data/lib/ddtrace/contrib/rspec/patcher.rb +25 -0
  138. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
  139. data/lib/ddtrace/contrib/sequel/database.rb +3 -1
  140. data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
  141. data/lib/ddtrace/contrib/sequel/ext.rb +6 -2
  142. data/lib/ddtrace/contrib/sequel/utils.rb +35 -6
  143. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +8 -2
  144. data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
  145. data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -1
  146. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +8 -2
  147. data/lib/ddtrace/contrib/sidekiq/ext.rb +5 -2
  148. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -1
  149. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
  150. data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
  151. data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
  152. data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
  153. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
  154. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +33 -0
  155. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  156. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  157. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  158. data/lib/ddtrace/contrib/sneakers/tracer.rb +55 -0
  159. data/lib/ddtrace/contrib/status_code_matcher.rb +67 -0
  160. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
  161. data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
  162. data/lib/ddtrace/diagnostics/environment_logger.rb +1 -1
  163. data/lib/ddtrace/environment.rb +14 -4
  164. data/lib/ddtrace/ext/app_types.rb +1 -0
  165. data/lib/ddtrace/ext/ci.rb +265 -0
  166. data/lib/ddtrace/ext/diagnostics.rb +2 -1
  167. data/lib/ddtrace/ext/distributed.rb +8 -2
  168. data/lib/ddtrace/ext/git.rb +12 -0
  169. data/lib/ddtrace/ext/integration.rb +8 -0
  170. data/lib/ddtrace/ext/runtime.rb +2 -0
  171. data/lib/ddtrace/ext/test.rb +24 -0
  172. data/lib/ddtrace/ext/transport.rb +1 -0
  173. data/lib/ddtrace/logger.rb +1 -1
  174. data/lib/ddtrace/opentracer/distributed_headers.rb +1 -1
  175. data/lib/ddtrace/propagation/grpc_propagator.rb +18 -6
  176. data/lib/ddtrace/runtime/identity.rb +4 -5
  177. data/lib/ddtrace/runtime/metrics.rb +24 -6
  178. data/lib/ddtrace/sampler.rb +2 -2
  179. data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
  180. data/lib/ddtrace/span.rb +152 -27
  181. data/lib/ddtrace/tracer.rb +25 -13
  182. data/lib/ddtrace/transport/http.rb +15 -0
  183. data/lib/ddtrace/transport/http/adapters/net.rb +8 -2
  184. data/lib/ddtrace/transport/http/adapters/test.rb +2 -0
  185. data/lib/ddtrace/transport/http/statistics.rb +14 -1
  186. data/lib/ddtrace/transport/traces.rb +7 -2
  187. data/lib/ddtrace/utils.rb +16 -13
  188. data/lib/ddtrace/utils/forking.rb +52 -0
  189. data/lib/ddtrace/version.rb +1 -1
  190. data/lib/ddtrace/workers/async.rb +2 -2
  191. data/lib/ddtrace/workers/loop.rb +1 -1
  192. data/lib/ddtrace/workers/polling.rb +1 -1
  193. data/lib/ddtrace/writer.rb +19 -1
  194. metadata +53 -6
@@ -1,5 +1,6 @@
1
1
  require 'faraday'
2
2
  require 'ddtrace/ext/http'
3
+ require 'ddtrace/ext/integration'
3
4
  require 'ddtrace/ext/net'
4
5
  require 'ddtrace/propagation/http_propagator'
5
6
  require 'ddtrace/contrib/analytics'
@@ -41,6 +42,9 @@ module Datadog
41
42
  span.service = options[:split_by_domain] ? env[:url].host : options[:service_name]
42
43
  span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
43
44
 
45
+ # Tag as an external peer service
46
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
47
+
44
48
  # Set analytics sample rate
45
49
  if Contrib::Analytics.enabled?(options[:analytics_enabled])
46
50
  Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate])
@@ -30,7 +30,7 @@ module Datadog
30
30
  .new(
31
31
  get_option(:service_name),
32
32
  app: Ext::APP,
33
- app_type: Datadog::Ext::AppTypes::WEB,
33
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
34
34
  tracer: -> { get_option(:tracer) }
35
35
  ).onto(::Faraday)
36
36
  end
@@ -41,13 +41,22 @@ module Datadog
41
41
 
42
42
  def add_default_middleware!
43
43
  if target_version >= Gem::Version.new('1.0.0')
44
+ # Patch the default connection (e.g. +Faraday.get+)
45
+ ::Faraday.default_connection.use(:ddtrace)
46
+
47
+ # Patch new connection instances (e.g. +Faraday.new+)
44
48
  ::Faraday::Connection.send(:prepend, Connection)
45
49
  else
50
+ # Patch the default connection (e.g. +Faraday.get+)
51
+ #
52
+ # We insert our middleware before the 'adapter', which is
53
+ # always the last handler.
54
+ idx = ::Faraday.default_connection.builder.handlers.size - 1
55
+ ::Faraday.default_connection.builder.insert(idx, Middleware)
56
+
57
+ # Patch new connection instances (e.g. +Faraday.new+)
46
58
  ::Faraday::RackBuilder.send(:prepend, RackBuilder)
47
59
  end
48
-
49
- # Instrument the Faraday default connection (e.g. +Faraday.get+)
50
- ::Faraday.default_connection.use(:ddtrace)
51
60
  end
52
61
 
53
62
  def get_option(option)
@@ -1,6 +1,7 @@
1
1
  require 'ddtrace/contrib/configuration/settings'
2
2
  require 'ddtrace/ext/http'
3
3
  require 'ddtrace/contrib/grape/ext'
4
+ require 'ddtrace/contrib/status_code_matcher'
4
5
 
5
6
  module Datadog
6
7
  module Contrib
@@ -8,18 +9,28 @@ module Datadog
8
9
  module Configuration
9
10
  # Custom settings for the Grape integration
10
11
  class Settings < Contrib::Configuration::Settings
12
+ option :enabled do |o|
13
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
14
+ o.lazy
15
+ end
16
+
11
17
  option :analytics_enabled do |o|
12
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
18
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
13
19
  o.lazy
14
20
  end
15
21
 
16
22
  option :analytics_sample_rate do |o|
17
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
23
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
18
24
  o.lazy
19
25
  end
20
26
 
21
- option :enabled, default: true
22
27
  option :service_name, default: Ext::SERVICE_NAME
28
+
29
+ option :error_statuses, default: nil do |o|
30
+ o.setter do |new_value, _old_value|
31
+ Datadog::Contrib::StatusCodeMatcher.new(new_value) unless new_value.nil?
32
+ end
33
+ end
23
34
  end
24
35
  end
25
36
  end
@@ -89,13 +89,16 @@ module Datadog
89
89
  Contrib::Analytics.set_measured(span)
90
90
 
91
91
  # catch thrown exceptions
92
- span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
92
+
93
+ if exception_is_error?(payload[:exception_object])
94
+ span.set_error(payload[:exception_object])
95
+ end
93
96
 
94
97
  # override the current span with this notification values
95
98
  span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
96
99
  span.set_tag(Ext::TAG_ROUTE_PATH, path)
97
100
  ensure
98
- span.start_time = start
101
+ span.start(start)
99
102
  span.finish(finish)
100
103
  end
101
104
  rescue StandardError => e
@@ -132,9 +135,11 @@ module Datadog
132
135
  # Measure service stats
133
136
  Contrib::Analytics.set_measured(span)
134
137
 
135
- span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
138
+ if exception_is_error?(payload[:exception_object])
139
+ span.set_error(payload[:exception_object])
140
+ end
136
141
  ensure
137
- span.start_time = start
142
+ span.start(start)
138
143
  span.finish(finish)
139
144
  end
140
145
  rescue StandardError => e
@@ -153,7 +158,8 @@ module Datadog
153
158
  span = tracer.trace(
154
159
  Ext::SPAN_ENDPOINT_RUN_FILTERS,
155
160
  service: service_name,
156
- span_type: Datadog::Ext::HTTP::TYPE_INBOUND
161
+ span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
162
+ start_time: start
157
163
  )
158
164
 
159
165
  begin
@@ -166,10 +172,13 @@ module Datadog
166
172
  Contrib::Analytics.set_measured(span)
167
173
 
168
174
  # catch thrown exceptions
169
- span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
175
+ if exception_is_error?(payload[:exception_object])
176
+ span.set_error(payload[:exception_object])
177
+ end
178
+
170
179
  span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
171
180
  ensure
172
- span.start_time = start
181
+ span.start(start)
173
182
  span.finish(finish)
174
183
  end
175
184
  rescue StandardError => e
@@ -194,6 +203,14 @@ module Datadog
194
203
  datadog_configuration[:analytics_sample_rate]
195
204
  end
196
205
 
206
+ def exception_is_error?(exception)
207
+ matcher = datadog_configuration[:error_statuses]
208
+ return false unless exception
209
+ return true unless matcher
210
+ return true unless exception.respond_to?('status')
211
+ matcher.include?(exception.status)
212
+ end
213
+
197
214
  def enabled?
198
215
  datadog_configuration[:enabled] == true
199
216
  end
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Grape integration constants
5
5
  module Ext
6
6
  APP = 'grape'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_GRAPE_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRAPE_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_GRAPE_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRAPE_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_GRAPE_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRAPE_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_GRAPE_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'grape'.freeze
10
13
  SPAN_ENDPOINT_RENDER = 'grape.endpoint_render'.freeze
11
14
  SPAN_ENDPOINT_RUN = 'grape.endpoint_run'.freeze
@@ -8,13 +8,18 @@ module Datadog
8
8
  module Configuration
9
9
  # Custom settings for the GraphQL integration
10
10
  class Settings < Contrib::Configuration::Settings
11
+ option :enabled do |o|
12
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
13
+ o.lazy
14
+ end
15
+
11
16
  option :analytics_enabled do |o|
12
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
17
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
13
18
  o.lazy
14
19
  end
15
20
 
16
21
  option :analytics_sample_rate do |o|
17
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
22
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
18
23
  o.lazy
19
24
  end
20
25
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # GraphQL integration constants
5
5
  module Ext
6
6
  APP = 'ruby-graphql'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_GRAPHQL_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRAPHQL_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_GRAPHQL_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRAPHQL_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_GRAPHQL_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRAPHQL_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_GRAPHQL_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'ruby-graphql'.freeze
10
13
  end
11
14
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the gRPC integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/ext/http'
2
+ require 'ddtrace/ext/integration'
2
3
  require 'ddtrace/contrib/analytics'
3
4
  require 'ddtrace/contrib/grpc/ext'
4
5
 
@@ -7,7 +8,7 @@ module Datadog
7
8
  module GRPC
8
9
  module DatadogInterceptor
9
10
  # The DatadogInterceptor::Client implements the tracing strategy
10
- # for gRPC client-side endpoitns. This middleware compoent will
11
+ # for gRPC client-side endpoints. This middleware component will
11
12
  # inject trace context information into gRPC metadata prior to
12
13
  # sending the request to the server.
13
14
  class Client < Base
@@ -32,6 +33,9 @@ module Datadog
32
33
  def annotate!(span, metadata)
33
34
  span.set_tags(metadata)
34
35
 
36
+ # Tag as an external peer service
37
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
38
+
35
39
  # Set analytics sample rate
36
40
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
37
41
 
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/ext/http'
2
+ require 'ddtrace/ext/integration'
2
3
  require 'ddtrace/contrib/analytics'
3
4
  require 'ddtrace/contrib/grpc/ext'
4
5
 
@@ -46,6 +47,9 @@ module Datadog
46
47
  span.set_tag(header, value)
47
48
  end
48
49
 
50
+ # Tag as an external peer service
51
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
52
+
49
53
  # Set analytics sample rate
50
54
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
51
55
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # gRPC integration constants
5
5
  module Ext
6
6
  APP = 'grpc'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_GRPC_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRPC_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'grpc'.freeze
10
13
  SPAN_CLIENT = 'grpc.client'.freeze
11
14
  SPAN_SERVICE = 'grpc.service'.freeze
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the HTTP integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # HTTP integration constants
5
5
  module Ext
6
6
  APP = 'net/http'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_HTTP_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTP_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'net/http'.freeze
10
13
  SPAN_REQUEST = 'http.request'.freeze
11
14
  end
@@ -2,6 +2,7 @@ require 'uri'
2
2
  require 'ddtrace/pin'
3
3
  require 'ddtrace/ext/app_types'
4
4
  require 'ddtrace/ext/http'
5
+ require 'ddtrace/ext/integration'
5
6
  require 'ddtrace/ext/net'
6
7
  require 'ddtrace/ext/distributed'
7
8
  require 'ddtrace/contrib/analytics'
@@ -83,6 +84,9 @@ module Datadog
83
84
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, host)
84
85
  span.set_tag(Datadog::Ext::NET::TARGET_PORT, port.to_s)
85
86
 
87
+ # Tag as an external peer service
88
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
89
+
86
90
  # Set analytics sample rate
87
91
  set_analytics_sample_rate(span, request_options)
88
92
  end
@@ -114,7 +118,7 @@ module Datadog
114
118
  @datadog_pin ||= Datadog::Pin.new(
115
119
  service,
116
120
  app: Ext::APP,
117
- app_type: Datadog::Ext::AppTypes::WEB,
121
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
118
122
  tracer: -> { config[:tracer] }
119
123
  )
120
124
 
@@ -142,7 +146,7 @@ module Datadog
142
146
  @default_datadog_pin ||= Datadog::Pin.new(
143
147
  service,
144
148
  app: Ext::APP,
145
- app_type: Datadog::Ext::AppTypes::WEB,
149
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
146
150
  tracer: -> { config[:tracer] }
147
151
  )
148
152
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Httprb integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Httprb integration constants
5
5
  module Ext
6
6
  APP = 'httprb'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_HTTPRB_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTPRB_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_HTTPRB_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTPRB_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_HTTPRB_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EHTTPRB_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_HTTPRB_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'httprb'.freeze
10
13
  SPAN_REQUEST = 'httprb.request'.freeze
11
14
  end
@@ -72,6 +72,9 @@ module Datadog
72
72
  logger.debug("service #{req_options[:service_name]} span #{Ext::SPAN_REQUEST} missing uri")
73
73
  end
74
74
 
75
+ # Tag as an external peer service
76
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
77
+
75
78
  set_analytics_sample_rate(span, req_options)
76
79
  end
77
80
 
@@ -82,12 +85,9 @@ module Datadog
82
85
 
83
86
  case response.code.to_i
84
87
  when 400...599
85
- begin
86
- message = JSON.parse(response.body)['message']
87
- rescue
88
- message = 'Error'
89
- end
90
- span.set_error(["Error #{response.code}", message])
88
+ # https://github.com/DataDog/dd-trace-rb/issues/1116
89
+ # parsing the response body message will alter downstream application behavior
90
+ span.set_error(["Error #{response.code}", 'Error'])
91
91
  end
92
92
  end
93
93
 
@@ -103,7 +103,7 @@ module Datadog
103
103
  Datadog::Pin.new(
104
104
  service,
105
105
  app: Ext::APP,
106
- app_type: Datadog::Ext::AppTypes::WEB,
106
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
107
107
  tracer: -> { config[:tracer] }
108
108
  )
109
109
  end
@@ -126,7 +126,7 @@ module Datadog
126
126
  Datadog::Pin.new(
127
127
  service,
128
128
  app: Ext::APP,
129
- app_type: Datadog::Ext::AppTypes::WEB,
129
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
130
130
  tracer: -> { config[:tracer] }
131
131
  )
132
132
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Kafka integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24