ddtrace 1.0.0.beta1 → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (592) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +85 -1
  3. data/ddtrace.gemspec +2 -2
  4. data/docs/GettingStarted.md +211 -144
  5. data/docs/UpgradeGuide.md +383 -205
  6. data/ext/ddtrace_profiling_native_extension/extconf.rb +9 -0
  7. data/ext/ddtrace_profiling_native_extension/profiling.c +3 -1
  8. data/lib/datadog/appsec/assets/waf_rules/recommended.json +248 -318
  9. data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -18
  10. data/lib/datadog/appsec/assets/waf_rules/strict.json +4 -67
  11. data/lib/datadog/appsec/assets.rb +2 -0
  12. data/lib/datadog/appsec/configuration/settings.rb +3 -1
  13. data/lib/datadog/appsec/configuration.rb +2 -0
  14. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -0
  15. data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -0
  16. data/lib/datadog/appsec/contrib/integration.rb +2 -0
  17. data/lib/datadog/appsec/contrib/patcher.rb +2 -0
  18. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -0
  19. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -0
  20. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +2 -4
  21. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +4 -2
  22. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +4 -2
  23. data/lib/datadog/appsec/contrib/rack/request.rb +2 -0
  24. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +4 -45
  25. data/lib/datadog/appsec/contrib/rack/response.rb +2 -0
  26. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -0
  27. data/lib/datadog/appsec/contrib/rails/ext.rb +2 -0
  28. data/lib/datadog/appsec/contrib/rails/framework.rb +2 -0
  29. data/lib/datadog/appsec/contrib/rails/patcher.rb +1 -1
  30. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -0
  31. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -0
  32. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -0
  33. data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -0
  34. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -0
  35. data/lib/datadog/appsec/event.rb +12 -17
  36. data/lib/datadog/appsec/extensions.rb +2 -1
  37. data/lib/datadog/appsec/instrumentation/gateway.rb +2 -0
  38. data/lib/datadog/appsec/processor.rb +121 -0
  39. data/lib/datadog/appsec/rate_limiter.rb +2 -0
  40. data/lib/datadog/appsec/reactive/address_hash.rb +2 -0
  41. data/lib/datadog/appsec/reactive/engine.rb +2 -0
  42. data/lib/datadog/appsec/reactive/operation.rb +2 -0
  43. data/lib/datadog/appsec/reactive/subscriber.rb +2 -0
  44. data/lib/datadog/appsec.rb +2 -0
  45. data/lib/datadog/ci/configuration/components.rb +1 -0
  46. data/lib/datadog/ci/configuration/settings.rb +9 -2
  47. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +1 -0
  48. data/lib/datadog/ci/contrib/cucumber/ext.rb +1 -0
  49. data/lib/datadog/ci/contrib/cucumber/formatter.rb +2 -1
  50. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -0
  51. data/lib/datadog/ci/contrib/cucumber/integration.rb +1 -0
  52. data/lib/datadog/ci/contrib/cucumber/patcher.rb +1 -0
  53. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +1 -0
  54. data/lib/datadog/ci/contrib/rspec/example.rb +3 -2
  55. data/lib/datadog/ci/contrib/rspec/ext.rb +1 -0
  56. data/lib/datadog/ci/contrib/rspec/integration.rb +1 -0
  57. data/lib/datadog/ci/contrib/rspec/patcher.rb +1 -0
  58. data/lib/datadog/ci/ext/app_types.rb +1 -0
  59. data/lib/datadog/ci/ext/environment.rb +2 -1
  60. data/lib/datadog/ci/ext/settings.rb +1 -0
  61. data/lib/datadog/ci/ext/test.rb +1 -0
  62. data/lib/datadog/ci/extensions.rb +1 -0
  63. data/lib/datadog/ci/flush.rb +1 -0
  64. data/lib/datadog/ci/test.rb +2 -1
  65. data/lib/datadog/ci.rb +3 -1
  66. data/lib/datadog/core/buffer/cruby.rb +1 -0
  67. data/lib/datadog/core/buffer/thread_safe.rb +1 -0
  68. data/lib/datadog/core/configuration/agent_settings_resolver.rb +109 -40
  69. data/lib/datadog/core/configuration/base.rb +1 -0
  70. data/lib/datadog/core/configuration/components.rb +1 -0
  71. data/lib/datadog/core/configuration/dependency_resolver.rb +1 -0
  72. data/lib/datadog/core/configuration/option.rb +1 -0
  73. data/lib/datadog/core/configuration/option_definition.rb +1 -0
  74. data/lib/datadog/core/configuration/option_definition_set.rb +1 -0
  75. data/lib/datadog/core/configuration/option_set.rb +1 -0
  76. data/lib/datadog/core/configuration/options.rb +1 -0
  77. data/lib/datadog/core/configuration/settings.rb +1 -9
  78. data/lib/datadog/core/configuration.rb +1 -0
  79. data/lib/datadog/core/diagnostics/environment_logger.rb +2 -1
  80. data/lib/datadog/core/diagnostics/ext.rb +1 -0
  81. data/lib/datadog/core/diagnostics/health.rb +2 -1
  82. data/lib/datadog/core/encoding.rb +1 -0
  83. data/lib/datadog/core/environment/cgroup.rb +1 -0
  84. data/lib/datadog/core/environment/class_count.rb +1 -0
  85. data/lib/datadog/core/environment/container.rb +1 -0
  86. data/lib/datadog/core/environment/ext.rb +1 -0
  87. data/lib/datadog/core/environment/gc.rb +1 -0
  88. data/lib/datadog/core/environment/identity.rb +1 -0
  89. data/lib/datadog/core/environment/socket.rb +1 -0
  90. data/lib/datadog/core/environment/thread_count.rb +1 -0
  91. data/lib/datadog/core/environment/variable_helpers.rb +1 -0
  92. data/lib/datadog/core/environment/vm_cache.rb +1 -0
  93. data/lib/datadog/core/error.rb +2 -1
  94. data/lib/datadog/core/extensions.rb +2 -1
  95. data/lib/datadog/core/git/ext.rb +1 -0
  96. data/lib/datadog/core/logger.rb +1 -0
  97. data/lib/datadog/core/metrics/client.rb +1 -0
  98. data/lib/datadog/core/metrics/ext.rb +1 -0
  99. data/lib/datadog/core/metrics/helpers.rb +2 -0
  100. data/lib/datadog/core/metrics/logging.rb +2 -0
  101. data/lib/datadog/core/metrics/metric.rb +2 -0
  102. data/lib/datadog/core/metrics/options.rb +2 -0
  103. data/lib/datadog/core/pin.rb +1 -1
  104. data/lib/datadog/core/runtime/metrics.rb +1 -0
  105. data/lib/datadog/core/utils/compression.rb +1 -0
  106. data/lib/datadog/core/utils/forking.rb +1 -0
  107. data/lib/datadog/core/utils/object_set.rb +1 -0
  108. data/lib/datadog/core/utils/only_once.rb +2 -1
  109. data/lib/datadog/core/utils/safe_dup.rb +27 -0
  110. data/lib/datadog/core/utils/sequence.rb +1 -0
  111. data/lib/datadog/core/utils/string_table.rb +1 -0
  112. data/lib/datadog/core/utils/time.rb +1 -0
  113. data/lib/datadog/core/utils.rb +1 -0
  114. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -0
  115. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +1 -0
  116. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +1 -0
  117. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +1 -0
  118. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +1 -0
  119. data/lib/datadog/core/vendor/multipart-post/multipart.rb +1 -0
  120. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +1 -0
  121. data/lib/datadog/core/worker.rb +1 -0
  122. data/lib/datadog/core/workers/async.rb +1 -0
  123. data/lib/datadog/core/workers/interval_loop.rb +1 -0
  124. data/lib/datadog/core/workers/polling.rb +1 -0
  125. data/lib/datadog/core/workers/queue.rb +1 -0
  126. data/lib/datadog/core/workers/runtime_metrics.rb +1 -0
  127. data/lib/datadog/core.rb +1 -0
  128. data/lib/datadog/opentracer/binary_propagator.rb +1 -0
  129. data/lib/datadog/opentracer/carrier.rb +1 -0
  130. data/lib/datadog/opentracer/distributed_headers.rb +1 -0
  131. data/lib/datadog/opentracer/global_tracer.rb +1 -0
  132. data/lib/datadog/opentracer/propagator.rb +1 -0
  133. data/lib/datadog/opentracer/rack_propagator.rb +1 -0
  134. data/lib/datadog/opentracer/scope.rb +1 -0
  135. data/lib/datadog/opentracer/scope_manager.rb +1 -0
  136. data/lib/datadog/opentracer/span.rb +1 -0
  137. data/lib/datadog/opentracer/span_context.rb +1 -0
  138. data/lib/datadog/opentracer/span_context_factory.rb +1 -0
  139. data/lib/datadog/opentracer/text_map_propagator.rb +1 -0
  140. data/lib/datadog/opentracer/thread_local_scope.rb +1 -0
  141. data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -0
  142. data/lib/datadog/opentracer/tracer.rb +1 -0
  143. data/lib/datadog/opentracer.rb +1 -0
  144. data/lib/datadog/profiling/backtrace_location.rb +1 -0
  145. data/lib/datadog/profiling/buffer.rb +1 -0
  146. data/lib/datadog/profiling/collectors/code_provenance.rb +2 -1
  147. data/lib/datadog/profiling/collectors/stack.rb +1 -1
  148. data/lib/datadog/profiling/encoding/profile.rb +1 -0
  149. data/lib/datadog/profiling/event.rb +1 -0
  150. data/lib/datadog/profiling/events/stack.rb +1 -0
  151. data/lib/datadog/profiling/exporter.rb +1 -0
  152. data/lib/datadog/profiling/ext/forking.rb +1 -0
  153. data/lib/datadog/profiling/ext.rb +3 -2
  154. data/lib/datadog/profiling/flush.rb +1 -0
  155. data/lib/datadog/profiling/native_extension.rb +1 -0
  156. data/lib/datadog/profiling/pprof/builder.rb +2 -1
  157. data/lib/datadog/profiling/pprof/converter.rb +1 -0
  158. data/lib/datadog/profiling/pprof/message_set.rb +1 -0
  159. data/lib/datadog/profiling/pprof/payload.rb +1 -0
  160. data/lib/datadog/profiling/pprof/pprof_pb.rb +1 -0
  161. data/lib/datadog/profiling/pprof/stack_sample.rb +1 -0
  162. data/lib/datadog/profiling/pprof/string_table.rb +1 -0
  163. data/lib/datadog/profiling/pprof/template.rb +1 -0
  164. data/lib/datadog/profiling/preload.rb +1 -0
  165. data/lib/datadog/profiling/profiler.rb +1 -0
  166. data/lib/datadog/profiling/recorder.rb +1 -0
  167. data/lib/datadog/profiling/scheduler.rb +2 -1
  168. data/lib/datadog/profiling/tasks/exec.rb +1 -0
  169. data/lib/datadog/profiling/tasks/help.rb +1 -0
  170. data/lib/datadog/profiling/tasks/setup.rb +1 -0
  171. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -1
  172. data/lib/datadog/profiling/trace_identifiers/helper.rb +2 -1
  173. data/lib/datadog/profiling/transport/client.rb +1 -0
  174. data/lib/datadog/profiling/transport/http/api/endpoint.rb +1 -0
  175. data/lib/datadog/profiling/transport/http/api/instance.rb +1 -0
  176. data/lib/datadog/profiling/transport/http/api/spec.rb +1 -0
  177. data/lib/datadog/profiling/transport/http/api.rb +1 -0
  178. data/lib/datadog/profiling/transport/http/builder.rb +1 -0
  179. data/lib/datadog/profiling/transport/http/client.rb +1 -0
  180. data/lib/datadog/profiling/transport/http/response.rb +1 -0
  181. data/lib/datadog/profiling/transport/http.rb +1 -0
  182. data/lib/datadog/profiling/transport/io/client.rb +1 -0
  183. data/lib/datadog/profiling/transport/io/response.rb +1 -0
  184. data/lib/datadog/profiling/transport/io.rb +1 -0
  185. data/lib/datadog/profiling/transport/parcel.rb +1 -0
  186. data/lib/datadog/profiling/transport/request.rb +1 -0
  187. data/lib/datadog/profiling/transport/response.rb +1 -0
  188. data/lib/datadog/profiling.rb +1 -0
  189. data/lib/datadog/tracing/analytics.rb +1 -0
  190. data/lib/datadog/tracing/buffer.rb +1 -0
  191. data/lib/datadog/tracing/configuration/ext.rb +1 -0
  192. data/lib/datadog/tracing/context.rb +1 -0
  193. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +1 -0
  194. data/lib/datadog/tracing/contrib/action_cable/event.rb +2 -1
  195. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +1 -0
  196. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +1 -0
  197. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +1 -0
  198. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -0
  199. data/lib/datadog/tracing/contrib/action_cable/ext.rb +1 -0
  200. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +1 -1
  201. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -0
  202. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +1 -0
  203. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +1 -0
  204. data/lib/datadog/tracing/contrib/action_mailer/event.rb +2 -1
  205. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -0
  206. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +1 -0
  207. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -0
  208. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +1 -0
  209. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -0
  210. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +1 -0
  211. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +3 -2
  212. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +1 -0
  213. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -0
  214. data/lib/datadog/tracing/contrib/action_pack/ext.rb +1 -0
  215. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -0
  216. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +1 -0
  217. data/lib/datadog/tracing/contrib/action_pack/utils.rb +2 -1
  218. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +1 -0
  219. data/lib/datadog/tracing/contrib/action_view/event.rb +2 -1
  220. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +1 -0
  221. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -0
  222. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -0
  223. data/lib/datadog/tracing/contrib/action_view/ext.rb +1 -0
  224. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  225. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  226. data/lib/datadog/tracing/contrib/action_view/integration.rb +1 -0
  227. data/lib/datadog/tracing/contrib/action_view/patcher.rb +1 -0
  228. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -1
  229. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -0
  230. data/lib/datadog/tracing/contrib/active_job/event.rb +2 -1
  231. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -0
  232. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -0
  233. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -0
  234. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -0
  235. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -0
  236. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -0
  237. data/lib/datadog/tracing/contrib/active_job/events.rb +1 -0
  238. data/lib/datadog/tracing/contrib/active_job/ext.rb +1 -0
  239. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -0
  240. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -0
  241. data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -0
  242. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +1 -0
  243. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +2 -1
  244. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -0
  245. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -0
  246. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -0
  247. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +1 -0
  248. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -0
  249. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +2 -1
  250. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -0
  251. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -0
  252. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -0
  253. data/lib/datadog/tracing/contrib/active_record/event.rb +2 -1
  254. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -0
  255. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -1
  256. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -0
  257. data/lib/datadog/tracing/contrib/active_record/ext.rb +1 -0
  258. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -0
  259. data/lib/datadog/tracing/contrib/active_record/patcher.rb +1 -0
  260. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -0
  261. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +1 -0
  262. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +2 -1
  263. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +1 -0
  264. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -0
  265. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -0
  266. data/lib/datadog/tracing/contrib/active_support/ext.rb +1 -0
  267. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -0
  268. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -0
  269. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -0
  270. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +1 -0
  271. data/lib/datadog/tracing/contrib/active_support/patcher.rb +1 -0
  272. data/lib/datadog/tracing/contrib/analytics.rb +1 -0
  273. data/lib/datadog/tracing/contrib/auto_instrument.rb +23 -20
  274. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -0
  275. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
  276. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +3 -1
  277. data/lib/datadog/tracing/contrib/aws/integration.rb +1 -0
  278. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -0
  279. data/lib/datadog/tracing/contrib/aws/patcher.rb +2 -1
  280. data/lib/datadog/tracing/contrib/aws/services.rb +1 -0
  281. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  282. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +2 -1
  283. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +1 -0
  284. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -0
  285. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -0
  286. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +1 -0
  287. data/lib/datadog/tracing/contrib/configurable.rb +1 -0
  288. data/lib/datadog/tracing/contrib/configuration/resolver.rb +1 -0
  289. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -0
  290. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -0
  291. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -0
  292. data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
  293. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +2 -1
  294. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -0
  295. data/lib/datadog/tracing/contrib/dalli/patcher.rb +1 -0
  296. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -0
  297. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -0
  298. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +1 -0
  299. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -0
  300. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +1 -0
  301. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -1
  302. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -0
  303. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
  304. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +1 -0
  305. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +2 -1
  306. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -0
  307. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -0
  308. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -1
  309. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
  310. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -0
  311. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +2 -1
  312. data/lib/datadog/tracing/contrib/ethon/patcher.rb +1 -0
  313. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -0
  314. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
  315. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -0
  316. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -1
  317. data/lib/datadog/tracing/contrib/excon/patcher.rb +1 -0
  318. data/lib/datadog/tracing/contrib/extensions.rb +57 -42
  319. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -0
  320. data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -0
  321. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
  322. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -0
  323. data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -1
  324. data/lib/datadog/tracing/contrib/faraday/patcher.rb +1 -0
  325. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +1 -0
  326. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +1 -0
  327. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -2
  328. data/lib/datadog/tracing/contrib/grape/ext.rb +1 -0
  329. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +1 -0
  330. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -0
  331. data/lib/datadog/tracing/contrib/grape/patcher.rb +1 -0
  332. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +1 -0
  333. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  334. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -0
  335. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -1
  336. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -0
  337. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -0
  338. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -0
  339. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -2
  340. data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
  341. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -0
  342. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -0
  343. data/lib/datadog/tracing/contrib/grpc/patcher.rb +1 -0
  344. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +2 -1
  345. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -0
  346. data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
  347. data/lib/datadog/tracing/contrib/http/instrumentation.rb +2 -1
  348. data/lib/datadog/tracing/contrib/http/integration.rb +1 -0
  349. data/lib/datadog/tracing/contrib/http/patcher.rb +1 -0
  350. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +1 -0
  351. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -0
  352. data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
  353. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -2
  354. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -0
  355. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +1 -0
  356. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -0
  357. data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
  358. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +3 -2
  359. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -0
  360. data/lib/datadog/tracing/contrib/httprb/patcher.rb +1 -0
  361. data/lib/datadog/tracing/contrib/integration.rb +2 -1
  362. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +1 -0
  363. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
  364. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -0
  365. data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
  366. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -0
  367. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -0
  368. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -0
  369. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  370. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  371. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  372. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  373. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  374. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  375. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -0
  376. data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -0
  377. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -0
  378. data/lib/datadog/tracing/contrib/kafka/patcher.rb +1 -0
  379. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +1 -0
  380. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -0
  381. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -1
  382. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -0
  383. data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -0
  384. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -0
  385. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  386. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +1 -0
  387. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -0
  388. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +2 -1
  389. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +1 -0
  390. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +3 -2
  391. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -0
  392. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
  393. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
  394. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -0
  395. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +1 -0
  396. data/lib/datadog/tracing/contrib/patchable.rb +1 -0
  397. data/lib/datadog/tracing/contrib/patcher.rb +1 -0
  398. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -0
  399. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
  400. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -1
  401. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -0
  402. data/lib/datadog/tracing/contrib/presto/patcher.rb +1 -0
  403. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +1 -0
  404. data/lib/datadog/tracing/contrib/qless/ext.rb +1 -0
  405. data/lib/datadog/tracing/contrib/qless/integration.rb +1 -0
  406. data/lib/datadog/tracing/contrib/qless/patcher.rb +2 -1
  407. data/lib/datadog/tracing/contrib/qless/qless_job.rb +3 -2
  408. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +2 -1
  409. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -1
  410. data/lib/datadog/tracing/contrib/que/ext.rb +2 -1
  411. data/lib/datadog/tracing/contrib/que/integration.rb +2 -1
  412. data/lib/datadog/tracing/contrib/que/patcher.rb +2 -1
  413. data/lib/datadog/tracing/contrib/que/tracer.rb +3 -2
  414. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -0
  415. data/lib/datadog/tracing/contrib/racecar/event.rb +2 -1
  416. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +1 -0
  417. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -0
  418. data/lib/datadog/tracing/contrib/racecar/events/message.rb +1 -0
  419. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -0
  420. data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -0
  421. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -0
  422. data/lib/datadog/tracing/contrib/racecar/patcher.rb +1 -0
  423. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -0
  424. data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
  425. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -0
  426. data/lib/datadog/tracing/contrib/rack/middlewares.rb +2 -1
  427. data/lib/datadog/tracing/contrib/rack/patcher.rb +3 -2
  428. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
  429. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +3 -1
  430. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +5 -4
  431. data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
  432. data/lib/datadog/tracing/contrib/rails/framework.rb +37 -36
  433. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -0
  434. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -0
  435. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -0
  436. data/lib/datadog/tracing/contrib/rails/patcher.rb +2 -1
  437. data/lib/datadog/tracing/contrib/rails/railtie.rb +1 -0
  438. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -0
  439. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -0
  440. data/lib/datadog/tracing/contrib/rake/ext.rb +1 -0
  441. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -2
  442. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -0
  443. data/lib/datadog/tracing/contrib/rake/patcher.rb +2 -1
  444. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -0
  445. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -0
  446. data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
  447. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +2 -1
  448. data/lib/datadog/tracing/contrib/redis/integration.rb +1 -0
  449. data/lib/datadog/tracing/contrib/redis/patcher.rb +1 -0
  450. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -0
  451. data/lib/datadog/tracing/contrib/redis/tags.rb +2 -1
  452. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +1 -0
  453. data/lib/datadog/tracing/contrib/registry.rb +1 -0
  454. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -0
  455. data/lib/datadog/tracing/contrib/resque/ext.rb +1 -0
  456. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -0
  457. data/lib/datadog/tracing/contrib/resque/patcher.rb +1 -0
  458. data/lib/datadog/tracing/contrib/resque/resque_job.rb +3 -2
  459. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -0
  460. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
  461. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -0
  462. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +1 -0
  463. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +2 -1
  464. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +1 -0
  465. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -0
  466. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +2 -1
  467. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -0
  468. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +1 -0
  469. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +1 -0
  470. data/lib/datadog/tracing/contrib/sequel/database.rb +2 -1
  471. data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -1
  472. data/lib/datadog/tracing/contrib/sequel/ext.rb +1 -0
  473. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -0
  474. data/lib/datadog/tracing/contrib/sequel/patcher.rb +1 -0
  475. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -1
  476. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -0
  477. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -0
  478. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -0
  479. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -0
  480. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -1
  481. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +2 -1
  482. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +1 -0
  483. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  484. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -0
  485. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +1 -0
  486. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +1 -1
  487. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -1
  488. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +1 -1
  489. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +2 -1
  490. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +1 -0
  491. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -0
  492. data/lib/datadog/tracing/contrib/sinatra/env.rb +1 -0
  493. data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
  494. data/lib/datadog/tracing/contrib/sinatra/framework.rb +3 -1
  495. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -0
  496. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -0
  497. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +1 -0
  498. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +3 -2
  499. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +2 -1
  500. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -1
  501. data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -1
  502. data/lib/datadog/tracing/contrib/sneakers/integration.rb +2 -1
  503. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -1
  504. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +3 -2
  505. data/lib/datadog/tracing/contrib/status_code_matcher.rb +1 -0
  506. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +1 -0
  507. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -0
  508. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +1 -0
  509. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +2 -1
  510. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -0
  511. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +2 -1
  512. data/lib/datadog/tracing/contrib/utils/database.rb +1 -0
  513. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +1 -0
  514. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +1 -0
  515. data/lib/datadog/tracing/contrib.rb +3 -0
  516. data/lib/datadog/tracing/correlation.rb +2 -1
  517. data/lib/datadog/tracing/distributed/headers/b3.rb +1 -0
  518. data/lib/datadog/tracing/distributed/headers/b3_single.rb +1 -0
  519. data/lib/datadog/tracing/distributed/headers/datadog.rb +1 -0
  520. data/lib/datadog/tracing/distributed/headers/ext.rb +1 -0
  521. data/lib/datadog/tracing/distributed/helpers.rb +1 -0
  522. data/lib/datadog/tracing/distributed/parser.rb +1 -0
  523. data/lib/datadog/tracing/event.rb +1 -0
  524. data/lib/datadog/tracing/flush.rb +1 -0
  525. data/lib/datadog/tracing/metadata/analytics.rb +2 -0
  526. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  527. data/lib/datadog/tracing/metadata/ext.rb +2 -1
  528. data/lib/datadog/tracing/metadata/tagging.rb +2 -10
  529. data/lib/datadog/tracing/metadata.rb +4 -0
  530. data/lib/datadog/tracing/pipeline/span_processor.rb +1 -0
  531. data/lib/datadog/tracing/propagation/grpc.rb +1 -0
  532. data/lib/datadog/tracing/propagation/http.rb +1 -0
  533. data/lib/datadog/tracing/runtime/metrics.rb +1 -0
  534. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -0
  535. data/lib/datadog/tracing/sampling/ext.rb +1 -0
  536. data/lib/datadog/tracing/sampling/matcher.rb +1 -0
  537. data/lib/datadog/tracing/sampling/priority_sampler.rb +1 -0
  538. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +1 -0
  539. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +1 -0
  540. data/lib/datadog/tracing/sampling/rate_limiter.rb +1 -0
  541. data/lib/datadog/tracing/sampling/rate_sampler.rb +1 -0
  542. data/lib/datadog/tracing/sampling/rule.rb +1 -0
  543. data/lib/datadog/tracing/sampling/rule_sampler.rb +1 -0
  544. data/lib/datadog/tracing/sampling/sampler.rb +1 -0
  545. data/lib/datadog/tracing/span.rb +2 -1
  546. data/lib/datadog/tracing/span_operation.rb +2 -0
  547. data/lib/datadog/tracing/sync_writer.rb +1 -0
  548. data/lib/datadog/tracing/trace_digest.rb +2 -0
  549. data/lib/datadog/tracing/trace_operation.rb +18 -3
  550. data/lib/datadog/tracing/trace_segment.rb +109 -194
  551. data/lib/datadog/tracing/tracer.rb +2 -1
  552. data/lib/datadog/tracing/workers/trace_writer.rb +1 -0
  553. data/lib/datadog/tracing/workers.rb +1 -0
  554. data/lib/datadog/tracing/writer.rb +1 -0
  555. data/lib/datadog/tracing.rb +2 -0
  556. data/lib/ddtrace/auto_instrument.rb +2 -1
  557. data/lib/ddtrace/auto_instrument_base.rb +1 -0
  558. data/lib/ddtrace/profiling/preload.rb +2 -0
  559. data/lib/ddtrace/transport/ext.rb +1 -0
  560. data/lib/ddtrace/transport/http/adapters/net.rb +1 -0
  561. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  562. data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
  563. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +1 -0
  564. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  565. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  566. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  567. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  568. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  569. data/lib/ddtrace/transport/http/api.rb +1 -0
  570. data/lib/ddtrace/transport/http/builder.rb +1 -0
  571. data/lib/ddtrace/transport/http/client.rb +1 -0
  572. data/lib/ddtrace/transport/http/env.rb +1 -0
  573. data/lib/ddtrace/transport/http/response.rb +1 -0
  574. data/lib/ddtrace/transport/http/statistics.rb +1 -0
  575. data/lib/ddtrace/transport/http/traces.rb +1 -0
  576. data/lib/ddtrace/transport/http.rb +14 -3
  577. data/lib/ddtrace/transport/io/client.rb +1 -0
  578. data/lib/ddtrace/transport/io/response.rb +1 -0
  579. data/lib/ddtrace/transport/io/traces.rb +1 -0
  580. data/lib/ddtrace/transport/io.rb +1 -0
  581. data/lib/ddtrace/transport/parcel.rb +1 -0
  582. data/lib/ddtrace/transport/request.rb +1 -0
  583. data/lib/ddtrace/transport/response.rb +1 -0
  584. data/lib/ddtrace/transport/serializable_trace.rb +2 -0
  585. data/lib/ddtrace/transport/statistics.rb +1 -0
  586. data/lib/ddtrace/transport/trace_formatter.rb +24 -1
  587. data/lib/ddtrace/transport/traces.rb +1 -0
  588. data/lib/ddtrace/version.rb +12 -10
  589. data/lib/ddtrace.rb +2 -21
  590. metadata +11 -10
  591. data/lib/datadog/opentelemetry/extensions.rb +0 -14
  592. data/lib/datadog/opentelemetry/span.rb +0 -34
data/docs/UpgradeGuide.md CHANGED
@@ -2,57 +2,78 @@
2
2
 
3
3
  # From 0.x to 1.0
4
4
 
5
- - [Namespacing & the public API](#namespacing--the-public-api)
6
- - [Configuration](#configuration)
7
- - [Instrumentation](#instrumentation)
8
- - [Full list of breaking changes](#full-list-of-breaking-changes)
5
+ Upgrading `ddtrace` from 0.x to 1.x introduces some breaking changes which are outlined below.
9
6
 
10
- Upgrading `ddtrace` from 0.x to 1.x introduces some changes to namespacing, the public API, and the underlying trace data structure.
7
+ **How to upgrade basic usage**
11
8
 
12
- Here's a list of the most common changes you may encounter:
9
+ For users with a basic implementation (configuration file + out-of-the-box instrumentation), only minor changes to your configuration file are required: most applications take just minutes to update. Check out the following sections for a step-by-step guide.
13
10
 
14
- ## Namespacing & the public API
11
+ - [Configuration](#1.0-configuration)
12
+ - [`require` paths have changed](#1.0-configuration-requires)
13
+ - [Settings have been renamed](#1.0-configuration-settings)
14
+ - [Activating instrumentation](#1.0-configuration-instrumentation)
15
+ - [Instrumentation](#1.0-instrumentation)
16
+ - [Service naming](#1.0-instrumentation-service-naming)
15
17
 
16
- To avoid naming conflicts with new Datadog features and products, many of the tracing constants and functions defined directly under `Datadog` have moved to `Datadog::Tracing`.
18
+ **Additional upgrades for advanced usage**
17
19
 
18
- You can access most common functions through our [public API](https://www.rubydoc.info/gems/ddtrace/) within `Datadog::Tracing`. Use of some of the functions in the public API will be described in use cases below. Here's a few examples:
20
+ For users with an advanced implementation of `ddtrace` (custom instrumentation, sampling or processing behavior, etc), some additional namespace and behavioral changes may be required. See the following sections for details about what features changed and how to use them.
19
21
 
20
- ```ruby
21
- ### Old 0.x ###
22
- Datadog.tracer.trace
23
- Datadog.tracer.active_span
24
- Datadog.tracer.active_correlation.to_s
22
+ - [Namespacing](#1.0-namespacing)
23
+ - [Trace API](#1.0-trace-api)
24
+ - [Removed `Datadog.tracer`](#1.0-trace-api-removed-tracer)
25
+ - [Removed access to `Datadog::Context`](#1.0-trace-api-removed-context)
26
+ - [Manual tracing & trace model](#1.0-trace-api-manual-tracing)
27
+ - [Accessing trace state](#1.0-trace-api-trace-state)
28
+ - [Distributed tracing](#1.0-trace-api-distributed)
29
+ - [Over HTTP](#1.0-trace-api-distributed-http)
30
+ - [Over gRPC](#1.0-trace-api-distributed-grpc)
31
+ - [Between threads](#1.0-trace-api-distributed-threads)
32
+ - [Sampling](#1.0-trace-api-sampling)
33
+ - [Processing pipeline](#1.0-trace-api-pipeline)
25
34
 
35
+ **Appendix**
26
36
 
27
- ### New 1.0 ###
28
- Datadog::Tracing.trace
29
- Datadog::Tracing.active_span
30
- Datadog::Tracing.log_correlation
31
- # ...and more...
32
- ```
37
+ For a comprehensive list of everything that changed, the appendix hosts some helpful and detailed tables with recommendations.
33
38
 
34
- Check out our [complete list of namespacing changes](#appendix-namespacing) for more details.
39
+ - [Namespace mappings](#1.0-appendix-namespace)
40
+ - [Constants](#1.0-appendix-namespace-constants)
41
+ - [Breaking changes](#1.0-appendix-breaking-changes)
35
42
 
36
- ### Removed `Datadog.tracer`
43
+ <h1 id="1.0-basic-upgrade">Upgrading basic usage</h1>
37
44
 
38
- Many of the functions accessed directly through `Datadog.tracer` have been moved to `Datadog::Tracing` instead.
45
+ <h2 id="1.0-configuration">Configuration</h2>
39
46
 
40
- ### Removed access to `Datadog::Context`
47
+ <h3 id="1.0-configuration-requires">`require` paths have changed</h3>
41
48
 
42
- Direct usage of `Datadog::Context` has been removed. Previously, it was used to modify or access active trace state. Most use cases have been replaced by our public trace API.
49
+ If you `require` any of the following paths, update them accordingly:
43
50
 
44
- ## Configuration
51
+ | 0.x `require` path | 1.0 `require` path |
52
+ |-----------------------------|-----------------------------|
53
+ | `ddtrace/opentelemetry` | Removed |
54
+ | `ddtrace/opentracer` | `datadog/opentracer` |
55
+ | `ddtrace/profiling/preload` | `datadog/profiling/preload` |
45
56
 
46
- ### Settings have been namespaced
57
+ Using `require 'ddtrace'` will load all features by default. To load individual features, you may use the following paths instead:
47
58
 
48
- Configuration settings have been sorted into smaller configuration groups, by product.
59
+ | Feature | 1.0 `require` path |
60
+ |-------------|----------------------|
61
+ | AppSec | `datadog/appsec` |
62
+ | CI | `datadog/ci` |
63
+ | OpenTracing | `datadog/opentracer` |
64
+ | Profiling | `datadog/profiling` |
65
+ | Tracing | `datadog/tracing` |
66
+
67
+ <h3 id="1.0-configuration-settings">Settings have been renamed</h3>
68
+
69
+ Configuration settings have been sorted into smaller configuration groups, by feature.
49
70
 
50
71
  - `Datadog.configure { |c| c.* }`: Datadog configuration settings
51
72
  - `Datadog.configure { |c| c.tracing.* }`: Tracing configuration settings
52
73
  - `Datadog.configure { |c| c.profiling.* }`: Profiling configuration settings
53
74
  - `Datadog.configure { |c| c.ci.* }`: CI configuration settings
54
75
 
55
- Existing applications should update their configuration files and settings accordingly. For example:
76
+ For existing applications, configuration files should be updated accordingly. For example:
56
77
 
57
78
  ```ruby
58
79
  # config/initializers/datadog.rb
@@ -61,17 +82,14 @@ require 'ddtrace'
61
82
  ### Old 0.x ###
62
83
  Datadog.configure do |c|
63
84
  # Global settings
64
- c.diagnostics.debug = true
85
+ c.tracer.hostname = '127.0.0.1'
86
+ c.tracer.port = 8126
87
+ c.runtime_metrics.enabled = true
65
88
  c.service = 'billing-api'
66
89
 
67
- # Profiling settings
68
- c.profiling.enabled = true
69
-
70
- # Tracer settings
90
+ # Tracing settings
71
91
  c.analytics.enabled = true
72
- c.runtime_metrics.enabled = true
73
- c.tracer.hostname = '127.0.0.1'
74
- c.tracer.port = 8126
92
+ c.tracer.partial_flush.enabled = true
75
93
 
76
94
  # CI settings
77
95
  c.ci_mode = (ENV['DD_ENV'] == 'ci')
@@ -79,7 +97,6 @@ Datadog.configure do |c|
79
97
  # Instrumentation
80
98
  c.use :rails
81
99
  c.use :redis, service_name: 'billing-redis'
82
- c.use :resque
83
100
  c.use :rspec
84
101
  end
85
102
 
@@ -87,17 +104,14 @@ end
87
104
  ### New 1.0 ###
88
105
  Datadog.configure do |c|
89
106
  # Global settings
90
- c.agent.hostname = '127.0.0.1'
107
+ c.agent.host = '127.0.0.1'
91
108
  c.agent.port = 8126
92
- c.diagnostics.debug = true
109
+ c.runtime_metrics.enabled = true
93
110
  c.service = 'billing-api'
94
111
 
95
- # Profiling settings
96
- c.profiling.enabled = true
97
-
98
- # Tracer settings
112
+ # Tracing settings
99
113
  c.tracing.analytics.enabled = true
100
- c.tracing.runtime_metrics.enabled = true
114
+ c.tracing.partial_flush.enabled = true
101
115
 
102
116
  # CI settings
103
117
  c.ci.enabled = (ENV['DD_ENV'] == 'ci')
@@ -105,77 +119,251 @@ Datadog.configure do |c|
105
119
  # Instrumentation
106
120
  c.tracing.instrument :rails
107
121
  c.tracing.instrument :redis, service_name: 'billing-redis'
108
- c.tracing.instrument :resque
109
122
  c.ci.instrument :rspec
110
123
  end
111
124
  ```
112
125
 
113
- Check out our [complete list of configuration changes](#appendix-configuration) for more details.
114
-
115
- ### Activating instrumentation
116
-
117
- The `use` function has been renamed to `instrument`. Also, `instrument` has been namespaced to the specific product:
126
+ Check out the table below for a list of common mappings:
127
+
128
+ | 0.x setting | 1.0 setting |
129
+ |----------------------------------------|---------------------------------|
130
+ | `analytics.enabled` | `tracing.analytics.enabled` |
131
+ | `ci_mode.context_flush` | `ci.context_flush` |
132
+ | `ci_mode.enabled` | `ci.enabled` |
133
+ | `ci_mode.writer_options` | `ci.writer_options` |
134
+ | `distributed_tracing` | `tracing.distributed_tracing` |
135
+ | `logger=` | `logger.instance=` |
136
+ | `profiling.exporter.transport_options` | Removed |
137
+ | `report_hostname` | `tracing.report_hostname` |
138
+ | `runtime_metrics_enabled` | `runtime_metrics.enabled` |
139
+ | `runtime_metrics(options)` | Removed |
140
+ | `sampling` | `tracing.sampling` |
141
+ | `test_mode` | `tracing.test_mode` |
142
+ | `tracer=` | Removed |
143
+ | `tracer.debug` | `diagnostics.debug` |
144
+ | `tracer.enabled` | `tracing.enabled` |
145
+ | `tracer.env` | `env` |
146
+ | `tracer.hostname` | `agent.host` |
147
+ | `tracer.instance` | `tracing.instance` |
148
+ | `tracer.log` | `logger.instance` |
149
+ | `tracer.partial_flush` | `tracing.partial_flush.enabled` |
150
+ | `tracer.port` | `agent.port` |
151
+ | `tracer.sampler` | `tracing.sampler` |
152
+ | `tracer.tags` | `tags` |
153
+ | `tracer.transport_options` | `tracing.transport_options` |
154
+ | `tracer.transport_options(options)` | Removed |
155
+ | `tracer.writer` | `tracing.writer` |
156
+ | `tracer.writer_options` | `tracing.writer_options` |
157
+ | `use` | `tracing.instrument` |
158
+
159
+ <h3 id="1.0-configuration-instrumentation">Activating instrumentation</h3>
160
+
161
+ - The `use` function has been renamed to `instrument`.
162
+ - `instrument` has been namespaced within the feature to which it belongs.
163
+
164
+ As an example:
118
165
 
119
166
  ```ruby
120
167
  ### Old 0.x ###
121
168
  Datadog.configure do |c|
169
+ # Tracing instrumentation
122
170
  c.use :rails
171
+
172
+ # CI instrumentation
123
173
  c.use :cucumber
124
174
  end
125
175
 
126
176
 
127
177
  ### New 1.0 ###
128
178
  Datadog.configure do |c|
179
+ # Tracing instrumentation
129
180
  c.tracing.instrument :rails
181
+
182
+ # CI instrumentation
130
183
  c.ci.instrument :cucumber
131
184
  end
132
185
  ```
133
186
 
134
- ## Instrumentation
187
+ Similarly, if you were accessing configuration for instrumentation, you will need to use the appropriate namespace:
135
188
 
136
- ### Service naming
189
+ ```ruby
190
+ ### Old 0.x ###
191
+ Datadog.configuration[:rails][:service_name]
192
+ Datadog.configuration[:cucumber][:service_name]
137
193
 
138
- In 0.x, The `service` field on spans generated by Datadog integrations would typically default to the package name, e.g. `http` or `sidekiq`. This would often result in many "services" being generated by one application, one for each instrumented package. Users would often rectify this by overriding the `service_name` setting on each integration to get matching `service` names.
194
+ ### New 1.0 ###
195
+ Datadog.configuration.tracing[:rails][:service_name]
196
+ Datadog.configuration.ci[:cucumber][:service_name]
197
+ ```
139
198
 
140
- To remedy this in later 0.x versions, we introduced the global `service` name setting (also set via `DD_SERVICE`), which is the recommended way to set the name of your application. However, the Datadog integrations (with the exception of Rails) still did not employ this field.
199
+ <h2 id="1.0-instrumentation">Instrumentation</h2>
141
200
 
142
- In 1.0, spans now inherit the global `service` name by default, unless otherwise explicitly set. This means for spans generated by Datadog integrations, they will default to the global `service` name, unless the `service_name` setting is configured for that integration.
201
+ <h3 id="1.0-instrumentation-service-naming">Service naming</h3>
143
202
 
144
- Spans that describe external services (e.g. `mysql`), will default to some other name that describes the external service instead.
203
+ **Define an application service name**
145
204
 
146
- As an example, expect the following code & trace in 0.x:
205
+ We recommend setting the application's service name with `DD_SERVICE`, or by adding the following configuration:
206
+
207
+ ```ruby
208
+ Datadog.configure do |c|
209
+ c.service = 'billing-api' # Or DD_SERVICE. Defaults to process name.
210
+ end
211
+ ```
212
+
213
+ If this is not set, it will default to the process name.
214
+
215
+ **Update service names for your integrations**
216
+
217
+ Spans now inherit the global `service` name by default, unless otherwise explicitly set. This means, generally speaking, spans generated by Datadog integrations will default to the global `service` name, unless the `service_name` setting is configured for that integration.
218
+
219
+ Spans that describe external services (e.g. `mysql`) will continue to default to some other name that describes the external service instead. (e.g. `mysql`)
147
220
 
148
221
  ```ruby
149
222
  ### Old 0.x ###
223
+ Datadog.configure do |c|
224
+ # Instrumentation that measures internal behavior
225
+ c.use :rails, service_name: 'billing-api'
226
+ c.use :resque, service_name: 'billing-api'
227
+ c.use :sidekiq, service_name: 'billing-api'
228
+
229
+ # Instrumentation that measures external services
230
+ c.use :active_record, service_name: 'billing-api_mysql' # Defaults to DB type e.g. mysql
231
+ c.use :http, service_name: 'billing-api_http' # Defaults to net/http
232
+ c.use :redis, service_name: 'billing-api_redis' # Defaults to redis
233
+ end
234
+
235
+ ### New 1.0 ###
150
236
  Datadog.configure do |c|
151
237
  c.service = 'billing-api'
152
- c.use :rails
153
- c.use :redis
154
- c.use :resque
238
+
239
+ # Instrumentation that measures internal behavior
240
+ # now inherits the application's service name.
241
+ c.tracing.instrument :rails
242
+ c.tracing.instrument :resque
243
+ c.tracing.instrument :sidekiq
244
+
245
+ # Instrumentation that measures external services
246
+ # defaults to adapter-specific names. You may still override
247
+ # these names with the `service_name:` option.
248
+ c.tracing.instrument :active_record, service_name: 'billing-api_mysql' # Defaults to DB type e.g. mysql
249
+ c.tracing.instrument :http, service_name: 'billing-api_http' # Defaults to net/http
250
+ c.tracing.instrument :redis, service_name: 'billing-api_redis' # Defaults to redis
155
251
  end
156
252
  ```
157
253
 
158
- ![0.x trace](./0.x-trace.png)
254
+ **Update Rails instrumentation**
255
+
256
+ If your application activates and configures `rails` instrumentation, you will need to adjust your settings slightly.
159
257
 
160
- To reflect the following trace in 1.0 instead:
258
+ The following options have been removed; instead, configure the underlying instrumentation directly.
259
+
260
+ | 0.x setting | 1.0 setting |
261
+ |---------------------------------------------|----------------------------------------------------------------|
262
+ | `use :rails, cache_service: <SERVICE>` | `tracing.instrument :active_support, cache_service: <SERVICE>` |
263
+ | `use :rails, controller_service: <SERVICE>` | `tracing.instrument :action_pack, service_name: <SERVICE>` |
264
+ | `use :rails, database_service: <SERVICE>` | `tracing.instrument :active_record, service_name: <SERVICE>` |
265
+ | `use :rails, job_service: <SERVICE>` | `tracing.instrument :active_job, service_name: <SERVICE>` |
266
+ | `use :rails, log_injection: true` | `tracing.log_injection = true` (Is `true` by default.) |
161
267
 
162
268
  ```ruby
269
+ ### Old 0.x ###
270
+ Datadog.configure do |c|
271
+ c.use :rails, service_name: 'billing-api',
272
+ cache_service: 'billing-api-cache',
273
+ controller_service: 'billing-api-controllers',
274
+ database_service: 'billing-api-db',
275
+ job_service: 'billing-api-jobs',
276
+ log_injection: true
277
+ end
278
+
163
279
  ### New 1.0 ###
164
280
  Datadog.configure do |c|
165
281
  c.service = 'billing-api'
282
+
166
283
  c.tracing.instrument :rails
167
- c.tracing.instrument :redis
168
- c.tracing.instrument :resque
284
+ c.tracing.instrument :active_support, cache_service: 'billing-api-cache'
285
+ c.tracing.instrument :action_pack, service_name: 'billing-api-controllers'
286
+ c.tracing.instrument :active_record, service_name: 'billing-api-db'
287
+ c.tracing.instrument :active_job, service_name: 'billing-api-jobs'
169
288
  end
170
289
  ```
171
290
 
172
- ![1.0 trace](./1.0-trace.png)
291
+ <h1 id="1.0-advanced-upgrade">Upgrading advanced usage</h1>
292
+
293
+ <h2 id="1.0-namespacing">Namespacing</h2>
294
+
295
+ Many files and constants within `ddtrace` have been recategorized by feature. The new categorization scheme is as follows:
296
+
297
+ | Feature | Namespace | File path |
298
+ |------------------|--------------------------|-------------------------|
299
+ | Globals | `Datadog` | `ddtrace` |
300
+ | | | |
301
+ | CI | `Datadog::CI` | `datadog/ci` |
302
+ | Core (Internals) | `Datadog::Core` | `datadog/core` |
303
+ | OpenTelemetry | `Datadog::OpenTelemetry` | `datadog/opentelemetry` |
304
+ | OpenTracing | `Datadog::OpenTracer` | `datadog/opentracer` |
305
+ | Profiling | `Datadog::Profiling` | `datadog/profiling` |
306
+ | Security | `Datadog::AppSec` | `datadog/appsec` |
307
+ | Tracing | `Datadog::Tracing` | `datadog/trace` |
308
+
309
+ As a result, if your application referenced file paths or constants affected by this change, they will need to be updated. Check out the [namespace mappings](#1.0-appendix-namespace) for some common cases and how to update them.
310
+
311
+ <h2 id="1.0-trace-api">Trace API</h2>
312
+
313
+ Usage of `Datadog.tracer` has been replaced with the `Datadog::Tracing` trace API. This module contains most of the functions that `Datadog.tracer` had, and most use cases will map one-to-one.
314
+
315
+ For example:
316
+
317
+ ```ruby
318
+ ### Old 0.x ###
319
+ Datadog.tracer.trace
320
+ Datadog.tracer.active_span
321
+ Datadog.tracer.active_correlation.to_s
322
+
323
+
324
+ ### New 1.0 ###
325
+ Datadog::Tracing.trace
326
+ Datadog::Tracing.active_span
327
+ Datadog::Tracing.log_correlation
328
+
329
+ # ...and more...
330
+ ```
331
+
332
+ See the table below for most common mappings:
173
333
 
174
- ### Manual tracing & trace model
334
+ | 0.x usage | 1.0 usage | Note |
335
+ |----------------------------------------------------------------------------------------------|---------------------------------------------|---------------------------------------------------------------------|
336
+ | `Datadog.tracer.active_correlation.to_s` | `Datadog::Tracing.log_correlation` | Returns `String` with trace identifiers for logging. |
337
+ | `Datadog.tracer.active_correlation` | `Datadog::Tracing.correlation` | Returns `Datadog::Tracing::Correlation::Identifier` |
338
+ | `Datadog.tracer.active_root_span` | Removed | Consider `Datadog::Tracing.active_trace` instead. |
339
+ | `Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP` | `Datadog::Tracing.keep!` | See [sampling](#1.0-trace-api-sampling) for details. |
340
+ | `Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT` | `Datadog::Tracing.reject!` | See [sampling](#1.0-trace-api-sampling) for details. |
341
+ | `Datadog.tracer.active_span.context` | Removed | Consider `Datadog::Tracing.active_trace` instead. |
342
+ | `Datadog.tracer.active_span` | `Datadog::Tracing.active_span` | See [trace state](#1.0-trace-api-trace-state) for details. |
343
+ | `Datadog.tracer.call_context` | Removed | See [trace state](#1.0-trace-api-trace-state) for details. |
344
+ | `Datadog.tracer.configure(options)` | `Datadog.configure { \|c\| ... }` | Use configuration API instead. |
345
+ | `Datadog.tracer.provider.context = context` | `Datadog::Tracing.continue_from!(digest)` | See [distributed tracing](#1.0-trace-api-distributed) for details. |
346
+ | `Datadog.tracer.set_tags(tags)` | `Datadog.configure { \|c\| c.tags = tags }` | |
347
+ | `Datadog.tracer.shutdown!` | `Datadog::Tracing.shutdown!` | |
348
+ | `Datadog.tracer.start_span` | `Datadog::Tracing.trace` | See [manual tracing](#1.0-trace-api-manual-tracing) for details. |
349
+ | `Datadog.tracer.trace` | `Datadog::Tracing.trace` | See [manual tracing](#1.0-trace-api-manual-tracing) for details. |
175
350
 
176
- Manual tracing is now done through the public API.
177
351
 
178
- Whereas in 0.x, the block would yield a `Datadog::Span` as `span`, in 1.0, the block yields a `Datadog::SpanOperation` as `span` and `Datadog::TraceOperation` as `trace`.
352
+ Also check out the functions defined within `Datadog::Tracing` in our [public API](https://www.rubydoc.info/gems/ddtrace/) for more details on their usage.
353
+
354
+ <h3 id="1.0-trace-api-removed-tracer">Removed `Datadog.tracer`</h3>
355
+
356
+ Many of the functions accessed directly through `Datadog.tracer` have been moved to `Datadog::Tracing` instead.
357
+
358
+ <h3 id="1.0-trace-api-removed-context">Removed access to `Datadog::Context`</h3>
359
+
360
+ Direct usage of `Datadog::Context` has been removed. Previously, it was used to modify or access active trace state. Most use cases have been replaced by our [public trace API](https://www.rubydoc.info/gems/ddtrace/).
361
+
362
+ <h3 id="1.0-trace-api-manual-tracing">Manual tracing & trace model</h3>
363
+
364
+ Manual tracing is now done through the [public API](https://www.rubydoc.info/gems/ddtrace/).
365
+
366
+ Whereas in 0.x, the block would provide a `Datadog::Span` as `span`, in 1.0, the block provides a `Datadog::SpanOperation` as `span` and `Datadog::TraceOperation` as `trace`.
179
367
 
180
368
  ```ruby
181
369
  ### Old 0.x ###
@@ -193,11 +381,11 @@ Datadog::Tracing.trace('my.job') do |span, trace|
193
381
  end
194
382
  ```
195
383
 
196
- The yielded `span` is nearly identical in behavior, except access to some fields (like `context`) been removed. Instead, the `trace`, which models the trace itself, grants access to new functions.
384
+ The provided `span` is nearly identical in behavior, except access to some fields (like `context`) been removed. Instead, the provided `trace`, which models the trace itself, grants access to new functions, of which some replace old `span` behavior.
197
385
 
198
386
  For more details about new behaviors and the trace model, see [this pull request](https://github.com/DataDog/dd-trace-rb/pull/1783).
199
387
 
200
- ### Accessing trace state
388
+ <h3 id="1.0-trace-api-trace-state">Accessing trace state</h3>
201
389
 
202
390
  The public API provides new functions to access active trace data:
203
391
 
@@ -222,11 +410,11 @@ Datadog::Tracing.correlation
222
410
 
223
411
  Use of `active_root_span` has been removed.
224
412
 
225
- ### Distributed tracing
413
+ <h3 id="1.0-trace-api-distributed">Distributed tracing</h3>
226
414
 
227
415
  Previously, distributed tracing required building new `Datadog::Context` objects, then replacing the context within the tracer.
228
416
 
229
- Instead, users utilize `TraceDigest` objects derived from a trace. This object represents the state of a trace. It can be used to propagate a trace across execution boundaries (processes, threads), or to continue a trace locally.
417
+ Instead, users must use `TraceDigest` objects derived from a trace. `TraceDigest` represents the state of a trace. It can be used to propagate a trace across execution boundaries (processes, threads) or to continue a trace locally.
230
418
 
231
419
  ```ruby
232
420
  ### Old 0.x ###
@@ -248,12 +436,6 @@ end
248
436
  # Get trace continuation from active trace
249
437
  trace_digest = Datadog::Tracing.active_trace.to_digest
250
438
 
251
- # Continue a trace: explicit continuation
252
- # Inherits trace properties from the trace digest
253
- Datadog::Tracing.trace('my.job', continue_from: trace_digest) do |span, trace|
254
- trace.id == trace_digest.trace_id
255
- end
256
-
257
439
  # Continue a trace: implicit continuation
258
440
  # Digest will be "consumed" by the next `trace` operation
259
441
  Datadog::Tracing.continue_trace!(trace_digest)
@@ -269,62 +451,91 @@ Datadog::Tracing.trace('my.job') do |span, trace|
269
451
  end
270
452
  ```
271
453
 
272
- #### Propagation over HTTP/gRPC
454
+ New in 1.0, it's also possible to explicitly assign a trace block to continue from a specific trace, rather than implicitly inherit an active context. This gives users fine-grained control in applications where multiple traces run concurrently in the same execution context:
455
+
456
+ ```ruby
457
+ ### New 1.0 ###
458
+ # Get trace continuation from active trace
459
+ trace_digest = Datadog::Tracing.active_trace.to_digest
460
+
461
+ # Continue a trace: explicit continuation
462
+ # Inherits trace properties from the trace digest
463
+ Datadog::Tracing.trace('my.job', continue_from: trace_digest) do |span, trace|
464
+ trace.id == trace_digest.trace_id
465
+ end
466
+
467
+ # Continue a trace: explicit continuation (using #continue_from!)
468
+ Datadog::Tracing.continue_from!(trace_digest) do
469
+ # Traces implicitly continue within the block
470
+ Datadog::Tracing.trace('my.job') do |span, trace|
471
+ trace.id == trace_digest.trace_id
472
+ end
473
+ end
474
+ ```
273
475
 
274
- To propagate a local trace to a remote service:
476
+ <h4 id="1.0-trace-api-distributed-http">Over HTTP</h4>
477
+
478
+ To propagate active trace to a remote service:
275
479
 
276
480
  ```ruby
277
481
  ### Old 0.x ###
278
- context = Datadog.tracer.call_context
279
-
280
- # HTTP
281
482
  headers = {}
483
+ context = Datadog.tracer.call_context
282
484
  Datadog::HTTPPropagator.inject!(context, headers)
283
- # Inject `headers` into your HTTP headers
284
-
285
- # gRPC
286
- headers = {}
287
- Datadog::GRPCPropagator.inject!(context, headers)
288
- # Inject `headers` into your headers
289
485
 
486
+ outgoing = Net::HTTP::Get.new(uri)
487
+ headers.each { |name, value| outgoing[name] = value }
290
488
 
291
489
  ### New 1.0 ###
292
- trace_digest = Datadog::Tracing.active_trace.to_digest
293
-
294
- # HTTP
295
490
  headers = {}
491
+ trace_digest = Datadog::Tracing.active_trace.to_digest
296
492
  Datadog::Tracing::Propagation::HTTP.inject!(trace_digest, headers)
297
- # Inject `headers` into your HTTP headers
298
493
 
299
- # gRPC
300
- headers = {}
301
- Datadog::Tracing::Propagation::GRPC.inject!(trace_digest, headers)
302
- # Inject `headers` into your headers
494
+ outgoing = Net::HTTP::Get.new(uri)
495
+ headers.each { |name, value| outgoing[name] = value }
303
496
  ```
304
497
 
305
- To continue a propagated trace locally:
498
+ To continue a trace from a remote service:
306
499
 
307
500
  ```ruby
308
501
  ### Old 0.x ###
309
- # HTTP
310
- context = Datadog::HTTPPropagator.extract(request.env)
502
+ incoming = Rack::Request.new(env)
503
+ context = Datadog::HTTPPropagator.extract(incoming.env)
311
504
  Datadog.tracer.provider.context = context
312
505
 
313
- # gRPC
506
+ ### New 1.0 ###
507
+ incoming = Rack::Request.new(env)
508
+ trace_digest = Datadog::Tracing::Propagation::HTTP.extract(incoming.env)
509
+ Datadog::Tracing.continue_trace!(trace_digest)
510
+ ```
511
+
512
+ <h4 id="1.0-trace-api-distributed-grpc">Over gRPC</h4>
513
+
514
+ To propagate active trace to a remote service:
515
+
516
+ ```ruby
517
+ ### Old 0.x ###
518
+ context = Datadog.tracer.call_context
519
+ Datadog::GRPCPropagator.inject!(context, metadata)
520
+
521
+ ### New 1.0 ###
522
+ trace_digest = Datadog::Tracing.active_trace.to_digest
523
+ Datadog::Tracing::Propagation::GRPC.inject!(trace_digest, metadata)
524
+ ```
525
+
526
+ To continue a trace from a remote service:
527
+
528
+ ```ruby
529
+ ### Old 0.x ###
314
530
  context = Datadog::GRPCPropagator.extract(metadata)
315
531
  Datadog.tracer.provider.context = context
316
532
 
317
533
  ### New 1.0 ###
318
- # HTTP
319
- digest = Datadog::Tracing::Propagation::HTTP.extract(request.env)
320
- Datadog::Tracing.continue_trace!(digest)
321
-
322
- # gRPC
323
- digest = Datadog::Tracing::Propagation::GRPC.extract(metadata)
324
- Datadog::Tracing.continue_trace!(digest)
534
+ trace_digest = Datadog::Tracing::Propagation::GRPC.extract(metadata)
535
+ Datadog::Tracing.continue_trace!(trace_digest)
325
536
  ```
326
537
 
327
- #### Propagation between threads
538
+ <h4 id="1.0-trace-api-distributed-threads">Between threads</h4>
328
539
 
329
540
  Traces do not implicitly propagate across threads, as they are considered different execution contexts.
330
541
 
@@ -333,6 +544,7 @@ However, if you wish to do this, trace propagation across threads is similar to
333
544
  NOTE: The same `TraceOperation` object should never be shared between threads; this would create race conditions.
334
545
 
335
546
  ```ruby
547
+ ### New 1.0 ###
336
548
  # Get trace digest
337
549
  trace = Datadog::Tracing.active_trace
338
550
 
@@ -349,7 +561,7 @@ Thread.new do
349
561
  end
350
562
  ```
351
563
 
352
- ### Sampling
564
+ <h3 id="1.0-trace-api-sampling">Sampling</h3>
353
565
 
354
566
  Accessing `call_context` to set explicit sampling has been removed.
355
567
 
@@ -363,8 +575,10 @@ Datadog.tracer.trace('web.request') do |span|
363
575
  end
364
576
 
365
577
  # From outside the trace:
366
- Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP # Keeps current trace
367
- Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT # Drops current trace
578
+ # Keeps current trace
579
+ Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
580
+ # Drops current trace
581
+ Datadog.tracer.active_span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
368
582
 
369
583
 
370
584
  ### New 1.0 ###
@@ -378,9 +592,9 @@ Datadog::Tracing.keep! # Keeps current trace
378
592
  Datadog::Tracing.reject! # Drops current trace
379
593
  ```
380
594
 
381
- ### Processing pipeline
595
+ <h3 id="1.0-trace-api-pipeline">Processing pipeline</h3>
382
596
 
383
- When using a trace processor in the processing pipeline, the block yields a `TraceSegment` as `trace` instead of `Array[Datadog::Span]`. This object can be modified by reference.
597
+ When using a trace processor in the processing pipeline, the block provides a `TraceSegment` as `trace` (instead of `Array[Datadog::Span]`.) This object can be directly mutated.
384
598
 
385
599
  ```ruby
386
600
  ### Old 0.x ###
@@ -397,20 +611,11 @@ Datadog::Tracing.before_flush do |trace|
397
611
  end
398
612
  ```
399
613
 
400
- ## Appendix
614
+ <h2 id="1.0-appendix">Appendix</h2>
401
615
 
402
- <h3 id="appendix-namespacing">Namespacing</h3>
616
+ <h3 id="1.0-appendix-namespace">Namespace mappings</h3>
403
617
 
404
- #### `require` paths
405
-
406
- | `0.x require path` | `1.0 require path` |
407
- |-----------------------------|-----------------------------|
408
- | `ddtrace/opentelemetry` | `datadog/opentelemetry` |
409
- | `ddtrace/opentracer` | `datadog/opentracer` |
410
- | `ddtrace/profiling/preload` | `datadog/profiling/preload` |
411
-
412
-
413
- #### Constants
618
+ <h4 id="1.0-appendix-namespace-constants">Constants</h3>
414
619
 
415
620
  | `0.x Constant` | `1.0 Constant` |
416
621
  |-----------------------------------------------------------------|-----------------------------------------------------------------------------------------|
@@ -477,81 +682,54 @@ end
477
682
  | `Datadog::Worker` | `Datadog::Core::Worker` |
478
683
  | `Datadog::Workers` | `Datadog::Core::Workers` |
479
684
 
480
-
481
- <h3 id="appendix-configuration">Configuration</h3>
482
-
483
- | 0.x setting | 1.0 setting |
484
- |----------------------------------------|-------------------------------|
485
- | `analytics.enabled` | `tracing.analytics.enabled` |
486
- | `ci_mode.context_flush` | `ci.context_flush` |
487
- | `ci_mode.enabled` | `ci.enabled` |
488
- | `ci_mode.writer_options` | `ci.writer_options` |
489
- | `distributed_tracing` | `tracing.distributed_tracing` |
490
- | `logger=` | `logger.instance=` |
491
- | `profiling.exporter.transport_options` | Removed |
492
- | `report_hostname` | `tracing.report_hostname` |
493
- | `runtime_metrics_enabled` | `runtime_metrics.enabled` |
494
- | `runtime_metrics(options)` | Removed |
495
- | `sampling` | `tracing.sampling` |
496
- | `test_moade` | `tracing.test_mode` |
497
- | `tracer.enabled` | `tracing.enabled` |
498
- | `tracer.hostname` | `agent.hostname` |
499
- | `tracer.instance` | `tracing.instance` |
500
- | `tracer.partial_flush` | `tracing.partial_flush` |
501
- | `tracer.port` | `agent.port` |
502
- | `tracer.sampler` | `tracing.sampler` |
503
- | `tracer.transport_options` | `tracing.transport_options` |
504
- | `tracer.transport_options(options)` | Removed |
505
- | `tracer.writer` | `tracing.writer` |
506
- | `tracer.writer_options` | `tracing.writer_options` |
507
-
508
- <h3 id="appendix-breaking-changes">Breaking changes</h3>
509
-
510
- | **Category** | **Type** | **Description** | **Change / Alternative** |
511
- |---------------|----------|----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
512
- | General | Changed | Many constants have been moved from `Datadog` to `Datadog::Core`, `Datadog::Tracing`, `Datadog::Profiling` | Update your references to these [new namespaces](#appendix-namespacing) where appropriate. |
513
- | General | Removed | `Datadog.tracer` | Use methods in `Datadog::Tracing` instead. |
514
- | General | Removed | Support for trace agent API v0.2 | Use v0.4 instead (default behavior.) |
515
- | CI API | Changed | `DD_TRACE_CI_MODE_ENABLED` environment variable is now `DD_TRACE_CI_ENABLED` | Use `DD_TRACE_CI_ENABLED` instead. |
516
- | Configuration | Changed | Many settings have been namespaced under specific categories | Update your configuration to these [new settings](#appendix-configuration) where appropriate. |
517
- | Configuration | Removed | `Datadog.configure(client, options)` | Use `Datadog::Tracing.configure_onto(client, options)` instead. |
518
- | Configuration | Removed | `DD_#{integration}_ANALYTICS_ENABLED` and `DD_#{integration}_ANALYTICS_SAMPLE_RATE` environment variables | Use `DD_TRACE_#{integration}_ANALYTICS_ENABLED` and `DD_TRACE_#{integration}_ANALYTICS_SAMPLE_RATE` instead. |
519
- | Configuration | Removed | `DD_PROPAGATION_INJECT_STYLE` and `DD_PROPAGATION_EXTRACT_STYLE` environment variables | Use `DD_PROPAGATION_STYLE_INJECT` and `DD_PROPAGATION_STYLE_EXTRACT` instead. |
520
- | Integrations | Changed | `-` in HTTP header tag names are kept, and no longer replaced with `_` | For example: `http.response.headers.content_type` is changed to `http.response.headers.content-type`. |
521
- | Integrations | Changed | `Contrib::Configurable#default_configuration` moved to `Tracing::Contrib::Configurable#new_configuration` | Use `Tracing::Contrib::Configurable#new_configuration` instead. |
522
- | Integrations | Changed | `Datadog.configuration.registry` moved to `Datadog.registry` | Use `Datadog.registry` instead. |
523
- | Integrations | Changed | `service_name` option from each integration uses the default service name, unless it represents an external service | Set `c.service` or `DD_SERVICE`, and remove `service_name` option from integration to inherit default service name. Set `service_name` option on integration to override. |
524
- | Integrations | Changed | Presto: `out.host` tag now contains only client hostname. Before it contained `"#{hostname}:#{port}"`. | |
525
- | Integrations | Changed | Rails: service_name does not propagate to sub-components (e.g. `c.use :rails, cache_service: 'my-cache'`) | Use `c.service` instead. |
526
- | Integrations | Changed | Rails: Sub-components service_name options are now consistently called `:service_name` | Update your configuration to use `:service_name`. |
527
- | Integrations | Changed | Rails: Trace-logging correlation is enabled by default | Can be disabled using the environment variable `DD_LOGS_INJECTION=false`. |
528
- | Integrations | Removed | `tracer` integration option from all integrations | Remove this option from your configuration. |
529
- | Integrations | Removed | ActiveJob: `log_injection` option | Use `c.tracing.log_injection` instead. |
530
- | Integrations | Removed | ActiveModelSerializers: service_name configuration | Remove this option from your configuration. |
531
- | Integrations | Removed | ConcurrentRuby: unused option `service_name` | Remove this option from your configuration. |
532
- | Integrations | Removed | Rails: 3.0 and 3.1 support. | Not supported. |
533
- | Integrations | Removed | Rails: `log_injection` option. | Use global `c.tracing.log_injection` instead. |
534
- | Integrations | Removed | Rails: `orm_service_name` option. | Remove this option from your configuration. |
535
- | Integrations | Removed | Resque: `workers` option. (All Resque workers are now automatically instrumented.) | Remove this option from your configuration. |
536
- | Tracing API | Changed | `Correlation#to_s` to `Correlation#to_log_format` | Use `Datadog::Tracing.log_correlation` instead. |
537
- | Tracing API | Changed | `Tracer#trace` implements keyword args | Omit invalid options from `trace` calls. |
538
- | Tracing API | Changed | Distributed tracing takes and yields `TraceDigest` instead of `Context` | Update your usage of distributed tracing to use `continue_from` and `to_digest`. |
539
- | Tracing API | Changed | Rules for RuleSampler now yield `TraceOperation` instead of `Span` | Update Rule sampler usage to use `TraceOperation`. |
540
- | Tracing API | Changed | Trace processors yield `TraceSegment` instead of `Array[Span]` | Update pipeline callbacks to use `TraceSegment instead. |
541
- | Tracing API | Removed | `child_of:` option from `Tracer#trace` | Not supported. |
542
- | Tracing API | Removed | `Pin.new(service, config: { option: value }).onto(client)` | Use `Datadog::Tracing.configure_onto(client, service_name: service, option: value)` instead. |
543
- | Tracing API | Removed | `Pin.get_from(client)` | Use `Datadog::Tracing.configure_for(client)` instead. |
544
- | Tracing API | Removed | `Pipeline.before_flush` | Use `Datadog::Tracing.before_flush` instead. |
545
- | Tracing API | Removed | `SpanOperation#context` | Use `Datadog::Tracing.active_trace` instead. |
546
- | Tracing API | Removed | `SpanOperation#parent`/`SpanOperation#parent=` | Not supported. |
547
- | Tracing API | Removed | `SpanOperation#sampled` | Use `Datadog::TraceOperation#sampled?` instead. |
548
- | Tracing API | Removed | `Tracer#active_correlation` | Use `Datadog::Tracing.correlation` instead. |
549
- | Tracing API | Removed | `Tracer#active_correlation.to_log_format` | Use `Datadog::Tracing.log_correlation` instead. |
550
- | Tracing API | Removed | `Tracer#active_root_span` | Use `Datadog::Tracing.active_trace` instead. |
551
- | Tracing API | Removed | `Tracer#build_span` | Use `Datadog::Tracing.trace` instead. |
552
- | Tracing API | Removed | `Tracer#call_context` | Use `Datadog::Tracing.active_trace` instead. |
553
- | Tracing API | Removed | `Tracer#configure` | Not supported. |
554
- | Tracing API | Removed | `Tracer#services` | Not supported. |
555
- | Tracing API | Removed | `Tracer#set_service_info` | Not supported. |
556
- | Tracing API | Removed | `Tracer#start_span` | Use `Datadog::Tracing.trace` instead. |
557
- | Tracing API | Removed | `Writer#write` and `SyncWriter#write` `services` argument | Not supported. |
685
+ <h3 id="1.0-appendix-breaking-changes">Breaking changes</h3>
686
+
687
+ | **Category** | **Type** | **Description** | **Change / Alternative** |
688
+ |---------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
689
+ | General | Changed | Many constants have been moved from `Datadog` to `Datadog::Core`, `Datadog::Tracing` | Update your references to these [new namespaces](#1.0-appendix-namespace-constants) where appropriate. |
690
+ | General | Changed | Some `require` paths have been moved from `ddtrace` to `datadog` | Update your references to these [new paths](#1.0-appendix-namespace-requires) where appropriate. |
691
+ | General | Removed | Support for trace agent API v0.2 | Use v0.4 instead (default behavior.) |
692
+ | CI API | Changed | `DD_TRACE_CI_MODE_ENABLED` environment variable is now `DD_TRACE_CI_ENABLED` | Use `DD_TRACE_CI_ENABLED` instead. |
693
+ | Configuration | Changed | Many settings have been namespaced under specific categories | Update your configuration to these [new settings](#1.0-configuration-settings) where appropriate. |
694
+ | Configuration | Removed | `Datadog.configure(client, options)` | Use `Datadog::Tracing.configure_onto(client, options)` instead. |
695
+ | Configuration | Removed | `DD_#{integration}_ANALYTICS_ENABLED` and `DD_#{integration}_ANALYTICS_SAMPLE_RATE` environment variables | Use `DD_TRACE_#{integration}_ANALYTICS_ENABLED` and `DD_TRACE_#{integration}_ANALYTICS_SAMPLE_RATE` instead. |
696
+ | Configuration | Removed | `DD_PROPAGATION_INJECT_STYLE` and `DD_PROPAGATION_EXTRACT_STYLE` environment variables | Use `DD_PROPAGATION_STYLE_INJECT` and `DD_PROPAGATION_STYLE_EXTRACT` instead. |
697
+ | Integrations | Changed | `-` in HTTP header tag names are kept, and no longer replaced with `_` | For example: `http.response.headers.content_type` is changed to `http.response.headers.content-type`. |
698
+ | Integrations | Changed | `Contrib::Configurable#default_configuration` moved to `Tracing::Contrib::Configurable#new_configuration` | Use `Tracing::Contrib::Configurable#new_configuration` instead. |
699
+ | Integrations | Changed | `Datadog.configuration.registry` moved to `Datadog.registry` | Use `Datadog.registry` instead. |
700
+ | Integrations | Changed | `service_name` option from each integration uses the default service name, unless it represents an external service | Set `c.service` or `DD_SERVICE`, and remove `service_name` option from integration to inherit default service name. Set `service_name` option on integration to override. |
701
+ | Integrations | Removed | `tracer` integration option from all integrations | Remove this option from your configuration. |
702
+ | Integrations - ActiveJob | Removed | `log_injection` option | Use `c.tracing.log_injection` instead. |
703
+ | Integrations - ActiveModelSerializers | Removed | service_name configuration | Remove this option from your configuration. |
704
+ | Integrations - ConcurrentRuby | Removed | unused option `service_name` | Remove this option from your configuration. |
705
+ | Integrations - Presto | Changed | `out.host` tag now contains only client hostname. Before it contained `"#{hostname}:#{port}"`. | |
706
+ | Integrations - Rails | Changed | `service_name` does not propagate to sub-components (e.g. `c.use :rails, cache_service: 'my-cache'`) | Use `c.service` instead. |
707
+ | Integrations - Rails | Changed | Sub-components service_name options are now consistently called `:service_name` | Update your configuration to use `:service_name`. |
708
+ | Integrations - Rails | Changed | Trace-logging correlation is enabled by default | Can be disabled using the environment variable `DD_LOGS_INJECTION=false`. |
709
+ | Integrations - Rails | Removed | `log_injection` option. | Use global `c.tracing.log_injection` instead. |
710
+ | Integrations - Rails | Removed | `orm_service_name` option. | Remove this option from your configuration. |
711
+ | Integrations - Rails | Removed | 3.0 and 3.1 support. | Not supported. |
712
+ | Integrations - Resque | Removed | `workers` option. (All Resque workers are now automatically instrumented.) | Remove this option from your configuration. |
713
+ | Tracing API | Changed | `Correlation#to_s` to `Correlation#to_log_format` | Use `Datadog::Tracing.log_correlation` instead. |
714
+ | Tracing API | Changed | `Tracer#trace` implements keyword args | Omit invalid options from `trace` calls. |
715
+ | Tracing API | Changed | Distributed tracing takes and returns `TraceDigest` instead of `Context` | Update your usage of distributed tracing to use `continue_from` and `to_digest`. |
716
+ | Tracing API | Changed | Rules for RuleSampler now return `TraceOperation` instead of `Span` | Update Rule sampler usage to use `TraceOperation`. |
717
+ | Tracing API | Changed | Trace processors return `TraceSegment` instead of `Array[Span]` | Update pipeline callbacks to use `TraceSegment instead. |
718
+ | Tracing API | Removed | `child_of:` option from `Tracer#trace` | Not supported. |
719
+ | Tracing API | Removed | `Datadog.tracer` | Use methods in `Datadog::Tracing` instead. |
720
+ | Tracing API | Removed | `Pin.get_from(client)` | Use `Datadog::Tracing.configure_for(client)` instead. |
721
+ | Tracing API | Removed | `Pin.new(service, config: { option: value }).onto(client)` | Use `Datadog::Tracing.configure_onto(client, service_name: service, option: value)` instead. |
722
+ | Tracing API | Removed | `Pipeline.before_flush` | Use `Datadog::Tracing.before_flush` instead. |
723
+ | Tracing API | Removed | `SpanOperation#context` | Use `Datadog::Tracing.active_trace` instead. |
724
+ | Tracing API | Removed | `SpanOperation#parent`/`SpanOperation#parent=` | Not supported. |
725
+ | Tracing API | Removed | `SpanOperation#sampled` | Use `Datadog::TraceOperation#sampled?` instead. |
726
+ | Tracing API | Removed | `Tracer#active_correlation.to_log_format` | Use `Datadog::Tracing.log_correlation` instead. |
727
+ | Tracing API | Removed | `Tracer#active_correlation` | Use `Datadog::Tracing.correlation` instead. |
728
+ | Tracing API | Removed | `Tracer#active_root_span` | Use `Datadog::Tracing.active_trace` instead. |
729
+ | Tracing API | Removed | `Tracer#build_span` | Use `Datadog::Tracing.trace` instead. |
730
+ | Tracing API | Removed | `Tracer#call_context` | Use `Datadog::Tracing.active_trace` instead. |
731
+ | Tracing API | Removed | `Tracer#configure` | Not supported. |
732
+ | Tracing API | Removed | `Tracer#services` | Not supported. |
733
+ | Tracing API | Removed | `Tracer#set_service_info` | Not supported. |
734
+ | Tracing API | Removed | `Tracer#start_span` | Use `Datadog::Tracing.trace` instead. |
735
+ | Tracing API | Removed | `Writer#write` and `SyncWriter#write` `services` argument | Not supported. |