ddtrace 0.54.2 → 1.2.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 (1139) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -16
  3. data/CHANGELOG.md +213 -1
  4. data/CONTRIBUTING.md +1 -1
  5. data/LICENSE-3rdparty.csv +3 -1
  6. data/README.md +10 -1
  7. data/bin/ddtracerb +5 -5
  8. data/ddtrace.gemspec +22 -7
  9. data/docs/0.x-trace.png +0 -0
  10. data/docs/1.0-trace.png +0 -0
  11. data/docs/AutoInstrumentation.md +36 -0
  12. data/docs/Deprecation.md +8 -0
  13. data/docs/DevelopmentGuide.md +1 -1
  14. data/docs/GettingStarted.md +596 -510
  15. data/docs/ProfilingDevelopment.md +36 -34
  16. data/docs/PublicApi.md +14 -0
  17. data/docs/UpgradeGuide.md +736 -0
  18. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +118 -0
  19. data/ext/ddtrace_profiling_loader/extconf.rb +54 -0
  20. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +36 -9
  21. data/ext/ddtrace_profiling_native_extension/clock_id.h +1 -1
  22. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +1 -9
  23. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +1 -1
  24. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +269 -0
  25. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +278 -0
  26. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +9 -0
  27. data/ext/ddtrace_profiling_native_extension/extconf.rb +123 -103
  28. data/ext/ddtrace_profiling_native_extension/http_transport.c +341 -0
  29. data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +13 -0
  30. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +274 -0
  31. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +655 -8
  32. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +33 -0
  33. data/ext/ddtrace_profiling_native_extension/profiling.c +14 -1
  34. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +33 -0
  35. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +147 -0
  36. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +37 -0
  37. data/lib/datadog/appsec/assets/blocked.html +4 -0
  38. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  39. data/lib/datadog/appsec/assets/waf_rules/recommended.json +5638 -0
  40. data/lib/datadog/appsec/assets/waf_rules/risky.json +1499 -0
  41. data/lib/datadog/appsec/assets/waf_rules/strict.json +1298 -0
  42. data/lib/datadog/appsec/assets.rb +38 -0
  43. data/lib/datadog/appsec/autoload.rb +16 -0
  44. data/lib/datadog/appsec/configuration/settings.rb +194 -0
  45. data/lib/datadog/appsec/configuration.rb +80 -0
  46. data/lib/datadog/appsec/contrib/auto_instrument.rb +29 -0
  47. data/lib/datadog/appsec/contrib/configuration/settings.rb +20 -0
  48. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  49. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  50. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +22 -0
  51. data/lib/datadog/appsec/contrib/rack/ext.rb +15 -0
  52. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +169 -0
  53. data/lib/datadog/appsec/contrib/rack/integration.rb +49 -0
  54. data/lib/datadog/appsec/contrib/rack/patcher.rb +32 -0
  55. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +87 -0
  56. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
  57. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +64 -0
  58. data/lib/datadog/appsec/contrib/rack/request.rb +58 -0
  59. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
  60. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +112 -0
  61. data/lib/datadog/appsec/contrib/rack/response.rb +24 -0
  62. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +22 -0
  63. data/lib/datadog/appsec/contrib/rails/ext.rb +15 -0
  64. data/lib/datadog/appsec/contrib/rails/framework.rb +30 -0
  65. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +81 -0
  66. data/lib/datadog/appsec/contrib/rails/integration.rb +48 -0
  67. data/lib/datadog/appsec/contrib/rails/patcher.rb +158 -0
  68. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
  69. data/lib/datadog/appsec/contrib/rails/request.rb +33 -0
  70. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  71. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +22 -0
  72. data/lib/datadog/appsec/contrib/sinatra/ext.rb +15 -0
  73. data/lib/datadog/appsec/contrib/sinatra/framework.rb +34 -0
  74. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +124 -0
  75. data/lib/datadog/appsec/contrib/sinatra/integration.rb +48 -0
  76. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +144 -0
  77. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
  78. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  79. data/lib/datadog/appsec/event.rb +121 -0
  80. data/lib/datadog/appsec/extensions.rb +118 -0
  81. data/lib/datadog/appsec/instrumentation/gateway.rb +44 -0
  82. data/lib/datadog/appsec/processor.rb +164 -0
  83. data/lib/datadog/appsec/rate_limiter.rb +60 -0
  84. data/lib/datadog/appsec/reactive/address_hash.rb +18 -0
  85. data/lib/datadog/appsec/reactive/engine.rb +44 -0
  86. data/lib/datadog/appsec/reactive/operation.rb +51 -0
  87. data/lib/datadog/appsec/reactive/subscriber.rb +18 -0
  88. data/lib/datadog/appsec.rb +23 -0
  89. data/lib/datadog/ci/configuration/components.rb +9 -8
  90. data/lib/datadog/ci/configuration/settings.rb +19 -3
  91. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +4 -2
  92. data/lib/datadog/ci/contrib/cucumber/ext.rb +2 -0
  93. data/lib/datadog/ci/contrib/cucumber/formatter.rb +4 -9
  94. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +2 -1
  95. data/lib/datadog/ci/contrib/cucumber/integration.rb +3 -2
  96. data/lib/datadog/ci/contrib/cucumber/patcher.rb +3 -2
  97. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +4 -2
  98. data/lib/datadog/ci/contrib/rspec/example.rb +4 -9
  99. data/lib/datadog/ci/contrib/rspec/ext.rb +2 -0
  100. data/lib/datadog/ci/contrib/rspec/integration.rb +3 -2
  101. data/lib/datadog/ci/contrib/rspec/patcher.rb +3 -2
  102. data/lib/datadog/ci/ext/app_types.rb +2 -1
  103. data/lib/datadog/ci/ext/environment.rb +128 -110
  104. data/lib/datadog/ci/ext/settings.rb +2 -1
  105. data/lib/datadog/ci/ext/test.rb +1 -0
  106. data/lib/datadog/ci/extensions.rb +5 -4
  107. data/lib/datadog/ci/flush.rb +38 -0
  108. data/lib/datadog/ci/test.rb +15 -13
  109. data/lib/datadog/ci.rb +4 -1
  110. data/lib/datadog/core/buffer/cruby.rb +55 -0
  111. data/lib/datadog/core/buffer/random.rb +134 -0
  112. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  113. data/lib/datadog/core/chunker.rb +35 -0
  114. data/lib/datadog/core/configuration/agent_settings_resolver.rb +365 -0
  115. data/lib/datadog/core/configuration/base.rb +89 -0
  116. data/lib/datadog/core/configuration/components.rb +426 -0
  117. data/lib/datadog/core/configuration/dependency_resolver.rb +28 -0
  118. data/lib/datadog/core/configuration/option.rb +69 -0
  119. data/lib/datadog/core/configuration/option_definition.rb +126 -0
  120. data/lib/datadog/core/configuration/option_definition_set.rb +22 -0
  121. data/lib/datadog/core/configuration/option_set.rb +10 -0
  122. data/lib/datadog/core/configuration/options.rb +118 -0
  123. data/lib/datadog/core/configuration/settings.rb +625 -0
  124. data/lib/datadog/core/configuration.rb +286 -0
  125. data/lib/datadog/core/diagnostics/environment_logger.rb +283 -0
  126. data/lib/datadog/core/diagnostics/ext.rb +41 -0
  127. data/lib/datadog/core/diagnostics/health.rb +37 -0
  128. data/lib/datadog/core/encoding.rb +76 -0
  129. data/lib/datadog/core/environment/cgroup.rb +4 -1
  130. data/lib/datadog/core/environment/class_count.rb +1 -0
  131. data/lib/datadog/core/environment/container.rb +3 -1
  132. data/lib/datadog/core/environment/ext.rb +28 -9
  133. data/lib/datadog/core/environment/gc.rb +1 -0
  134. data/lib/datadog/core/environment/identity.rb +11 -4
  135. data/lib/datadog/core/environment/platform.rb +40 -0
  136. data/lib/datadog/core/environment/socket.rb +9 -2
  137. data/lib/datadog/core/environment/thread_count.rb +1 -0
  138. data/lib/datadog/core/environment/variable_helpers.rb +28 -2
  139. data/lib/datadog/core/environment/vm_cache.rb +1 -0
  140. data/lib/datadog/core/error.rb +101 -0
  141. data/lib/datadog/core/extensions.rb +16 -0
  142. data/lib/datadog/core/git/ext.rb +35 -0
  143. data/lib/datadog/core/logger.rb +46 -0
  144. data/lib/datadog/core/logging/ext.rb +11 -0
  145. data/lib/datadog/core/metrics/client.rb +198 -0
  146. data/lib/datadog/core/metrics/ext.rb +20 -0
  147. data/lib/datadog/core/metrics/helpers.rb +25 -0
  148. data/lib/datadog/core/metrics/logging.rb +44 -0
  149. data/lib/datadog/core/metrics/metric.rb +14 -0
  150. data/lib/datadog/core/metrics/options.rb +50 -0
  151. data/lib/datadog/core/pin.rb +75 -0
  152. data/lib/datadog/core/runtime/ext.rb +28 -0
  153. data/lib/datadog/core/runtime/metrics.rb +126 -0
  154. data/lib/datadog/core/utils/compression.rb +32 -0
  155. data/lib/datadog/core/utils/forking.rb +63 -0
  156. data/lib/datadog/core/utils/object_set.rb +43 -0
  157. data/lib/datadog/core/utils/only_once.rb +44 -0
  158. data/lib/datadog/core/utils/safe_dup.rb +27 -0
  159. data/lib/datadog/core/utils/sequence.rb +21 -0
  160. data/lib/datadog/core/utils/string_table.rb +49 -0
  161. data/lib/datadog/core/utils/time.rb +54 -0
  162. data/lib/datadog/core/utils.rb +115 -0
  163. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +120 -0
  164. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +61 -0
  165. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +139 -0
  166. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +13 -0
  167. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +12 -0
  168. data/lib/datadog/core/vendor/multipart-post/multipart.rb +16 -0
  169. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +36 -0
  170. data/lib/datadog/core/worker.rb +24 -0
  171. data/lib/datadog/core/workers/async.rb +182 -0
  172. data/lib/datadog/core/workers/interval_loop.rb +119 -0
  173. data/lib/datadog/core/workers/polling.rb +59 -0
  174. data/lib/datadog/core/workers/queue.rb +44 -0
  175. data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
  176. data/lib/datadog/core.rb +80 -0
  177. data/lib/datadog/kit/enable_core_dumps.rb +50 -0
  178. data/lib/datadog/kit/identity.rb +63 -0
  179. data/lib/datadog/kit.rb +11 -0
  180. data/lib/datadog/opentracer/binary_propagator.rb +26 -0
  181. data/lib/datadog/opentracer/carrier.rb +9 -0
  182. data/lib/datadog/opentracer/distributed_headers.rb +58 -0
  183. data/lib/datadog/opentracer/global_tracer.rb +17 -0
  184. data/lib/datadog/opentracer/propagator.rb +26 -0
  185. data/lib/datadog/opentracer/rack_propagator.rb +72 -0
  186. data/lib/datadog/opentracer/scope.rb +18 -0
  187. data/lib/datadog/opentracer/scope_manager.rb +9 -0
  188. data/lib/datadog/opentracer/span.rb +101 -0
  189. data/lib/datadog/opentracer/span_context.rb +19 -0
  190. data/lib/datadog/opentracer/span_context_factory.rb +27 -0
  191. data/lib/datadog/opentracer/text_map_propagator.rb +87 -0
  192. data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
  193. data/lib/datadog/opentracer/thread_local_scope_manager.rb +66 -0
  194. data/lib/datadog/opentracer/tracer.rb +212 -0
  195. data/lib/datadog/opentracer.rb +24 -0
  196. data/lib/datadog/profiling/backtrace_location.rb +34 -0
  197. data/lib/datadog/profiling/buffer.rb +43 -0
  198. data/lib/datadog/profiling/collectors/code_provenance.rb +115 -0
  199. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +42 -0
  200. data/lib/datadog/profiling/collectors/old_stack.rb +298 -0
  201. data/lib/datadog/profiling/collectors/stack.rb +18 -0
  202. data/lib/datadog/profiling/encoding/profile.rb +43 -0
  203. data/lib/datadog/profiling/event.rb +15 -0
  204. data/lib/datadog/profiling/events/stack.rb +82 -0
  205. data/lib/datadog/profiling/exporter.rb +74 -0
  206. data/lib/datadog/profiling/ext/forking.rb +99 -0
  207. data/lib/datadog/profiling/ext.rb +44 -0
  208. data/lib/datadog/profiling/flush.rb +41 -0
  209. data/lib/datadog/profiling/http_transport.rb +131 -0
  210. data/lib/datadog/profiling/load_native_extension.rb +22 -0
  211. data/lib/datadog/profiling/native_extension.rb +41 -0
  212. data/lib/datadog/profiling/old_ext.rb +42 -0
  213. data/lib/datadog/profiling/old_recorder.rb +106 -0
  214. data/lib/datadog/profiling/pprof/builder.rb +127 -0
  215. data/lib/datadog/profiling/pprof/converter.rb +104 -0
  216. data/lib/datadog/profiling/pprof/message_set.rb +16 -0
  217. data/lib/datadog/profiling/pprof/payload.rb +20 -0
  218. data/lib/datadog/profiling/pprof/pprof_pb.rb +83 -0
  219. data/lib/datadog/profiling/pprof/stack_sample.rb +141 -0
  220. data/lib/datadog/profiling/pprof/string_table.rb +12 -0
  221. data/lib/datadog/profiling/pprof/template.rb +120 -0
  222. data/lib/datadog/profiling/preload.rb +5 -0
  223. data/lib/datadog/profiling/profiler.rb +34 -0
  224. data/lib/datadog/profiling/scheduler.rb +132 -0
  225. data/lib/datadog/profiling/stack_recorder.rb +33 -0
  226. data/lib/datadog/profiling/tag_builder.rb +48 -0
  227. data/lib/datadog/profiling/tasks/exec.rb +50 -0
  228. data/lib/datadog/profiling/tasks/help.rb +18 -0
  229. data/lib/datadog/profiling/tasks/setup.rb +93 -0
  230. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +45 -0
  231. data/lib/datadog/profiling/trace_identifiers/helper.rb +47 -0
  232. data/lib/datadog/profiling/transport/http/api/endpoint.rb +85 -0
  233. data/lib/datadog/profiling/transport/http/api/instance.rb +38 -0
  234. data/lib/datadog/profiling/transport/http/api/spec.rb +42 -0
  235. data/lib/datadog/profiling/transport/http/api.rb +45 -0
  236. data/lib/datadog/profiling/transport/http/builder.rb +30 -0
  237. data/lib/datadog/profiling/transport/http/client.rb +37 -0
  238. data/lib/datadog/profiling/transport/http/response.rb +21 -0
  239. data/lib/datadog/profiling/transport/http.rb +112 -0
  240. data/lib/datadog/profiling.rb +170 -0
  241. data/lib/datadog/tracing/analytics.rb +25 -0
  242. data/lib/datadog/tracing/buffer.rb +132 -0
  243. data/lib/datadog/tracing/configuration/ext.rb +51 -0
  244. data/lib/datadog/tracing/context.rb +68 -0
  245. data/lib/datadog/tracing/context_provider.rb +82 -0
  246. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +35 -0
  247. data/lib/datadog/tracing/contrib/action_cable/event.rb +72 -0
  248. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
  249. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
  250. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
  251. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  252. data/lib/datadog/tracing/contrib/action_cable/ext.rb +32 -0
  253. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +91 -0
  254. data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
  255. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  256. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +36 -0
  257. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  258. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
  259. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
  260. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  261. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +33 -0
  262. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
  263. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  264. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +160 -0
  265. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  266. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +36 -0
  267. data/lib/datadog/tracing/contrib/action_pack/ext.rb +22 -0
  268. data/lib/datadog/tracing/contrib/action_pack/integration.rb +50 -0
  269. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  270. data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
  271. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +36 -0
  272. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  273. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
  274. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
  275. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  276. data/lib/datadog/tracing/contrib/action_view/ext.rb +24 -0
  277. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
  278. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +91 -0
  279. data/lib/datadog/tracing/contrib/action_view/integration.rb +57 -0
  280. data/lib/datadog/tracing/contrib/action_view/patcher.rb +47 -0
  281. data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
  282. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +37 -0
  283. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  284. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
  285. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
  286. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
  287. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
  288. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
  289. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
  290. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  291. data/lib/datadog/tracing/contrib/active_job/ext.rb +39 -0
  292. data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
  293. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +26 -0
  294. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  295. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +33 -0
  296. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +69 -0
  297. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
  298. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
  299. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  300. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +24 -0
  301. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
  302. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +33 -0
  303. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
  304. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +138 -0
  305. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +39 -0
  306. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  307. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
  308. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +78 -0
  309. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  310. data/lib/datadog/tracing/contrib/active_record/ext.rb +29 -0
  311. data/lib/datadog/tracing/contrib/active_record/integration.rb +56 -0
  312. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  313. data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
  314. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +307 -0
  315. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +270 -0
  316. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +73 -0
  317. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  318. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +35 -0
  319. data/lib/datadog/tracing/contrib/active_support/ext.rb +31 -0
  320. data/lib/datadog/tracing/contrib/active_support/integration.rb +51 -0
  321. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  322. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  323. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +164 -0
  324. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  325. data/lib/datadog/tracing/contrib/analytics.rb +29 -0
  326. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  327. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +35 -0
  328. data/lib/datadog/tracing/contrib/aws/ext.rb +27 -0
  329. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +95 -0
  330. data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
  331. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +60 -0
  332. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  333. data/lib/datadog/tracing/contrib/aws/services.rb +123 -0
  334. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +23 -0
  335. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
  336. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
  337. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +27 -0
  338. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +43 -0
  339. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +33 -0
  340. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  341. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  342. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  343. data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
  344. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +35 -0
  345. data/lib/datadog/tracing/contrib/dalli/ext.rb +24 -0
  346. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +58 -0
  347. data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
  348. data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
  349. data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
  350. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +38 -0
  351. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +26 -0
  352. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
  353. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +31 -0
  354. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +101 -0
  355. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +36 -0
  356. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +26 -0
  357. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
  358. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +151 -0
  359. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +89 -0
  360. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +37 -0
  361. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +177 -0
  362. data/lib/datadog/tracing/contrib/ethon/ext.rb +24 -0
  363. data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
  364. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +96 -0
  365. data/lib/datadog/tracing/contrib/ethon/patcher.rb +31 -0
  366. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +38 -0
  367. data/lib/datadog/tracing/contrib/excon/ext.rb +21 -0
  368. data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
  369. data/lib/datadog/tracing/contrib/excon/middleware.rb +170 -0
  370. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  371. data/lib/datadog/tracing/contrib/extensions.rb +197 -0
  372. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +42 -0
  373. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  374. data/lib/datadog/tracing/contrib/faraday/ext.rb +21 -0
  375. data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
  376. data/lib/datadog/tracing/contrib/faraday/middleware.rb +93 -0
  377. data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
  378. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  379. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +42 -0
  380. data/lib/datadog/tracing/contrib/grape/endpoint.rb +253 -0
  381. data/lib/datadog/tracing/contrib/grape/ext.rb +28 -0
  382. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
  383. data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
  384. data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
  385. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +36 -0
  386. data/lib/datadog/tracing/contrib/graphql/ext.rb +19 -0
  387. data/lib/datadog/tracing/contrib/graphql/integration.rb +44 -0
  388. data/lib/datadog/tracing/contrib/graphql/patcher.rb +91 -0
  389. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +38 -0
  390. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +84 -0
  391. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +90 -0
  392. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +108 -0
  393. data/lib/datadog/tracing/contrib/grpc/ext.rb +23 -0
  394. data/lib/datadog/tracing/contrib/grpc/integration.rb +43 -0
  395. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  396. data/lib/datadog/tracing/contrib/grpc/patcher.rb +37 -0
  397. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +44 -0
  398. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +37 -0
  399. data/lib/datadog/tracing/contrib/http/ext.rb +21 -0
  400. data/lib/datadog/tracing/contrib/http/instrumentation.rb +139 -0
  401. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  402. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  403. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  404. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +37 -0
  405. data/lib/datadog/tracing/contrib/httpclient/ext.rb +21 -0
  406. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +117 -0
  407. data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
  408. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
  409. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +37 -0
  410. data/lib/datadog/tracing/contrib/httprb/ext.rb +21 -0
  411. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +128 -0
  412. data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
  413. data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
  414. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  415. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +35 -0
  416. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +18 -0
  417. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  418. data/lib/datadog/tracing/contrib/kafka/event.rb +52 -0
  419. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
  420. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
  421. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
  422. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
  423. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
  424. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
  425. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
  426. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +40 -0
  427. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +43 -0
  428. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  429. data/lib/datadog/tracing/contrib/kafka/ext.rb +52 -0
  430. data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
  431. data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
  432. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +23 -0
  433. data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
  434. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +47 -0
  435. data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
  436. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  437. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +38 -0
  438. data/lib/datadog/tracing/contrib/mongodb/ext.rb +27 -0
  439. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  440. data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
  441. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
  442. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  443. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +121 -0
  444. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +35 -0
  445. data/lib/datadog/tracing/contrib/mysql2/ext.rb +22 -0
  446. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +62 -0
  447. data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
  448. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  449. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  450. data/lib/datadog/tracing/contrib/patcher.rb +74 -0
  451. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +35 -0
  452. data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
  453. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +129 -0
  454. data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
  455. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  456. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +35 -0
  457. data/lib/datadog/tracing/contrib/presto/ext.rb +32 -0
  458. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +125 -0
  459. data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
  460. data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
  461. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +40 -0
  462. data/lib/datadog/tracing/contrib/qless/ext.rb +26 -0
  463. data/lib/datadog/tracing/contrib/qless/integration.rb +43 -0
  464. data/lib/datadog/tracing/contrib/qless/patcher.rb +38 -0
  465. data/lib/datadog/tracing/contrib/qless/qless_job.rb +75 -0
  466. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +32 -0
  467. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +49 -0
  468. data/lib/datadog/tracing/contrib/que/ext.rb +34 -0
  469. data/lib/datadog/tracing/contrib/que/integration.rb +46 -0
  470. data/lib/datadog/tracing/contrib/que/patcher.rb +28 -0
  471. data/lib/datadog/tracing/contrib/que/tracer.rb +61 -0
  472. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +35 -0
  473. data/lib/datadog/tracing/contrib/racecar/event.rb +79 -0
  474. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +35 -0
  475. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
  476. data/lib/datadog/tracing/contrib/racecar/events/message.rb +35 -0
  477. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  478. data/lib/datadog/tracing/contrib/racecar/ext.rb +31 -0
  479. data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
  480. data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
  481. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +51 -0
  482. data/lib/datadog/tracing/contrib/rack/ext.rb +25 -0
  483. data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
  484. data/lib/datadog/tracing/contrib/rack/middlewares.rb +255 -0
  485. data/lib/datadog/tracing/contrib/rack/patcher.rb +109 -0
  486. data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
  487. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +12 -0
  488. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +74 -0
  489. data/lib/datadog/tracing/contrib/rails/ext.rb +19 -0
  490. data/lib/datadog/tracing/contrib/rails/framework.rb +153 -0
  491. data/lib/datadog/tracing/contrib/rails/integration.rb +49 -0
  492. data/lib/datadog/tracing/contrib/rails/log_injection.rb +34 -0
  493. data/lib/datadog/tracing/contrib/rails/middlewares.rb +47 -0
  494. data/lib/datadog/tracing/contrib/rails/patcher.rb +121 -0
  495. data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
  496. data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
  497. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +36 -0
  498. data/lib/datadog/tracing/contrib/rake/ext.rb +26 -0
  499. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +98 -0
  500. data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
  501. data/lib/datadog/tracing/contrib/rake/patcher.rb +34 -0
  502. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
  503. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +40 -0
  504. data/lib/datadog/tracing/contrib/redis/ext.rb +26 -0
  505. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +78 -0
  506. data/lib/datadog/tracing/contrib/redis/integration.rb +47 -0
  507. data/lib/datadog/tracing/contrib/redis/patcher.rb +35 -0
  508. data/lib/datadog/tracing/contrib/redis/quantize.rb +79 -0
  509. data/lib/datadog/tracing/contrib/redis/tags.rb +54 -0
  510. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +162 -0
  511. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  512. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  513. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +37 -0
  514. data/lib/datadog/tracing/contrib/resque/ext.rb +21 -0
  515. data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
  516. data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
  517. data/lib/datadog/tracing/contrib/resque/resque_job.rb +103 -0
  518. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +37 -0
  519. data/lib/datadog/tracing/contrib/rest_client/ext.rb +21 -0
  520. data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
  521. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +29 -0
  522. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +105 -0
  523. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +23 -0
  524. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
  525. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +51 -0
  526. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
  527. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  528. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +33 -0
  529. data/lib/datadog/tracing/contrib/sequel/database.rb +60 -0
  530. data/lib/datadog/tracing/contrib/sequel/dataset.rb +65 -0
  531. data/lib/datadog/tracing/contrib/sequel/ext.rb +22 -0
  532. data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
  533. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  534. data/lib/datadog/tracing/contrib/sequel/utils.rb +87 -0
  535. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +38 -0
  536. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +25 -0
  537. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
  538. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  539. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +61 -0
  540. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +53 -0
  541. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +44 -0
  542. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +38 -0
  543. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +53 -0
  544. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +71 -0
  545. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +34 -0
  546. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +34 -0
  547. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +33 -0
  548. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +98 -0
  549. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +44 -0
  550. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +43 -0
  551. data/lib/datadog/tracing/contrib/sinatra/env.rb +66 -0
  552. data/lib/datadog/tracing/contrib/sinatra/ext.rb +32 -0
  553. data/lib/datadog/tracing/contrib/sinatra/framework.rb +118 -0
  554. data/lib/datadog/tracing/contrib/sinatra/headers.rb +35 -0
  555. data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
  556. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +76 -0
  557. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +159 -0
  558. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +123 -0
  559. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +38 -0
  560. data/lib/datadog/tracing/contrib/sneakers/ext.rb +26 -0
  561. data/lib/datadog/tracing/contrib/sneakers/integration.rb +46 -0
  562. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +29 -0
  563. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +58 -0
  564. data/lib/datadog/tracing/contrib/status_code_matcher.rb +75 -0
  565. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +35 -0
  566. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  567. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +27 -0
  568. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +105 -0
  569. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
  570. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +37 -0
  571. data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
  572. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
  573. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +99 -0
  574. data/lib/datadog/tracing/contrib.rb +77 -0
  575. data/lib/datadog/tracing/correlation.rb +100 -0
  576. data/lib/datadog/tracing/distributed/headers/b3.rb +55 -0
  577. data/lib/datadog/tracing/distributed/headers/b3_single.rb +67 -0
  578. data/lib/datadog/tracing/distributed/headers/datadog.rb +52 -0
  579. data/lib/datadog/tracing/distributed/headers/ext.rb +31 -0
  580. data/lib/datadog/tracing/distributed/headers/parser.rb +37 -0
  581. data/lib/datadog/tracing/distributed/helpers.rb +78 -0
  582. data/lib/datadog/tracing/distributed/metadata/b3.rb +55 -0
  583. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +66 -0
  584. data/lib/datadog/tracing/distributed/metadata/datadog.rb +73 -0
  585. data/lib/datadog/tracing/distributed/metadata/parser.rb +34 -0
  586. data/lib/datadog/tracing/event.rb +78 -0
  587. data/lib/datadog/tracing/flush.rb +74 -0
  588. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  589. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  590. data/lib/datadog/tracing/metadata/ext.rb +176 -0
  591. data/lib/datadog/tracing/metadata/tagging.rb +116 -0
  592. data/lib/datadog/tracing/metadata.rb +20 -0
  593. data/lib/datadog/tracing/pipeline/span_filter.rb +42 -0
  594. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  595. data/lib/datadog/tracing/pipeline.rb +65 -0
  596. data/lib/datadog/tracing/propagation/grpc.rb +98 -0
  597. data/lib/datadog/tracing/propagation/http.rb +109 -0
  598. data/lib/datadog/tracing/runtime/metrics.rb +19 -0
  599. data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
  600. data/lib/datadog/tracing/sampling/ext.rb +27 -0
  601. data/lib/datadog/tracing/sampling/matcher.rb +68 -0
  602. data/lib/datadog/tracing/sampling/priority_sampler.rb +112 -0
  603. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +97 -0
  604. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +41 -0
  605. data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
  606. data/lib/datadog/tracing/sampling/rate_sampler.rb +55 -0
  607. data/lib/datadog/tracing/sampling/rule.rb +76 -0
  608. data/lib/datadog/tracing/sampling/rule_sampler.rb +131 -0
  609. data/lib/datadog/tracing/sampling/sampler.rb +44 -0
  610. data/lib/datadog/tracing/sampling/span/matcher.rb +80 -0
  611. data/lib/datadog/tracing/span.rb +232 -0
  612. data/lib/datadog/tracing/span_operation.rb +521 -0
  613. data/lib/datadog/tracing/sync_writer.rb +69 -0
  614. data/lib/datadog/tracing/trace_digest.rb +60 -0
  615. data/lib/datadog/tracing/trace_operation.rb +431 -0
  616. data/lib/datadog/tracing/trace_segment.rb +207 -0
  617. data/lib/datadog/tracing/tracer.rb +505 -0
  618. data/lib/datadog/tracing/workers/trace_writer.rb +195 -0
  619. data/lib/datadog/tracing/workers.rb +125 -0
  620. data/lib/datadog/tracing/writer.rb +180 -0
  621. data/lib/datadog/tracing.rb +142 -0
  622. data/lib/ddtrace/auto_instrument.rb +6 -2
  623. data/lib/ddtrace/auto_instrument_base.rb +1 -0
  624. data/lib/ddtrace/profiling/preload.rb +2 -2
  625. data/lib/ddtrace/transport/ext.rb +35 -0
  626. data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
  627. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  628. data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
  629. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -2
  630. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  631. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  632. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  633. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  634. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  635. data/lib/ddtrace/transport/http/api.rb +5 -11
  636. data/lib/ddtrace/transport/http/builder.rb +3 -2
  637. data/lib/ddtrace/transport/http/client.rb +3 -1
  638. data/lib/ddtrace/transport/http/env.rb +1 -0
  639. data/lib/ddtrace/transport/http/response.rb +35 -4
  640. data/lib/ddtrace/transport/http/statistics.rb +1 -0
  641. data/lib/ddtrace/transport/http/traces.rb +3 -0
  642. data/lib/ddtrace/transport/http.rb +33 -28
  643. data/lib/ddtrace/transport/io/client.rb +4 -1
  644. data/lib/ddtrace/transport/io/response.rb +1 -0
  645. data/lib/ddtrace/transport/io/traces.rb +2 -1
  646. data/lib/ddtrace/transport/io.rb +3 -2
  647. data/lib/ddtrace/transport/parcel.rb +2 -0
  648. data/lib/ddtrace/transport/request.rb +1 -0
  649. data/lib/ddtrace/transport/response.rb +1 -0
  650. data/lib/ddtrace/transport/serializable_trace.rb +118 -0
  651. data/lib/ddtrace/transport/statistics.rb +6 -4
  652. data/lib/ddtrace/transport/trace_formatter.rb +187 -0
  653. data/lib/ddtrace/transport/traces.rb +15 -5
  654. data/lib/ddtrace/version.rb +15 -13
  655. data/lib/ddtrace.rb +9 -48
  656. metadata +615 -490
  657. data/.yardopts +0 -5
  658. data/lib/datadog/ci/context_flush.rb +0 -29
  659. data/lib/datadog/contrib.rb +0 -71
  660. data/lib/ddtrace/analytics.rb +0 -39
  661. data/lib/ddtrace/buffer.rb +0 -340
  662. data/lib/ddtrace/chunker.rb +0 -35
  663. data/lib/ddtrace/configuration/agent_settings_resolver.rb +0 -309
  664. data/lib/ddtrace/configuration/base.rb +0 -82
  665. data/lib/ddtrace/configuration/components.rb +0 -292
  666. data/lib/ddtrace/configuration/dependency_resolver.rb +0 -25
  667. data/lib/ddtrace/configuration/option.rb +0 -65
  668. data/lib/ddtrace/configuration/option_definition.rb +0 -122
  669. data/lib/ddtrace/configuration/option_definition_set.rb +0 -19
  670. data/lib/ddtrace/configuration/option_set.rb +0 -7
  671. data/lib/ddtrace/configuration/options.rb +0 -112
  672. data/lib/ddtrace/configuration/pin_setup.rb +0 -32
  673. data/lib/ddtrace/configuration/settings.rb +0 -413
  674. data/lib/ddtrace/configuration.rb +0 -195
  675. data/lib/ddtrace/context.rb +0 -334
  676. data/lib/ddtrace/context_flush.rb +0 -82
  677. data/lib/ddtrace/context_provider.rb +0 -62
  678. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -31
  679. data/lib/ddtrace/contrib/action_cable/event.rb +0 -67
  680. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -50
  681. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -56
  682. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -51
  683. data/lib/ddtrace/contrib/action_cable/events.rb +0 -34
  684. data/lib/ddtrace/contrib/action_cable/ext.rb +0 -27
  685. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -78
  686. data/lib/ddtrace/contrib/action_cable/integration.rb +0 -46
  687. data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -29
  688. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +0 -32
  689. data/lib/ddtrace/contrib/action_mailer/event.rb +0 -50
  690. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +0 -54
  691. data/lib/ddtrace/contrib/action_mailer/events/process.rb +0 -41
  692. data/lib/ddtrace/contrib/action_mailer/events.rb +0 -31
  693. data/lib/ddtrace/contrib/action_mailer/ext.rb +0 -32
  694. data/lib/ddtrace/contrib/action_mailer/integration.rb +0 -45
  695. data/lib/ddtrace/contrib/action_mailer/patcher.rb +0 -27
  696. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -157
  697. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -26
  698. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -33
  699. data/lib/ddtrace/contrib/action_pack/ext.rb +0 -20
  700. data/lib/ddtrace/contrib/action_pack/integration.rb +0 -46
  701. data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -24
  702. data/lib/ddtrace/contrib/action_pack/utils.rb +0 -37
  703. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -32
  704. data/lib/ddtrace/contrib/action_view/event.rb +0 -36
  705. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -47
  706. data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -50
  707. data/lib/ddtrace/contrib/action_view/events.rb +0 -31
  708. data/lib/ddtrace/contrib/action_view/ext.rb +0 -21
  709. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -75
  710. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -168
  711. data/lib/ddtrace/contrib/action_view/integration.rb +0 -53
  712. data/lib/ddtrace/contrib/action_view/patcher.rb +0 -48
  713. data/lib/ddtrace/contrib/action_view/utils.rb +0 -33
  714. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +0 -33
  715. data/lib/ddtrace/contrib/active_job/event.rb +0 -54
  716. data/lib/ddtrace/contrib/active_job/events/discard.rb +0 -46
  717. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +0 -45
  718. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +0 -45
  719. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +0 -47
  720. data/lib/ddtrace/contrib/active_job/events/perform.rb +0 -45
  721. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +0 -46
  722. data/lib/ddtrace/contrib/active_job/events.rb +0 -39
  723. data/lib/ddtrace/contrib/active_job/ext.rb +0 -32
  724. data/lib/ddtrace/contrib/active_job/integration.rb +0 -46
  725. data/lib/ddtrace/contrib/active_job/log_injection.rb +0 -21
  726. data/lib/ddtrace/contrib/active_job/patcher.rb +0 -33
  727. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -31
  728. data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -69
  729. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -33
  730. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -36
  731. data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -31
  732. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -21
  733. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -41
  734. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -30
  735. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +0 -31
  736. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -135
  737. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -36
  738. data/lib/ddtrace/contrib/active_record/event.rb +0 -31
  739. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -61
  740. data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -69
  741. data/lib/ddtrace/contrib/active_record/events.rb +0 -31
  742. data/lib/ddtrace/contrib/active_record/ext.rb +0 -25
  743. data/lib/ddtrace/contrib/active_record/integration.rb +0 -54
  744. data/lib/ddtrace/contrib/active_record/patcher.rb +0 -24
  745. data/lib/ddtrace/contrib/active_record/utils.rb +0 -124
  746. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -259
  747. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -70
  748. data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -44
  749. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -31
  750. data/lib/ddtrace/contrib/active_support/ext.rb +0 -28
  751. data/lib/ddtrace/contrib/active_support/integration.rb +0 -47
  752. data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -76
  753. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -68
  754. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -164
  755. data/lib/ddtrace/contrib/active_support/patcher.rb +0 -24
  756. data/lib/ddtrace/contrib/analytics.rb +0 -25
  757. data/lib/ddtrace/contrib/auto_instrument.rb +0 -48
  758. data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -31
  759. data/lib/ddtrace/contrib/aws/ext.rb +0 -24
  760. data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -91
  761. data/lib/ddtrace/contrib/aws/integration.rb +0 -43
  762. data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -57
  763. data/lib/ddtrace/contrib/aws/patcher.rb +0 -54
  764. data/lib/ddtrace/contrib/aws/services.rb +0 -119
  765. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -21
  766. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -42
  767. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -13
  768. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -24
  769. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -39
  770. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -30
  771. data/lib/ddtrace/contrib/configurable.rb +0 -103
  772. data/lib/ddtrace/contrib/configuration/resolver.rb +0 -82
  773. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -40
  774. data/lib/ddtrace/contrib/configuration/settings.rb +0 -56
  775. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -31
  776. data/lib/ddtrace/contrib/dalli/ext.rb +0 -21
  777. data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -55
  778. data/lib/ddtrace/contrib/dalli/integration.rb +0 -39
  779. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -26
  780. data/lib/ddtrace/contrib/dalli/quantize.rb +0 -23
  781. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -33
  782. data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -24
  783. data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -39
  784. data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -29
  785. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -85
  786. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -32
  787. data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -23
  788. data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -40
  789. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -123
  790. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -84
  791. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -33
  792. data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -152
  793. data/lib/ddtrace/contrib/ethon/ext.rb +0 -20
  794. data/lib/ddtrace/contrib/ethon/integration.rb +0 -44
  795. data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -85
  796. data/lib/ddtrace/contrib/ethon/patcher.rb +0 -27
  797. data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -34
  798. data/lib/ddtrace/contrib/excon/ext.rb +0 -18
  799. data/lib/ddtrace/contrib/excon/integration.rb +0 -44
  800. data/lib/ddtrace/contrib/excon/middleware.rb +0 -164
  801. data/lib/ddtrace/contrib/excon/patcher.rb +0 -28
  802. data/lib/ddtrace/contrib/extensions.rb +0 -169
  803. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -39
  804. data/lib/ddtrace/contrib/faraday/connection.rb +0 -19
  805. data/lib/ddtrace/contrib/faraday/ext.rb +0 -18
  806. data/lib/ddtrace/contrib/faraday/integration.rb +0 -44
  807. data/lib/ddtrace/contrib/faraday/middleware.rb +0 -86
  808. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -54
  809. data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -19
  810. data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -39
  811. data/lib/ddtrace/contrib/grape/endpoint.rb +0 -246
  812. data/lib/ddtrace/contrib/grape/ext.rb +0 -24
  813. data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -34
  814. data/lib/ddtrace/contrib/grape/integration.rb +0 -40
  815. data/lib/ddtrace/contrib/grape/patcher.rb +0 -32
  816. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -33
  817. data/lib/ddtrace/contrib/graphql/ext.rb +0 -17
  818. data/lib/ddtrace/contrib/graphql/integration.rb +0 -40
  819. data/lib/ddtrace/contrib/graphql/patcher.rb +0 -61
  820. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -32
  821. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -59
  822. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -80
  823. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -79
  824. data/lib/ddtrace/contrib/grpc/ext.rb +0 -19
  825. data/lib/ddtrace/contrib/grpc/integration.rb +0 -39
  826. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -50
  827. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -34
  828. data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -38
  829. data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -33
  830. data/lib/ddtrace/contrib/http/ext.rb +0 -18
  831. data/lib/ddtrace/contrib/http/instrumentation.rb +0 -180
  832. data/lib/ddtrace/contrib/http/integration.rb +0 -46
  833. data/lib/ddtrace/contrib/http/patcher.rb +0 -27
  834. data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -11
  835. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +0 -33
  836. data/lib/ddtrace/contrib/httpclient/ext.rb +0 -18
  837. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +0 -148
  838. data/lib/ddtrace/contrib/httpclient/integration.rb +0 -44
  839. data/lib/ddtrace/contrib/httpclient/patcher.rb +0 -39
  840. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +0 -33
  841. data/lib/ddtrace/contrib/httprb/ext.rb +0 -18
  842. data/lib/ddtrace/contrib/httprb/instrumentation.rb +0 -158
  843. data/lib/ddtrace/contrib/httprb/integration.rb +0 -44
  844. data/lib/ddtrace/contrib/httprb/patcher.rb +0 -39
  845. data/lib/ddtrace/contrib/integration.rb +0 -17
  846. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +0 -31
  847. data/lib/ddtrace/contrib/kafka/consumer_event.rb +0 -15
  848. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +0 -15
  849. data/lib/ddtrace/contrib/kafka/event.rb +0 -52
  850. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +0 -35
  851. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +0 -42
  852. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +0 -40
  853. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +0 -40
  854. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +0 -30
  855. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +0 -30
  856. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +0 -30
  857. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +0 -33
  858. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +0 -36
  859. data/lib/ddtrace/contrib/kafka/events.rb +0 -45
  860. data/lib/ddtrace/contrib/kafka/ext.rb +0 -42
  861. data/lib/ddtrace/contrib/kafka/integration.rb +0 -40
  862. data/lib/ddtrace/contrib/kafka/patcher.rb +0 -27
  863. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +0 -19
  864. data/lib/ddtrace/contrib/lograge/ext.rb +0 -11
  865. data/lib/ddtrace/contrib/lograge/instrumentation.rb +0 -39
  866. data/lib/ddtrace/contrib/lograge/integration.rb +0 -46
  867. data/lib/ddtrace/contrib/lograge/patcher.rb +0 -26
  868. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -34
  869. data/lib/ddtrace/contrib/mongodb/ext.rb +0 -24
  870. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -70
  871. data/lib/ddtrace/contrib/mongodb/integration.rb +0 -44
  872. data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -69
  873. data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -32
  874. data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -112
  875. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -31
  876. data/lib/ddtrace/contrib/mysql2/ext.rb +0 -19
  877. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -65
  878. data/lib/ddtrace/contrib/mysql2/integration.rb +0 -39
  879. data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -28
  880. data/lib/ddtrace/contrib/patchable.rb +0 -71
  881. data/lib/ddtrace/contrib/patcher.rb +0 -66
  882. data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -31
  883. data/lib/ddtrace/contrib/presto/ext.rb +0 -29
  884. data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -111
  885. data/lib/ddtrace/contrib/presto/integration.rb +0 -39
  886. data/lib/ddtrace/contrib/presto/patcher.rb +0 -34
  887. data/lib/ddtrace/contrib/qless/configuration/settings.rb +0 -36
  888. data/lib/ddtrace/contrib/qless/ext.rb +0 -21
  889. data/lib/ddtrace/contrib/qless/integration.rb +0 -39
  890. data/lib/ddtrace/contrib/qless/patcher.rb +0 -35
  891. data/lib/ddtrace/contrib/qless/qless_job.rb +0 -74
  892. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +0 -34
  893. data/lib/ddtrace/contrib/que/configuration/settings.rb +0 -44
  894. data/lib/ddtrace/contrib/que/ext.rb +0 -31
  895. data/lib/ddtrace/contrib/que/integration.rb +0 -43
  896. data/lib/ddtrace/contrib/que/patcher.rb +0 -25
  897. data/lib/ddtrace/contrib/que/tracer.rb +0 -58
  898. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -31
  899. data/lib/ddtrace/contrib/racecar/event.rb +0 -77
  900. data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -28
  901. data/lib/ddtrace/contrib/racecar/events/consume.rb +0 -28
  902. data/lib/ddtrace/contrib/racecar/events/message.rb +0 -28
  903. data/lib/ddtrace/contrib/racecar/events.rb +0 -33
  904. data/lib/ddtrace/contrib/racecar/ext.rb +0 -26
  905. data/lib/ddtrace/contrib/racecar/integration.rb +0 -40
  906. data/lib/ddtrace/contrib/racecar/patcher.rb +0 -27
  907. data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -47
  908. data/lib/ddtrace/contrib/rack/ext.rb +0 -22
  909. data/lib/ddtrace/contrib/rack/integration.rb +0 -46
  910. data/lib/ddtrace/contrib/rack/middlewares.rb +0 -288
  911. data/lib/ddtrace/contrib/rack/patcher.rb +0 -106
  912. data/lib/ddtrace/contrib/rack/request_queue.rb +0 -45
  913. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +0 -10
  914. data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -101
  915. data/lib/ddtrace/contrib/rails/ext.rb +0 -18
  916. data/lib/ddtrace/contrib/rails/framework.rb +0 -172
  917. data/lib/ddtrace/contrib/rails/integration.rb +0 -45
  918. data/lib/ddtrace/contrib/rails/log_injection.rb +0 -42
  919. data/lib/ddtrace/contrib/rails/middlewares.rb +0 -44
  920. data/lib/ddtrace/contrib/rails/patcher.rb +0 -119
  921. data/lib/ddtrace/contrib/rails/railtie.rb +0 -18
  922. data/lib/ddtrace/contrib/rails/utils.rb +0 -25
  923. data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -32
  924. data/lib/ddtrace/contrib/rake/ext.rb +0 -22
  925. data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -91
  926. data/lib/ddtrace/contrib/rake/integration.rb +0 -39
  927. data/lib/ddtrace/contrib/rake/patcher.rb +0 -31
  928. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -46
  929. data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -36
  930. data/lib/ddtrace/contrib/redis/ext.rb +0 -23
  931. data/lib/ddtrace/contrib/redis/instrumentation.rb +0 -90
  932. data/lib/ddtrace/contrib/redis/integration.rb +0 -43
  933. data/lib/ddtrace/contrib/redis/patcher.rb +0 -33
  934. data/lib/ddtrace/contrib/redis/quantize.rb +0 -76
  935. data/lib/ddtrace/contrib/redis/tags.rb +0 -47
  936. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -159
  937. data/lib/ddtrace/contrib/registerable.rb +0 -33
  938. data/lib/ddtrace/contrib/registry.rb +0 -43
  939. data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -49
  940. data/lib/ddtrace/contrib/resque/ext.rb +0 -18
  941. data/lib/ddtrace/contrib/resque/integration.rb +0 -44
  942. data/lib/ddtrace/contrib/resque/patcher.rb +0 -30
  943. data/lib/ddtrace/contrib/resque/resque_job.rb +0 -104
  944. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -32
  945. data/lib/ddtrace/contrib/rest_client/ext.rb +0 -18
  946. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -39
  947. data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -25
  948. data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -92
  949. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +0 -19
  950. data/lib/ddtrace/contrib/semantic_logger/ext.rb +0 -11
  951. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +0 -43
  952. data/lib/ddtrace/contrib/semantic_logger/integration.rb +0 -48
  953. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +0 -26
  954. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -29
  955. data/lib/ddtrace/contrib/sequel/database.rb +0 -64
  956. data/lib/ddtrace/contrib/sequel/dataset.rb +0 -64
  957. data/lib/ddtrace/contrib/sequel/ext.rb +0 -20
  958. data/lib/ddtrace/contrib/sequel/integration.rb +0 -39
  959. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -34
  960. data/lib/ddtrace/contrib/sequel/utils.rb +0 -75
  961. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -32
  962. data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -22
  963. data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -40
  964. data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -25
  965. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -56
  966. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -44
  967. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -38
  968. data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -31
  969. data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -49
  970. data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -68
  971. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +0 -30
  972. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +0 -30
  973. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +0 -29
  974. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -66
  975. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -45
  976. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -40
  977. data/lib/ddtrace/contrib/sinatra/env.rb +0 -59
  978. data/lib/ddtrace/contrib/sinatra/ext.rb +0 -28
  979. data/lib/ddtrace/contrib/sinatra/headers.rb +0 -30
  980. data/lib/ddtrace/contrib/sinatra/integration.rb +0 -39
  981. data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -30
  982. data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -150
  983. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -112
  984. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +0 -34
  985. data/lib/ddtrace/contrib/sneakers/ext.rb +0 -23
  986. data/lib/ddtrace/contrib/sneakers/integration.rb +0 -42
  987. data/lib/ddtrace/contrib/sneakers/patcher.rb +0 -25
  988. data/lib/ddtrace/contrib/sneakers/tracer.rb +0 -54
  989. data/lib/ddtrace/contrib/status_code_matcher.rb +0 -70
  990. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -31
  991. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -25
  992. data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -22
  993. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -89
  994. data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -39
  995. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -44
  996. data/lib/ddtrace/correlation.rb +0 -40
  997. data/lib/ddtrace/diagnostics/environment_logger.rb +0 -280
  998. data/lib/ddtrace/diagnostics/health.rb +0 -34
  999. data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -45
  1000. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -57
  1001. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -43
  1002. data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -72
  1003. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -44
  1004. data/lib/ddtrace/encoding.rb +0 -72
  1005. data/lib/ddtrace/error.rb +0 -97
  1006. data/lib/ddtrace/event.rb +0 -53
  1007. data/lib/ddtrace/ext/analytics.rb +0 -13
  1008. data/lib/ddtrace/ext/app_types.rb +0 -12
  1009. data/lib/ddtrace/ext/correlation.rb +0 -12
  1010. data/lib/ddtrace/ext/diagnostics.rb +0 -37
  1011. data/lib/ddtrace/ext/distributed.rb +0 -40
  1012. data/lib/ddtrace/ext/environment.rb +0 -24
  1013. data/lib/ddtrace/ext/errors.rb +0 -11
  1014. data/lib/ddtrace/ext/forced_tracing.rb +0 -26
  1015. data/lib/ddtrace/ext/git.rb +0 -32
  1016. data/lib/ddtrace/ext/http.rb +0 -47
  1017. data/lib/ddtrace/ext/integration.rb +0 -9
  1018. data/lib/ddtrace/ext/manual_tracing.rb +0 -10
  1019. data/lib/ddtrace/ext/metrics.rb +0 -16
  1020. data/lib/ddtrace/ext/net.rb +0 -11
  1021. data/lib/ddtrace/ext/priority.rb +0 -19
  1022. data/lib/ddtrace/ext/profiling.rb +0 -53
  1023. data/lib/ddtrace/ext/runtime.rb +0 -25
  1024. data/lib/ddtrace/ext/sampling.rb +0 -17
  1025. data/lib/ddtrace/ext/sql.rb +0 -9
  1026. data/lib/ddtrace/ext/test.rb +0 -9
  1027. data/lib/ddtrace/ext/transport.rb +0 -32
  1028. data/lib/ddtrace/forced_tracing.rb +0 -39
  1029. data/lib/ddtrace/logger.rb +0 -41
  1030. data/lib/ddtrace/metrics.rb +0 -282
  1031. data/lib/ddtrace/opentelemetry/extensions.rb +0 -14
  1032. data/lib/ddtrace/opentelemetry/span.rb +0 -34
  1033. data/lib/ddtrace/opentracer/binary_propagator.rb +0 -25
  1034. data/lib/ddtrace/opentracer/carrier.rb +0 -7
  1035. data/lib/ddtrace/opentracer/distributed_headers.rb +0 -56
  1036. data/lib/ddtrace/opentracer/global_tracer.rb +0 -16
  1037. data/lib/ddtrace/opentracer/propagator.rb +0 -23
  1038. data/lib/ddtrace/opentracer/rack_propagator.rb +0 -61
  1039. data/lib/ddtrace/opentracer/scope.rb +0 -16
  1040. data/lib/ddtrace/opentracer/scope_manager.rb +0 -7
  1041. data/lib/ddtrace/opentracer/span.rb +0 -95
  1042. data/lib/ddtrace/opentracer/span_context.rb +0 -15
  1043. data/lib/ddtrace/opentracer/span_context_factory.rb +0 -24
  1044. data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -76
  1045. data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -32
  1046. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -41
  1047. data/lib/ddtrace/opentracer/tracer.rb +0 -209
  1048. data/lib/ddtrace/opentracer.rb +0 -22
  1049. data/lib/ddtrace/patcher.rb +0 -69
  1050. data/lib/ddtrace/pin.rb +0 -86
  1051. data/lib/ddtrace/pipeline/span_filter.rb +0 -39
  1052. data/lib/ddtrace/pipeline/span_processor.rb +0 -21
  1053. data/lib/ddtrace/pipeline.rb +0 -47
  1054. data/lib/ddtrace/profiling/backtrace_location.rb +0 -33
  1055. data/lib/ddtrace/profiling/buffer.rb +0 -42
  1056. data/lib/ddtrace/profiling/collectors/stack.rb +0 -297
  1057. data/lib/ddtrace/profiling/encoding/profile.rb +0 -46
  1058. data/lib/ddtrace/profiling/event.rb +0 -14
  1059. data/lib/ddtrace/profiling/events/stack.rb +0 -81
  1060. data/lib/ddtrace/profiling/exporter.rb +0 -24
  1061. data/lib/ddtrace/profiling/ext/forking.rb +0 -98
  1062. data/lib/ddtrace/profiling/flush.rb +0 -44
  1063. data/lib/ddtrace/profiling/native_extension.rb +0 -40
  1064. data/lib/ddtrace/profiling/pprof/builder.rb +0 -126
  1065. data/lib/ddtrace/profiling/pprof/converter.rb +0 -103
  1066. data/lib/ddtrace/profiling/pprof/message_set.rb +0 -15
  1067. data/lib/ddtrace/profiling/pprof/payload.rb +0 -19
  1068. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +0 -82
  1069. data/lib/ddtrace/profiling/pprof/stack_sample.rb +0 -140
  1070. data/lib/ddtrace/profiling/pprof/string_table.rb +0 -11
  1071. data/lib/ddtrace/profiling/pprof/template.rb +0 -119
  1072. data/lib/ddtrace/profiling/profiler.rb +0 -31
  1073. data/lib/ddtrace/profiling/recorder.rb +0 -96
  1074. data/lib/ddtrace/profiling/scheduler.rb +0 -150
  1075. data/lib/ddtrace/profiling/tasks/setup.rb +0 -90
  1076. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +0 -42
  1077. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +0 -46
  1078. data/lib/ddtrace/profiling/transport/client.rb +0 -15
  1079. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +0 -94
  1080. data/lib/ddtrace/profiling/transport/http/api/instance.rb +0 -37
  1081. data/lib/ddtrace/profiling/transport/http/api/spec.rb +0 -41
  1082. data/lib/ddtrace/profiling/transport/http/api.rb +0 -44
  1083. data/lib/ddtrace/profiling/transport/http/builder.rb +0 -29
  1084. data/lib/ddtrace/profiling/transport/http/client.rb +0 -34
  1085. data/lib/ddtrace/profiling/transport/http/response.rb +0 -22
  1086. data/lib/ddtrace/profiling/transport/http.rb +0 -111
  1087. data/lib/ddtrace/profiling/transport/io/client.rb +0 -28
  1088. data/lib/ddtrace/profiling/transport/io/response.rb +0 -17
  1089. data/lib/ddtrace/profiling/transport/io.rb +0 -31
  1090. data/lib/ddtrace/profiling/transport/parcel.rb +0 -18
  1091. data/lib/ddtrace/profiling/transport/request.rb +0 -16
  1092. data/lib/ddtrace/profiling/transport/response.rb +0 -9
  1093. data/lib/ddtrace/profiling.rb +0 -149
  1094. data/lib/ddtrace/propagation/grpc_propagator.rb +0 -75
  1095. data/lib/ddtrace/propagation/http_propagator.rb +0 -91
  1096. data/lib/ddtrace/quantization/hash.rb +0 -104
  1097. data/lib/ddtrace/quantization/http.rb +0 -90
  1098. data/lib/ddtrace/runtime/metrics.rb +0 -135
  1099. data/lib/ddtrace/sampler.rb +0 -303
  1100. data/lib/ddtrace/sampling/matcher.rb +0 -58
  1101. data/lib/ddtrace/sampling/rate_limiter.rb +0 -177
  1102. data/lib/ddtrace/sampling/rule.rb +0 -62
  1103. data/lib/ddtrace/sampling/rule_sampler.rb +0 -133
  1104. data/lib/ddtrace/sampling.rb +0 -3
  1105. data/lib/ddtrace/span.rb +0 -445
  1106. data/lib/ddtrace/sync_writer.rb +0 -69
  1107. data/lib/ddtrace/tasks/exec.rb +0 -47
  1108. data/lib/ddtrace/tasks/help.rb +0 -15
  1109. data/lib/ddtrace/tracer.rb +0 -449
  1110. data/lib/ddtrace/utils/compression.rb +0 -28
  1111. data/lib/ddtrace/utils/database.rb +0 -26
  1112. data/lib/ddtrace/utils/forking.rb +0 -53
  1113. data/lib/ddtrace/utils/object_set.rb +0 -40
  1114. data/lib/ddtrace/utils/only_once.rb +0 -41
  1115. data/lib/ddtrace/utils/sequence.rb +0 -18
  1116. data/lib/ddtrace/utils/string_table.rb +0 -46
  1117. data/lib/ddtrace/utils/time.rb +0 -51
  1118. data/lib/ddtrace/utils.rb +0 -80
  1119. data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -302
  1120. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -117
  1121. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +0 -58
  1122. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +0 -136
  1123. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +0 -10
  1124. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +0 -9
  1125. data/lib/ddtrace/vendor/multipart-post/multipart.rb +0 -13
  1126. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +0 -33
  1127. data/lib/ddtrace/worker.rb +0 -21
  1128. data/lib/ddtrace/workers/async.rb +0 -175
  1129. data/lib/ddtrace/workers/interval_loop.rb +0 -116
  1130. data/lib/ddtrace/workers/polling.rb +0 -56
  1131. data/lib/ddtrace/workers/queue.rb +0 -41
  1132. data/lib/ddtrace/workers/runtime_metrics.rb +0 -65
  1133. data/lib/ddtrace/workers/trace_writer.rb +0 -200
  1134. data/lib/ddtrace/workers.rb +0 -123
  1135. data/lib/ddtrace/writer.rb +0 -200
  1136. /data/lib/{ddtrace → datadog/core}/vendor/multipart-post/LICENSE +0 -0
  1137. /data/lib/{ddtrace → datadog}/profiling/pprof/pprof.proto +0 -0
  1138. /data/lib/{ddtrace/vendor/active_record → datadog/tracing/contrib/active_record/vendor}/MIT-LICENSE +0 -0
  1139. /data/lib/{ddtrace → datadog/tracing}/contrib/redis/vendor/LICENSE +0 -0
@@ -0,0 +1,505 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core'
4
+ require 'datadog/core/environment/ext'
5
+ require 'datadog/core/environment/socket'
6
+
7
+ require 'datadog/tracing/correlation'
8
+ require 'datadog/tracing/event'
9
+ require 'datadog/tracing/flush'
10
+ require 'datadog/tracing/context_provider'
11
+ require 'datadog/tracing/sampling/all_sampler'
12
+ require 'datadog/tracing/sampling/rule_sampler'
13
+ require 'datadog/tracing/sampling/priority_sampler'
14
+ require 'datadog/tracing/span_operation'
15
+ require 'datadog/tracing/trace_digest'
16
+ require 'datadog/tracing/trace_operation'
17
+ require 'datadog/tracing/writer'
18
+
19
+ module Datadog
20
+ module Tracing
21
+ # A {Datadog::Tracing::Tracer} keeps track of the time spent by an application processing a single operation. For
22
+ # example, a trace can be used to track the entire time spent processing a complicated web request.
23
+ # Even though the request may require multiple resources and machines to handle the request, all
24
+ # of these function calls and sub-requests would be encapsulated within a single trace.
25
+ # rubocop:disable Metrics/ClassLength
26
+ class Tracer
27
+ attr_reader \
28
+ :trace_flush,
29
+ :provider,
30
+ :sampler,
31
+ :tags
32
+
33
+ attr_accessor \
34
+ :default_service,
35
+ :enabled,
36
+ :writer
37
+
38
+ # Initialize a new {Datadog::Tracing::Tracer} used to create, sample and submit spans that measure the
39
+ # time of sections of code.
40
+ #
41
+ # @param trace_flush [Datadog::Tracing::TraceFlush] responsible for flushing spans from the execution context
42
+ # @param context_provider [Datadog::Tracing::DefaultContextProvider] ensures different
43
+ # execution contexts have distinct traces
44
+ # @param default_service [String] A fallback value for {Datadog::Tracing::Span#service}, as spans without
45
+ # service are rejected
46
+ # @param enabled [Boolean] set if the tracer submits or not spans to the local agent
47
+ # @param sampler [Datadog::Tracing::Sampler] a tracer sampler, responsible for filtering out spans when needed
48
+ # @param tags [Hash] default tags added to all spans
49
+ # @param writer [Datadog::Tracing::Writer] consumes traces returned by the provided +trace_flush+
50
+ def initialize(
51
+ trace_flush: Flush::Finished.new,
52
+ context_provider: DefaultContextProvider.new,
53
+ default_service: Core::Environment::Ext::FALLBACK_SERVICE_NAME,
54
+ enabled: true,
55
+ sampler: Sampling::PrioritySampler.new(
56
+ base_sampler: Sampling::AllSampler.new,
57
+ post_sampler: Sampling::RuleSampler.new
58
+ ),
59
+ tags: {},
60
+ writer: Writer.new
61
+ )
62
+ @trace_flush = trace_flush
63
+ @default_service = default_service
64
+ @enabled = enabled
65
+ @provider = context_provider
66
+ @sampler = sampler
67
+ @tags = tags
68
+ @writer = writer
69
+ end
70
+
71
+ # Return a {Datadog::Tracing::SpanOperation span_op} and {Datadog::Tracing::TraceOperation trace_op}
72
+ # that will trace an operation called `name`.
73
+ #
74
+ # You could trace your code using a <tt>do-block</tt> like:
75
+ #
76
+ # ```
77
+ # tracer.trace('web.request') do |span_op, trace_op|
78
+ # span_op.service = 'my-web-site'
79
+ # span_op.resource = '/'
80
+ # span_op.set_tag('http.method', request.request_method)
81
+ # do_something()
82
+ # end
83
+ # ```
84
+ #
85
+ # The {#trace} method can also be used without a block in this way:
86
+ # ```
87
+ # span_op = tracer.trace('web.request', service: 'my-web-site')
88
+ # do_something()
89
+ # span_op.finish()
90
+ # ```
91
+ #
92
+ # Remember that in this case, calling {Datadog::Tracing::SpanOperation#finish} is mandatory.
93
+ #
94
+ # When a Trace is started, {#trace} will store the created span; subsequent spans will
95
+ # become its children and will inherit some properties:
96
+ # ```
97
+ # parent = tracer.trace('parent') # has no parent span
98
+ # child = tracer.trace('child') # is a child of 'parent'
99
+ # child.finish()
100
+ # parent.finish()
101
+ # parent2 = tracer.trace('parent2') # has no parent span
102
+ # parent2.finish()
103
+ # ```
104
+ #
105
+ # @param [String] name {Datadog::Tracing::Span} operation name.
106
+ # See {https://docs.datadoghq.com/tracing/guide/configuring-primary-operation/ Primary Operations in Services}.
107
+ # @param [Datadog::Tracing::TraceDigest] continue_from continue a trace from a {Datadog::Tracing::TraceDigest}.
108
+ # Used for linking traces that are executed asynchronously.
109
+ # @param [Proc] on_error a block that overrides error handling behavior for this operation.
110
+ # @param [String] resource the resource this span refers, or `name` if it's missing
111
+ # @param [String] service the service name for this span.
112
+ # @param [Time] start_time time which the span should have started.
113
+ # @param [Hash<String,String>] tags extra tags which should be added to the span.
114
+ # @param [String] type the type of the span. See {Datadog::Tracing::Metadata::Ext::AppTypes}.
115
+ # @return [Object] If a block is provided, returns the result of the block execution.
116
+ # @return [Datadog::Tracing::SpanOperation] If no block is provided, returns the active,
117
+ # unfinished {Datadog::Tracing::SpanOperation}.
118
+ # @yield Optional block where new newly created {Datadog::Tracing::SpanOperation} captures the execution.
119
+ # @yieldparam [Datadog::Tracing::SpanOperation] span_op the newly created and active [Datadog::Tracing::SpanOperation]
120
+ # @yieldparam [Datadog::Tracing::TraceOperation] trace_op the active [Datadog::Tracing::TraceOperation]
121
+ # rubocop:disable Lint/UnderscorePrefixedVariableName
122
+ # rubocop:disable Metrics/MethodLength
123
+ def trace(
124
+ name,
125
+ continue_from: nil,
126
+ on_error: nil,
127
+ resource: nil,
128
+ service: nil,
129
+ start_time: nil,
130
+ tags: nil,
131
+ type: nil,
132
+ span_type: nil,
133
+ _context: nil,
134
+ &block
135
+ )
136
+ return skip_trace(name, &block) unless enabled
137
+
138
+ context, trace = nil
139
+
140
+ # Resolve the trace
141
+ begin
142
+ context = _context || call_context
143
+ active_trace = context.active_trace
144
+ trace = if continue_from || active_trace.nil?
145
+ start_trace(continue_from: continue_from)
146
+ else
147
+ active_trace
148
+ end
149
+ rescue StandardError => e
150
+ Datadog.logger.debug { "Failed to trace: #{e}" }
151
+
152
+ # Tracing failed: fallback and run code without tracing.
153
+ return skip_trace(name, &block)
154
+ end
155
+
156
+ # Activate and start the trace
157
+ if block
158
+ context.activate!(trace) do
159
+ start_span(
160
+ name,
161
+ on_error: on_error,
162
+ resource: resource,
163
+ service: service,
164
+ start_time: start_time,
165
+ tags: tags,
166
+ type: span_type || type,
167
+ _trace: trace,
168
+ &block
169
+ )
170
+ end
171
+ else
172
+ # Setup trace activation/deactivation
173
+ manual_trace_activation!(context, trace)
174
+
175
+ # Return the new span
176
+ start_span(
177
+ name,
178
+ on_error: on_error,
179
+ resource: resource,
180
+ service: service,
181
+ start_time: start_time,
182
+ tags: tags,
183
+ type: span_type || type,
184
+ _trace: trace
185
+ )
186
+ end
187
+ end
188
+ # rubocop:enable Lint/UnderscorePrefixedVariableName
189
+ # rubocop:enable Metrics/MethodLength
190
+
191
+ # Set the given key / value tag pair at the tracer level. These tags will be
192
+ # appended to each span created by the tracer. Keys and values must be strings.
193
+ # @example
194
+ # tracer.set_tags('env' => 'prod', 'component' => 'core')
195
+ def set_tags(tags)
196
+ string_tags = tags.collect { |k, v| [k.to_s, v] }.to_h
197
+ @tags = @tags.merge(string_tags)
198
+ end
199
+
200
+ # The active, unfinished trace, representing the current instrumentation context.
201
+ #
202
+ # The active trace is fiber-local.
203
+ #
204
+ # @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
205
+ # @return [Datadog::Tracing::TraceSegment] the active trace
206
+ # @return [nil] if no trace is active
207
+ def active_trace(key = nil)
208
+ call_context(key).active_trace
209
+ end
210
+
211
+ # The active, unfinished span, representing the currently instrumented application section.
212
+ #
213
+ # The active span belongs to an {.active_trace}.
214
+ #
215
+ # @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
216
+ # @return [Datadog::Tracing::SpanOperation] the active span
217
+ # @return [nil] if no trace is active, and thus no span is active
218
+ def active_span(key = nil)
219
+ trace = active_trace(key)
220
+ trace.active_span if trace
221
+ end
222
+
223
+ # Information about the currently active trace.
224
+ #
225
+ # The most common use cases are tagging log messages and metrics.
226
+ #
227
+ # @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
228
+ # @return [Datadog::Tracing::Correlation::Identifier] correlation object
229
+ def active_correlation(key = nil)
230
+ trace = active_trace(key)
231
+ Correlation.identifier_from_digest(
232
+ trace && trace.to_digest
233
+ )
234
+ end
235
+
236
+ # Setup a new trace to continue from where another
237
+ # trace left off.
238
+ #
239
+ # Used to continue distributed or async traces.
240
+ #
241
+ # @param [Datadog::Tracing::TraceDigest] digest continue from the {Datadog::Tracing::TraceDigest}.
242
+ # @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
243
+ # @return [Object] If a block is provided, the result of the block execution.
244
+ # @return [Datadog::Tracing::TraceOperation] If no block, the active {Datadog::Tracing::TraceOperation}.
245
+ # @yield Optional block where this {#continue_trace!} `digest` scope is active.
246
+ # If no block, the `digest` remains active after {#continue_trace!} returns.
247
+ def continue_trace!(digest, key = nil, &block)
248
+ # Only accept {TraceDigest} as a digest.
249
+ # Otherwise, create a new execution context.
250
+ digest = nil unless digest.is_a?(TraceDigest)
251
+
252
+ # Start a new trace from the digest
253
+ context = call_context(key)
254
+ original_trace = active_trace(key)
255
+ trace = start_trace(continue_from: digest)
256
+
257
+ # If block hasn't been given; we need to manually deactivate
258
+ # this trace. Subscribe to the trace finished event to do this.
259
+ subscribe_trace_deactivation!(context, trace, original_trace) unless block
260
+
261
+ context.activate!(trace, &block)
262
+ end
263
+
264
+ # @!visibility private
265
+ # TODO: make this private
266
+ def trace_completed
267
+ @trace_completed ||= TraceCompleted.new
268
+ end
269
+
270
+ # Triggered whenever a trace is completed
271
+ class TraceCompleted < Tracing::Event
272
+ def initialize
273
+ super(:trace_completed)
274
+ end
275
+
276
+ # NOTE: Ignore Rubocop rule. This definition allows for
277
+ # description of and constraints on arguments.
278
+ # rubocop:disable Lint/UselessMethodDefinition
279
+ def publish(trace)
280
+ super(trace)
281
+ end
282
+ # rubocop:enable Lint/UselessMethodDefinition
283
+ end
284
+
285
+ # Shorthand that calls the `shutdown!` method of a registered worker.
286
+ # It's useful to ensure that the Trace Buffer is properly flushed before
287
+ # shutting down the application.
288
+ #
289
+ # @example
290
+ # tracer.trace('operation_name', service='rake_tasks') do |span_op|
291
+ # span_op.set_tag('task.name', 'script')
292
+ # end
293
+ #
294
+ # tracer.shutdown!
295
+ def shutdown!
296
+ return unless @enabled
297
+
298
+ @writer.stop if @writer
299
+ end
300
+
301
+ private
302
+
303
+ # Return the current active {Context} for this traced execution. This method is
304
+ # automatically called when calling Tracer.trace or Tracer.start_span,
305
+ # but it can be used in the application code during manual instrumentation.
306
+ #
307
+ # This method makes use of a {ContextProvider} that is automatically set during the tracer
308
+ # initialization, or while using a library instrumentation.
309
+ #
310
+ # @param [Thread] key Thread to retrieve tracer from. Defaults to current thread.
311
+ def call_context(key = nil)
312
+ @provider.context(key)
313
+ end
314
+
315
+ def build_trace(digest = nil)
316
+ # Resolve hostname if configured
317
+ hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
318
+ hostname = hostname && !hostname.empty? ? hostname : nil
319
+
320
+ if digest
321
+ TraceOperation.new(
322
+ hostname: hostname,
323
+ id: digest.trace_id,
324
+ origin: digest.trace_origin,
325
+ parent_span_id: digest.span_id,
326
+ sampling_priority: digest.trace_sampling_priority
327
+ )
328
+ else
329
+ TraceOperation.new(
330
+ hostname: hostname
331
+ )
332
+ end
333
+ end
334
+
335
+ def bind_trace_events!(trace_op)
336
+ events = trace_op.send(:events)
337
+
338
+ events.span_before_start.subscribe do |event_span_op, event_trace_op|
339
+ event_trace_op.service ||= @default_service
340
+ event_span_op.service ||= @default_service
341
+ sample_trace(event_trace_op) if event_span_op && event_span_op.parent_id == 0
342
+ end
343
+
344
+ events.span_finished.subscribe do |_event_span, event_trace_op|
345
+ flush_trace(event_trace_op)
346
+ end
347
+ end
348
+
349
+ def start_trace(continue_from: nil)
350
+ # Build a new trace using digest if provided.
351
+ trace = build_trace(continue_from)
352
+
353
+ # Bind trace events: sample trace, set default service, flush spans.
354
+ bind_trace_events!(trace)
355
+
356
+ trace
357
+ end
358
+
359
+ # rubocop:disable Lint/UnderscorePrefixedVariableName
360
+ def start_span(
361
+ name,
362
+ continue_from: nil,
363
+ on_error: nil,
364
+ resource: nil,
365
+ service: nil,
366
+ start_time: nil,
367
+ tags: nil,
368
+ type: nil,
369
+ _trace: nil,
370
+ &block
371
+ )
372
+ trace = _trace || start_trace(continue_from: continue_from)
373
+
374
+ if block
375
+ # Ignore start time if a block has been given
376
+ trace.measure(
377
+ name,
378
+ events: build_span_events,
379
+ on_error: on_error,
380
+ resource: resource,
381
+ service: service,
382
+ tags: resolve_tags(tags),
383
+ type: type,
384
+ &block
385
+ )
386
+ else
387
+ # Return the new span
388
+ span = trace.build_span(
389
+ name,
390
+ events: build_span_events,
391
+ on_error: on_error,
392
+ resource: resource,
393
+ service: service,
394
+ start_time: start_time,
395
+ tags: resolve_tags(tags),
396
+ type: type
397
+ )
398
+
399
+ span.start(start_time)
400
+ span
401
+ end
402
+ end
403
+ # rubocop:enable Lint/UnderscorePrefixedVariableName
404
+
405
+ def build_span_events(events = nil)
406
+ case events
407
+ when SpanOperation::Events
408
+ events
409
+ when Hash
410
+ SpanOperation::Events.build(events)
411
+ else
412
+ SpanOperation::Events.new
413
+ end
414
+ end
415
+
416
+ def resolve_tags(tags)
417
+ if @tags.any? && tags
418
+ # Combine default tags with provided tags,
419
+ # preferring provided tags.
420
+ @tags.merge(tags)
421
+ else
422
+ # Use provided tags or default tags if none.
423
+ tags || @tags.dup
424
+ end
425
+ end
426
+
427
+ # Manually activate and deactivate the trace, when the span completes.
428
+ def manual_trace_activation!(context, trace)
429
+ # Get the original trace to restore
430
+ original_trace = context.active_trace
431
+
432
+ # Setup the deactivation callback
433
+ subscribe_trace_deactivation!(context, trace, original_trace)
434
+
435
+ # Activate the trace
436
+ # Skip this, if it would have no effect.
437
+ context.activate!(trace) unless trace == original_trace
438
+ end
439
+
440
+ # Reactivate the original trace when trace completes
441
+ def subscribe_trace_deactivation!(context, trace, original_trace)
442
+ # Don't override this event if it's set.
443
+ # The original event should reactivate the original trace correctly.
444
+ #
445
+ # This happens when multiple manually-activation spans are created:
446
+ # ```ruby
447
+ # tracer.trace('parent') do
448
+ # span1 = tracer.trace('first') # Registers trace deactivation back to `parent` span.
449
+ # span2 = tracer.trace('second') # Tries to register trace deactivation back to `first`, which is not correct.
450
+ # end
451
+ # ```
452
+ return if trace.send(:events).trace_finished.deactivate_trace_subscribed?
453
+
454
+ trace.send(:events).trace_finished.subscribe_deactivate_trace do
455
+ context.activate!(original_trace)
456
+ end
457
+ end
458
+
459
+ # Sample a span, tagging the trace as appropriate.
460
+ def sample_trace(trace_op)
461
+ begin
462
+ @sampler.sample!(trace_op)
463
+ rescue StandardError => e
464
+ Datadog.logger.debug { "Failed to sample trace: #{e}" }
465
+ end
466
+ end
467
+
468
+ # Flush finished spans from the trace buffer, send them to writer.
469
+ def flush_trace(trace_op)
470
+ begin
471
+ trace = @trace_flush.consume!(trace_op)
472
+ write(trace) if trace && !trace.empty?
473
+ rescue StandardError => e
474
+ Datadog.logger.debug { "Failed to flush trace: #{e}" }
475
+ end
476
+ end
477
+
478
+ # Send the trace to the writer to enqueue the spans list in the agent
479
+ # sending queue.
480
+ def write(trace)
481
+ return unless trace && @writer
482
+
483
+ if Datadog.configuration.diagnostics.debug
484
+ Datadog.logger.debug { "Writing #{trace.length} spans (enabled: #{@enabled})\n#{trace.spans.pretty_inspect}" }
485
+ end
486
+
487
+ @writer.write(trace)
488
+ trace_completed.publish(trace)
489
+ end
490
+
491
+ # TODO: Make these dummy objects singletons to preserve memory.
492
+ def skip_trace(name)
493
+ span = SpanOperation.new(name)
494
+
495
+ if block_given?
496
+ trace = TraceOperation.new
497
+ yield(span, trace)
498
+ else
499
+ span
500
+ end
501
+ end
502
+ end
503
+ # rubocop:enable Metrics/ClassLength
504
+ end
505
+ end
@@ -0,0 +1,195 @@
1
+ # typed: false
2
+
3
+ require 'datadog/core'
4
+ require 'datadog/core/worker'
5
+ require 'datadog/core/workers/async'
6
+ require 'datadog/core/workers/polling'
7
+ require 'datadog/core/workers/queue'
8
+
9
+ require 'datadog/tracing/buffer'
10
+ require 'datadog/tracing/pipeline'
11
+ require 'datadog/tracing/event'
12
+
13
+ require 'ddtrace/transport/http'
14
+
15
+ module Datadog
16
+ module Tracing
17
+ module Workers
18
+ # Writes traces to transport synchronously
19
+ class TraceWriter < Core::Worker
20
+ attr_reader \
21
+ :transport
22
+
23
+ # rubocop:disable Lint/MissingSuper
24
+ def initialize(options = {})
25
+ transport_options = options.fetch(:transport_options, {})
26
+
27
+ transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
28
+
29
+ @transport = options.fetch(:transport) do
30
+ Transport::HTTP.default(**transport_options)
31
+ end
32
+ end
33
+ # rubocop:enable Lint/MissingSuper
34
+
35
+ def perform(traces)
36
+ write_traces(traces)
37
+ end
38
+
39
+ def write(trace)
40
+ write_traces([trace])
41
+ end
42
+
43
+ def write_traces(traces)
44
+ traces = process_traces(traces)
45
+ flush_traces(traces)
46
+ rescue StandardError => e
47
+ Datadog.logger.error(
48
+ "Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
49
+ )
50
+ end
51
+
52
+ def process_traces(traces)
53
+ # Run traces through the processing pipeline
54
+ Pipeline.process!(traces)
55
+ end
56
+
57
+ def flush_traces(traces)
58
+ transport.send_traces(traces).tap do |response|
59
+ flush_completed.publish(response)
60
+ end
61
+ end
62
+
63
+ # TODO: Register `Datadog::Core::Diagnostics::EnvironmentLogger.log!`
64
+ # TODO: as a flush_completed subscriber when the `TraceWriter`
65
+ # TODO: instantiation code is implemented.
66
+ def flush_completed
67
+ @flush_completed ||= FlushCompleted.new
68
+ end
69
+
70
+ # Flush completed event for worker
71
+ class FlushCompleted < Event
72
+ def initialize
73
+ super(:flush_completed)
74
+ end
75
+ end
76
+ end
77
+
78
+ # Writes traces to transport asynchronously,
79
+ # using a thread & buffer.
80
+ class AsyncTraceWriter < TraceWriter
81
+ include Core::Workers::Queue
82
+ include Core::Workers::Polling
83
+
84
+ DEFAULT_BUFFER_MAX_SIZE = 1000
85
+ FORK_POLICY_ASYNC = :async
86
+ FORK_POLICY_SYNC = :sync
87
+
88
+ attr_writer \
89
+ :async
90
+
91
+ def initialize(options = {})
92
+ # Workers::TraceWriter settings
93
+ super
94
+
95
+ # Workers::Polling settings
96
+ self.enabled = options.fetch(:enabled, true)
97
+
98
+ # Workers::Async::Thread settings
99
+ @async = true
100
+ self.fork_policy = options.fetch(:fork_policy, FORK_POLICY_ASYNC)
101
+
102
+ # Workers::IntervalLoop settings
103
+ self.loop_base_interval = options[:interval] if options.key?(:interval)
104
+ self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
105
+ self.loop_back_off_max = options[:back_off_max] if options.key?(:back_off_max)
106
+
107
+ # Workers::Queue settings
108
+ @buffer_size = options.fetch(:buffer_size, DEFAULT_BUFFER_MAX_SIZE)
109
+ self.buffer = TraceBuffer.new(@buffer_size)
110
+ end
111
+
112
+ # NOTE: #perform is wrapped by other modules:
113
+ # Polling --> Async --> IntervalLoop --> AsyncTraceWriter --> TraceWriter
114
+ #
115
+ # WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
116
+ # result from the writer, whereas this method always returns nil.
117
+ def perform(traces)
118
+ super(traces).tap do |responses|
119
+ loop_back_off! if responses.find(&:server_error?)
120
+ end
121
+
122
+ nil
123
+ end
124
+
125
+ def stop(*args)
126
+ buffer.close if running?
127
+ super
128
+ end
129
+
130
+ def enqueue(trace)
131
+ buffer.push(trace)
132
+ end
133
+
134
+ def dequeue
135
+ # Wrap results in Array because they are
136
+ # splatted as args against TraceWriter#perform.
137
+ [buffer.pop]
138
+ end
139
+
140
+ # Are there more traces to be processed next?
141
+ def work_pending?
142
+ !buffer.empty?
143
+ end
144
+
145
+ def async?
146
+ @async == true
147
+ end
148
+
149
+ def fork_policy=(policy)
150
+ # Translate to Workers::Async::Thread policy
151
+ thread_fork_policy = case policy
152
+ when Core::Workers::Async::Thread::FORK_POLICY_STOP
153
+ policy
154
+ when FORK_POLICY_SYNC
155
+ # Stop the async thread because the writer
156
+ # will bypass and run synchronously.
157
+ Core::Workers::Async::Thread::FORK_POLICY_STOP
158
+ else
159
+ Core::Workers::Async::Thread::FORK_POLICY_RESTART
160
+ end
161
+
162
+ # Update thread fork policy
163
+ super(thread_fork_policy)
164
+
165
+ # Update local policy
166
+ @writer_fork_policy = policy
167
+ end
168
+
169
+ def after_fork
170
+ # In multiprocess environments, forks will share the same buffer until its written to.
171
+ # A.K.A. copy-on-write. We don't want forks to write traces generated from another process.
172
+ # Instead, we reset it after the fork. (Make sure any enqueue operations happen after this.)
173
+ self.buffer = TraceBuffer.new(@buffer_size)
174
+
175
+ # Switch to synchronous mode if configured to do so.
176
+ # In some cases synchronous writing is preferred because the fork will be short lived.
177
+ @async = false if @writer_fork_policy == FORK_POLICY_SYNC
178
+ end
179
+
180
+ # WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#write is spec'd to return the
181
+ # result from the writer, whereas this method returns something else when running in async mode.
182
+ def write(trace)
183
+ # Start worker thread. If the process has forked, it will trigger #after_fork to
184
+ # reconfigure the worker accordingly.
185
+ # NOTE: It's important we do this before queuing or it will drop the current trace,
186
+ # because #after_fork resets the buffer.
187
+ perform
188
+
189
+ # Queue the trace if running asynchronously, otherwise short-circuit and write it directly.
190
+ async? ? enqueue(trace) : write_traces([trace])
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end