ddtrace 0.54.2 → 1.0.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 (1099) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/CHANGELOG.md +126 -1
  4. data/LICENSE-3rdparty.csv +2 -1
  5. data/README.md +4 -0
  6. data/bin/ddtracerb +5 -5
  7. data/ddtrace.gemspec +8 -5
  8. data/docs/0.x-trace.png +0 -0
  9. data/docs/1.0-trace.png +0 -0
  10. data/docs/AutoInstrumentation.md +36 -0
  11. data/docs/Deprecation.md +8 -0
  12. data/docs/DevelopmentGuide.md +1 -1
  13. data/docs/GettingStarted.md +551 -506
  14. data/docs/ProfilingDevelopment.md +12 -9
  15. data/docs/PublicApi.md +14 -0
  16. data/docs/UpgradeGuide.md +736 -0
  17. data/ext/ddtrace_profiling_native_extension/extconf.rb +9 -0
  18. data/ext/ddtrace_profiling_native_extension/profiling.c +3 -1
  19. data/lib/datadog/appsec/assets/blocked.html +4 -0
  20. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  21. data/lib/datadog/appsec/assets/waf_rules/recommended.json +5638 -0
  22. data/lib/datadog/appsec/assets/waf_rules/risky.json +1499 -0
  23. data/lib/datadog/appsec/assets/waf_rules/strict.json +1298 -0
  24. data/lib/datadog/appsec/assets.rb +38 -0
  25. data/lib/datadog/appsec/autoload.rb +16 -0
  26. data/lib/datadog/appsec/configuration/settings.rb +175 -0
  27. data/lib/datadog/appsec/configuration.rb +72 -0
  28. data/lib/datadog/appsec/contrib/auto_instrument.rb +29 -0
  29. data/lib/datadog/appsec/contrib/configuration/settings.rb +20 -0
  30. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  31. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  32. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +22 -0
  33. data/lib/datadog/appsec/contrib/rack/ext.rb +15 -0
  34. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +126 -0
  35. data/lib/datadog/appsec/contrib/rack/integration.rb +48 -0
  36. data/lib/datadog/appsec/contrib/rack/patcher.rb +33 -0
  37. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +87 -0
  38. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +64 -0
  39. data/lib/datadog/appsec/contrib/rack/request.rb +52 -0
  40. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +57 -0
  41. data/lib/datadog/appsec/contrib/rack/response.rb +24 -0
  42. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +22 -0
  43. data/lib/datadog/appsec/contrib/rails/ext.rb +15 -0
  44. data/lib/datadog/appsec/contrib/rails/framework.rb +30 -0
  45. data/lib/datadog/appsec/contrib/rails/integration.rb +48 -0
  46. data/lib/datadog/appsec/contrib/rails/patcher.rb +125 -0
  47. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  48. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +22 -0
  49. data/lib/datadog/appsec/contrib/sinatra/ext.rb +15 -0
  50. data/lib/datadog/appsec/contrib/sinatra/framework.rb +34 -0
  51. data/lib/datadog/appsec/contrib/sinatra/integration.rb +48 -0
  52. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +77 -0
  53. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  54. data/lib/datadog/appsec/event.rb +106 -0
  55. data/lib/datadog/appsec/extensions.rb +121 -0
  56. data/lib/datadog/appsec/instrumentation/gateway.rb +44 -0
  57. data/lib/datadog/appsec/processor.rb +121 -0
  58. data/lib/datadog/appsec/rate_limiter.rb +55 -0
  59. data/lib/datadog/appsec/reactive/address_hash.rb +18 -0
  60. data/lib/datadog/appsec/reactive/engine.rb +44 -0
  61. data/lib/datadog/appsec/reactive/operation.rb +52 -0
  62. data/lib/datadog/appsec/reactive/subscriber.rb +18 -0
  63. data/lib/datadog/appsec.rb +23 -0
  64. data/lib/datadog/ci/configuration/components.rb +9 -8
  65. data/lib/datadog/ci/configuration/settings.rb +19 -3
  66. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +4 -2
  67. data/lib/datadog/ci/contrib/cucumber/ext.rb +2 -0
  68. data/lib/datadog/ci/contrib/cucumber/formatter.rb +4 -9
  69. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +2 -1
  70. data/lib/datadog/ci/contrib/cucumber/integration.rb +3 -2
  71. data/lib/datadog/ci/contrib/cucumber/patcher.rb +3 -2
  72. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +4 -2
  73. data/lib/datadog/ci/contrib/rspec/example.rb +4 -9
  74. data/lib/datadog/ci/contrib/rspec/ext.rb +2 -0
  75. data/lib/datadog/ci/contrib/rspec/integration.rb +3 -2
  76. data/lib/datadog/ci/contrib/rspec/patcher.rb +3 -2
  77. data/lib/datadog/ci/ext/app_types.rb +2 -1
  78. data/lib/datadog/ci/ext/environment.rb +107 -103
  79. data/lib/datadog/ci/ext/settings.rb +2 -1
  80. data/lib/datadog/ci/ext/test.rb +1 -0
  81. data/lib/datadog/ci/extensions.rb +5 -4
  82. data/lib/datadog/ci/flush.rb +38 -0
  83. data/lib/datadog/ci/test.rb +15 -13
  84. data/lib/datadog/ci.rb +4 -1
  85. data/lib/datadog/core/buffer/cruby.rb +55 -0
  86. data/lib/datadog/core/buffer/random.rb +134 -0
  87. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  88. data/lib/datadog/core/chunker.rb +35 -0
  89. data/lib/datadog/core/configuration/agent_settings_resolver.rb +365 -0
  90. data/lib/datadog/core/configuration/base.rb +89 -0
  91. data/lib/datadog/core/configuration/components.rb +393 -0
  92. data/lib/datadog/core/configuration/dependency_resolver.rb +28 -0
  93. data/lib/datadog/core/configuration/option.rb +69 -0
  94. data/lib/datadog/core/configuration/option_definition.rb +126 -0
  95. data/lib/datadog/core/configuration/option_definition_set.rb +22 -0
  96. data/lib/datadog/core/configuration/option_set.rb +10 -0
  97. data/lib/datadog/core/configuration/options.rb +118 -0
  98. data/lib/datadog/core/configuration/settings.rb +618 -0
  99. data/lib/datadog/core/configuration.rb +284 -0
  100. data/lib/datadog/core/diagnostics/environment_logger.rb +283 -0
  101. data/lib/datadog/core/diagnostics/ext.rb +41 -0
  102. data/lib/datadog/core/diagnostics/health.rb +37 -0
  103. data/lib/datadog/core/encoding.rb +76 -0
  104. data/lib/datadog/core/environment/cgroup.rb +1 -0
  105. data/lib/datadog/core/environment/class_count.rb +1 -0
  106. data/lib/datadog/core/environment/container.rb +1 -0
  107. data/lib/datadog/core/environment/ext.rb +28 -9
  108. data/lib/datadog/core/environment/gc.rb +1 -0
  109. data/lib/datadog/core/environment/identity.rb +11 -4
  110. data/lib/datadog/core/environment/socket.rb +9 -2
  111. data/lib/datadog/core/environment/thread_count.rb +1 -0
  112. data/lib/datadog/core/environment/variable_helpers.rb +2 -0
  113. data/lib/datadog/core/environment/vm_cache.rb +1 -0
  114. data/lib/datadog/core/error.rb +101 -0
  115. data/lib/datadog/core/extensions.rb +16 -0
  116. data/lib/datadog/core/git/ext.rb +35 -0
  117. data/lib/datadog/core/logger.rb +46 -0
  118. data/lib/datadog/core/metrics/client.rb +188 -0
  119. data/lib/datadog/core/metrics/ext.rb +20 -0
  120. data/lib/datadog/core/metrics/helpers.rb +25 -0
  121. data/lib/datadog/core/metrics/logging.rb +44 -0
  122. data/lib/datadog/core/metrics/metric.rb +14 -0
  123. data/lib/datadog/core/metrics/options.rb +50 -0
  124. data/lib/datadog/core/pin.rb +75 -0
  125. data/lib/datadog/core/runtime/ext.rb +28 -0
  126. data/lib/datadog/core/runtime/metrics.rb +126 -0
  127. data/lib/datadog/core/utils/compression.rb +32 -0
  128. data/lib/datadog/core/utils/forking.rb +63 -0
  129. data/lib/datadog/core/utils/object_set.rb +43 -0
  130. data/lib/datadog/core/utils/only_once.rb +44 -0
  131. data/lib/datadog/core/utils/safe_dup.rb +27 -0
  132. data/lib/datadog/core/utils/sequence.rb +21 -0
  133. data/lib/datadog/core/utils/string_table.rb +49 -0
  134. data/lib/datadog/core/utils/time.rb +54 -0
  135. data/lib/datadog/core/utils.rb +115 -0
  136. data/lib/{ddtrace → datadog/core}/vendor/multipart-post/LICENSE +0 -0
  137. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +120 -0
  138. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +61 -0
  139. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +139 -0
  140. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +13 -0
  141. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +12 -0
  142. data/lib/datadog/core/vendor/multipart-post/multipart.rb +16 -0
  143. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +36 -0
  144. data/lib/datadog/core/worker.rb +24 -0
  145. data/lib/datadog/core/workers/async.rb +180 -0
  146. data/lib/datadog/core/workers/interval_loop.rb +119 -0
  147. data/lib/datadog/core/workers/polling.rb +59 -0
  148. data/lib/datadog/core/workers/queue.rb +44 -0
  149. data/lib/datadog/core/workers/runtime_metrics.rb +65 -0
  150. data/lib/datadog/core.rb +74 -0
  151. data/lib/datadog/opentracer/binary_propagator.rb +26 -0
  152. data/lib/datadog/opentracer/carrier.rb +9 -0
  153. data/lib/datadog/opentracer/distributed_headers.rb +58 -0
  154. data/lib/datadog/opentracer/global_tracer.rb +17 -0
  155. data/lib/datadog/opentracer/propagator.rb +26 -0
  156. data/lib/datadog/opentracer/rack_propagator.rb +72 -0
  157. data/lib/datadog/opentracer/scope.rb +18 -0
  158. data/lib/datadog/opentracer/scope_manager.rb +9 -0
  159. data/lib/datadog/opentracer/span.rb +101 -0
  160. data/lib/datadog/opentracer/span_context.rb +19 -0
  161. data/lib/datadog/opentracer/span_context_factory.rb +27 -0
  162. data/lib/datadog/opentracer/text_map_propagator.rb +87 -0
  163. data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
  164. data/lib/datadog/opentracer/thread_local_scope_manager.rb +43 -0
  165. data/lib/datadog/opentracer/tracer.rb +214 -0
  166. data/lib/datadog/opentracer.rb +24 -0
  167. data/lib/datadog/profiling/backtrace_location.rb +34 -0
  168. data/lib/datadog/profiling/buffer.rb +43 -0
  169. data/lib/datadog/profiling/collectors/code_provenance.rb +114 -0
  170. data/lib/datadog/profiling/collectors/stack.rb +297 -0
  171. data/lib/datadog/profiling/encoding/profile.rb +48 -0
  172. data/lib/datadog/profiling/event.rb +15 -0
  173. data/lib/datadog/profiling/events/stack.rb +82 -0
  174. data/lib/datadog/profiling/exporter.rb +25 -0
  175. data/lib/datadog/profiling/ext/forking.rb +99 -0
  176. data/lib/datadog/profiling/ext.rb +57 -0
  177. data/lib/datadog/profiling/flush.rb +69 -0
  178. data/lib/datadog/profiling/native_extension.rb +41 -0
  179. data/lib/datadog/profiling/pprof/builder.rb +127 -0
  180. data/lib/datadog/profiling/pprof/converter.rb +104 -0
  181. data/lib/datadog/profiling/pprof/message_set.rb +16 -0
  182. data/lib/datadog/profiling/pprof/payload.rb +20 -0
  183. data/lib/{ddtrace → datadog}/profiling/pprof/pprof.proto +0 -0
  184. data/lib/datadog/profiling/pprof/pprof_pb.rb +83 -0
  185. data/lib/datadog/profiling/pprof/stack_sample.rb +141 -0
  186. data/lib/datadog/profiling/pprof/string_table.rb +12 -0
  187. data/lib/datadog/profiling/pprof/template.rb +120 -0
  188. data/lib/datadog/profiling/preload.rb +5 -0
  189. data/lib/datadog/profiling/profiler.rb +34 -0
  190. data/lib/datadog/profiling/recorder.rb +117 -0
  191. data/lib/datadog/profiling/scheduler.rb +151 -0
  192. data/lib/datadog/profiling/tasks/exec.rb +50 -0
  193. data/lib/datadog/profiling/tasks/help.rb +18 -0
  194. data/lib/datadog/profiling/tasks/setup.rb +91 -0
  195. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +45 -0
  196. data/lib/datadog/profiling/trace_identifiers/helper.rb +47 -0
  197. data/lib/datadog/profiling/transport/client.rb +16 -0
  198. data/lib/datadog/profiling/transport/http/api/endpoint.rb +107 -0
  199. data/lib/datadog/profiling/transport/http/api/instance.rb +38 -0
  200. data/lib/datadog/profiling/transport/http/api/spec.rb +42 -0
  201. data/lib/datadog/profiling/transport/http/api.rb +45 -0
  202. data/lib/datadog/profiling/transport/http/builder.rb +30 -0
  203. data/lib/datadog/profiling/transport/http/client.rb +35 -0
  204. data/lib/datadog/profiling/transport/http/response.rb +23 -0
  205. data/lib/datadog/profiling/transport/http.rb +112 -0
  206. data/lib/datadog/profiling/transport/io/client.rb +29 -0
  207. data/lib/datadog/profiling/transport/io/response.rb +18 -0
  208. data/lib/datadog/profiling/transport/io.rb +32 -0
  209. data/lib/datadog/profiling/transport/parcel.rb +19 -0
  210. data/lib/datadog/profiling/transport/request.rb +17 -0
  211. data/lib/datadog/profiling/transport/response.rb +10 -0
  212. data/lib/datadog/profiling.rb +168 -0
  213. data/lib/datadog/tracing/analytics.rb +25 -0
  214. data/lib/datadog/tracing/buffer.rb +126 -0
  215. data/lib/datadog/tracing/configuration/ext.rb +51 -0
  216. data/lib/datadog/tracing/context.rb +68 -0
  217. data/lib/datadog/tracing/context_provider.rb +66 -0
  218. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +35 -0
  219. data/lib/datadog/tracing/contrib/action_cable/event.rb +72 -0
  220. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
  221. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
  222. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
  223. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  224. data/lib/datadog/tracing/contrib/action_cable/ext.rb +32 -0
  225. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +91 -0
  226. data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
  227. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  228. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +36 -0
  229. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  230. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
  231. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
  232. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  233. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +33 -0
  234. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
  235. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  236. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +156 -0
  237. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  238. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +36 -0
  239. data/lib/datadog/tracing/contrib/action_pack/ext.rb +22 -0
  240. data/lib/datadog/tracing/contrib/action_pack/integration.rb +50 -0
  241. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  242. data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
  243. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +36 -0
  244. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  245. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
  246. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
  247. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  248. data/lib/datadog/tracing/contrib/action_view/ext.rb +24 -0
  249. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
  250. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +91 -0
  251. data/lib/datadog/tracing/contrib/action_view/integration.rb +57 -0
  252. data/lib/datadog/tracing/contrib/action_view/patcher.rb +48 -0
  253. data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
  254. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +37 -0
  255. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  256. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
  257. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
  258. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
  259. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
  260. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
  261. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
  262. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  263. data/lib/datadog/tracing/contrib/active_job/ext.rb +39 -0
  264. data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
  265. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +26 -0
  266. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  267. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +33 -0
  268. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +69 -0
  269. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
  270. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
  271. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  272. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +24 -0
  273. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
  274. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +33 -0
  275. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
  276. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +138 -0
  277. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +39 -0
  278. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  279. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
  280. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +78 -0
  281. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  282. data/lib/datadog/tracing/contrib/active_record/ext.rb +29 -0
  283. data/lib/datadog/tracing/contrib/active_record/integration.rb +56 -0
  284. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  285. data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
  286. data/lib/{ddtrace/vendor/active_record → datadog/tracing/contrib/active_record/vendor}/MIT-LICENSE +0 -0
  287. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +307 -0
  288. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +270 -0
  289. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +73 -0
  290. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  291. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +35 -0
  292. data/lib/datadog/tracing/contrib/active_support/ext.rb +31 -0
  293. data/lib/datadog/tracing/contrib/active_support/integration.rb +51 -0
  294. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  295. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  296. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +162 -0
  297. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  298. data/lib/datadog/tracing/contrib/analytics.rb +29 -0
  299. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  300. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +35 -0
  301. data/lib/datadog/tracing/contrib/aws/ext.rb +27 -0
  302. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +95 -0
  303. data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
  304. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +60 -0
  305. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  306. data/lib/datadog/tracing/contrib/aws/services.rb +123 -0
  307. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +23 -0
  308. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +46 -0
  309. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
  310. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +27 -0
  311. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +43 -0
  312. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +33 -0
  313. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  314. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  315. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  316. data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
  317. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +35 -0
  318. data/lib/datadog/tracing/contrib/dalli/ext.rb +24 -0
  319. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +58 -0
  320. data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
  321. data/lib/datadog/tracing/contrib/dalli/patcher.rb +29 -0
  322. data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
  323. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +38 -0
  324. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +26 -0
  325. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
  326. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +32 -0
  327. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +101 -0
  328. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +36 -0
  329. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +26 -0
  330. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +44 -0
  331. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +115 -0
  332. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +89 -0
  333. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +37 -0
  334. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +177 -0
  335. data/lib/datadog/tracing/contrib/ethon/ext.rb +24 -0
  336. data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
  337. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +96 -0
  338. data/lib/datadog/tracing/contrib/ethon/patcher.rb +32 -0
  339. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +38 -0
  340. data/lib/datadog/tracing/contrib/excon/ext.rb +21 -0
  341. data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
  342. data/lib/datadog/tracing/contrib/excon/middleware.rb +170 -0
  343. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  344. data/lib/datadog/tracing/contrib/extensions.rb +199 -0
  345. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +42 -0
  346. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  347. data/lib/datadog/tracing/contrib/faraday/ext.rb +21 -0
  348. data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
  349. data/lib/datadog/tracing/contrib/faraday/middleware.rb +93 -0
  350. data/lib/datadog/tracing/contrib/faraday/patcher.rb +57 -0
  351. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  352. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +42 -0
  353. data/lib/datadog/tracing/contrib/grape/endpoint.rb +253 -0
  354. data/lib/datadog/tracing/contrib/grape/ext.rb +28 -0
  355. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
  356. data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
  357. data/lib/datadog/tracing/contrib/grape/patcher.rb +34 -0
  358. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +36 -0
  359. data/lib/datadog/tracing/contrib/graphql/ext.rb +19 -0
  360. data/lib/datadog/tracing/contrib/graphql/integration.rb +44 -0
  361. data/lib/datadog/tracing/contrib/graphql/patcher.rb +92 -0
  362. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +37 -0
  363. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +84 -0
  364. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +90 -0
  365. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +104 -0
  366. data/lib/datadog/tracing/contrib/grpc/ext.rb +23 -0
  367. data/lib/datadog/tracing/contrib/grpc/integration.rb +43 -0
  368. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  369. data/lib/datadog/tracing/contrib/grpc/patcher.rb +38 -0
  370. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +44 -0
  371. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +37 -0
  372. data/lib/datadog/tracing/contrib/http/ext.rb +21 -0
  373. data/lib/datadog/tracing/contrib/http/instrumentation.rb +139 -0
  374. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  375. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  376. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  377. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +37 -0
  378. data/lib/datadog/tracing/contrib/httpclient/ext.rb +21 -0
  379. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +117 -0
  380. data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
  381. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
  382. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +37 -0
  383. data/lib/datadog/tracing/contrib/httprb/ext.rb +21 -0
  384. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +128 -0
  385. data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
  386. data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
  387. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  388. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +35 -0
  389. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +18 -0
  390. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  391. data/lib/datadog/tracing/contrib/kafka/event.rb +52 -0
  392. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
  393. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
  394. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
  395. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
  396. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
  397. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
  398. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
  399. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +40 -0
  400. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +43 -0
  401. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  402. data/lib/datadog/tracing/contrib/kafka/ext.rb +52 -0
  403. data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
  404. data/lib/datadog/tracing/contrib/kafka/patcher.rb +30 -0
  405. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +23 -0
  406. data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
  407. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +46 -0
  408. data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
  409. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  410. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +38 -0
  411. data/lib/datadog/tracing/contrib/mongodb/ext.rb +27 -0
  412. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  413. data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
  414. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
  415. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  416. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +121 -0
  417. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +35 -0
  418. data/lib/datadog/tracing/contrib/mysql2/ext.rb +22 -0
  419. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +62 -0
  420. data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
  421. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  422. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  423. data/lib/datadog/tracing/contrib/patcher.rb +74 -0
  424. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +35 -0
  425. data/lib/datadog/tracing/contrib/presto/ext.rb +32 -0
  426. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +125 -0
  427. data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
  428. data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
  429. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +40 -0
  430. data/lib/datadog/tracing/contrib/qless/ext.rb +26 -0
  431. data/lib/datadog/tracing/contrib/qless/integration.rb +43 -0
  432. data/lib/datadog/tracing/contrib/qless/patcher.rb +39 -0
  433. data/lib/datadog/tracing/contrib/qless/qless_job.rb +75 -0
  434. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +32 -0
  435. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +49 -0
  436. data/lib/datadog/tracing/contrib/que/ext.rb +34 -0
  437. data/lib/datadog/tracing/contrib/que/integration.rb +46 -0
  438. data/lib/datadog/tracing/contrib/que/patcher.rb +29 -0
  439. data/lib/datadog/tracing/contrib/que/tracer.rb +61 -0
  440. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +35 -0
  441. data/lib/datadog/tracing/contrib/racecar/event.rb +79 -0
  442. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +35 -0
  443. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
  444. data/lib/datadog/tracing/contrib/racecar/events/message.rb +35 -0
  445. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  446. data/lib/datadog/tracing/contrib/racecar/ext.rb +31 -0
  447. data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
  448. data/lib/datadog/tracing/contrib/racecar/patcher.rb +30 -0
  449. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +51 -0
  450. data/lib/datadog/tracing/contrib/rack/ext.rb +25 -0
  451. data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
  452. data/lib/datadog/tracing/contrib/rack/middlewares.rb +255 -0
  453. data/lib/datadog/tracing/contrib/rack/patcher.rb +109 -0
  454. data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
  455. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +12 -0
  456. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +71 -0
  457. data/lib/datadog/tracing/contrib/rails/ext.rb +19 -0
  458. data/lib/datadog/tracing/contrib/rails/framework.rb +152 -0
  459. data/lib/datadog/tracing/contrib/rails/integration.rb +49 -0
  460. data/lib/datadog/tracing/contrib/rails/log_injection.rb +47 -0
  461. data/lib/datadog/tracing/contrib/rails/middlewares.rb +47 -0
  462. data/lib/datadog/tracing/contrib/rails/patcher.rb +121 -0
  463. data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
  464. data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
  465. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +36 -0
  466. data/lib/datadog/tracing/contrib/rake/ext.rb +26 -0
  467. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +98 -0
  468. data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
  469. data/lib/datadog/tracing/contrib/rake/patcher.rb +35 -0
  470. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
  471. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +40 -0
  472. data/lib/datadog/tracing/contrib/redis/ext.rb +26 -0
  473. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +78 -0
  474. data/lib/datadog/tracing/contrib/redis/integration.rb +47 -0
  475. data/lib/datadog/tracing/contrib/redis/patcher.rb +36 -0
  476. data/lib/datadog/tracing/contrib/redis/quantize.rb +79 -0
  477. data/lib/datadog/tracing/contrib/redis/tags.rb +54 -0
  478. data/lib/{ddtrace → datadog/tracing}/contrib/redis/vendor/LICENSE +0 -0
  479. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +162 -0
  480. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  481. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  482. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +37 -0
  483. data/lib/datadog/tracing/contrib/resque/ext.rb +21 -0
  484. data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
  485. data/lib/datadog/tracing/contrib/resque/patcher.rb +30 -0
  486. data/lib/datadog/tracing/contrib/resque/resque_job.rb +103 -0
  487. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +36 -0
  488. data/lib/datadog/tracing/contrib/rest_client/ext.rb +21 -0
  489. data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
  490. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +30 -0
  491. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +105 -0
  492. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +23 -0
  493. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
  494. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +50 -0
  495. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
  496. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  497. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +33 -0
  498. data/lib/datadog/tracing/contrib/sequel/database.rb +60 -0
  499. data/lib/datadog/tracing/contrib/sequel/dataset.rb +65 -0
  500. data/lib/datadog/tracing/contrib/sequel/ext.rb +22 -0
  501. data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
  502. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  503. data/lib/datadog/tracing/contrib/sequel/utils.rb +87 -0
  504. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +38 -0
  505. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +25 -0
  506. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
  507. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  508. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +61 -0
  509. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +53 -0
  510. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +43 -0
  511. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +38 -0
  512. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +53 -0
  513. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +71 -0
  514. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +34 -0
  515. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +34 -0
  516. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +33 -0
  517. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +79 -0
  518. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +44 -0
  519. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +43 -0
  520. data/lib/datadog/tracing/contrib/sinatra/env.rb +66 -0
  521. data/lib/datadog/tracing/contrib/sinatra/ext.rb +32 -0
  522. data/lib/datadog/tracing/contrib/sinatra/framework.rb +107 -0
  523. data/lib/datadog/tracing/contrib/sinatra/headers.rb +35 -0
  524. data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
  525. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +77 -0
  526. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +159 -0
  527. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +123 -0
  528. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +38 -0
  529. data/lib/datadog/tracing/contrib/sneakers/ext.rb +26 -0
  530. data/lib/datadog/tracing/contrib/sneakers/integration.rb +46 -0
  531. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +30 -0
  532. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +58 -0
  533. data/lib/datadog/tracing/contrib/status_code_matcher.rb +75 -0
  534. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +35 -0
  535. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  536. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +27 -0
  537. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +105 -0
  538. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
  539. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +38 -0
  540. data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
  541. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
  542. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +99 -0
  543. data/lib/datadog/tracing/contrib.rb +76 -0
  544. data/lib/datadog/tracing/correlation.rb +100 -0
  545. data/lib/datadog/tracing/distributed/headers/b3.rb +55 -0
  546. data/lib/datadog/tracing/distributed/headers/b3_single.rb +67 -0
  547. data/lib/datadog/tracing/distributed/headers/datadog.rb +52 -0
  548. data/lib/datadog/tracing/distributed/headers/ext.rb +31 -0
  549. data/lib/datadog/tracing/distributed/helpers.rb +44 -0
  550. data/lib/datadog/tracing/distributed/parser.rb +70 -0
  551. data/lib/datadog/tracing/event.rb +77 -0
  552. data/lib/datadog/tracing/flush.rb +74 -0
  553. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  554. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  555. data/lib/datadog/tracing/metadata/ext.rb +151 -0
  556. data/lib/datadog/tracing/metadata/tagging.rb +110 -0
  557. data/lib/datadog/tracing/metadata.rb +20 -0
  558. data/lib/datadog/tracing/pipeline/span_filter.rb +42 -0
  559. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  560. data/lib/datadog/tracing/pipeline.rb +65 -0
  561. data/lib/datadog/tracing/propagation/grpc.rb +88 -0
  562. data/lib/datadog/tracing/propagation/http.rb +109 -0
  563. data/lib/datadog/tracing/runtime/metrics.rb +19 -0
  564. data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
  565. data/lib/datadog/tracing/sampling/ext.rb +27 -0
  566. data/lib/datadog/tracing/sampling/matcher.rb +68 -0
  567. data/lib/datadog/tracing/sampling/priority_sampler.rb +113 -0
  568. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +97 -0
  569. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +41 -0
  570. data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
  571. data/lib/datadog/tracing/sampling/rate_sampler.rb +55 -0
  572. data/lib/datadog/tracing/sampling/rule.rb +70 -0
  573. data/lib/datadog/tracing/sampling/rule_sampler.rb +133 -0
  574. data/lib/datadog/tracing/sampling/sampler.rb +44 -0
  575. data/lib/datadog/tracing/span.rb +212 -0
  576. data/lib/datadog/tracing/span_operation.rb +521 -0
  577. data/lib/datadog/tracing/sync_writer.rb +69 -0
  578. data/lib/datadog/tracing/trace_digest.rb +60 -0
  579. data/lib/datadog/tracing/trace_operation.rb +432 -0
  580. data/lib/datadog/tracing/trace_segment.rb +207 -0
  581. data/lib/datadog/tracing/tracer.rb +505 -0
  582. data/lib/datadog/tracing/workers/trace_writer.rb +195 -0
  583. data/lib/datadog/tracing/workers.rb +125 -0
  584. data/lib/datadog/tracing/writer.rb +180 -0
  585. data/lib/datadog/tracing.rb +142 -0
  586. data/lib/ddtrace/auto_instrument.rb +6 -2
  587. data/lib/ddtrace/auto_instrument_base.rb +1 -0
  588. data/lib/ddtrace/profiling/preload.rb +2 -2
  589. data/lib/ddtrace/transport/ext.rb +35 -0
  590. data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
  591. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  592. data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
  593. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -2
  594. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  595. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  596. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  597. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  598. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  599. data/lib/ddtrace/transport/http/api.rb +5 -11
  600. data/lib/ddtrace/transport/http/builder.rb +3 -2
  601. data/lib/ddtrace/transport/http/client.rb +1 -0
  602. data/lib/ddtrace/transport/http/env.rb +1 -0
  603. data/lib/ddtrace/transport/http/response.rb +1 -0
  604. data/lib/ddtrace/transport/http/statistics.rb +1 -0
  605. data/lib/ddtrace/transport/http/traces.rb +3 -0
  606. data/lib/ddtrace/transport/http.rb +33 -28
  607. data/lib/ddtrace/transport/io/client.rb +1 -0
  608. data/lib/ddtrace/transport/io/response.rb +1 -0
  609. data/lib/ddtrace/transport/io/traces.rb +2 -1
  610. data/lib/ddtrace/transport/io.rb +3 -2
  611. data/lib/ddtrace/transport/parcel.rb +2 -0
  612. data/lib/ddtrace/transport/request.rb +1 -0
  613. data/lib/ddtrace/transport/response.rb +1 -0
  614. data/lib/ddtrace/transport/serializable_trace.rb +118 -0
  615. data/lib/ddtrace/transport/statistics.rb +6 -4
  616. data/lib/ddtrace/transport/trace_formatter.rb +187 -0
  617. data/lib/ddtrace/transport/traces.rb +15 -5
  618. data/lib/ddtrace/version.rb +15 -13
  619. data/lib/ddtrace.rb +8 -48
  620. metadata +565 -488
  621. data/.yardopts +0 -5
  622. data/lib/datadog/ci/context_flush.rb +0 -29
  623. data/lib/datadog/contrib.rb +0 -71
  624. data/lib/ddtrace/analytics.rb +0 -39
  625. data/lib/ddtrace/buffer.rb +0 -340
  626. data/lib/ddtrace/chunker.rb +0 -35
  627. data/lib/ddtrace/configuration/agent_settings_resolver.rb +0 -309
  628. data/lib/ddtrace/configuration/base.rb +0 -82
  629. data/lib/ddtrace/configuration/components.rb +0 -292
  630. data/lib/ddtrace/configuration/dependency_resolver.rb +0 -25
  631. data/lib/ddtrace/configuration/option.rb +0 -65
  632. data/lib/ddtrace/configuration/option_definition.rb +0 -122
  633. data/lib/ddtrace/configuration/option_definition_set.rb +0 -19
  634. data/lib/ddtrace/configuration/option_set.rb +0 -7
  635. data/lib/ddtrace/configuration/options.rb +0 -112
  636. data/lib/ddtrace/configuration/pin_setup.rb +0 -32
  637. data/lib/ddtrace/configuration/settings.rb +0 -413
  638. data/lib/ddtrace/configuration.rb +0 -195
  639. data/lib/ddtrace/context.rb +0 -334
  640. data/lib/ddtrace/context_flush.rb +0 -82
  641. data/lib/ddtrace/context_provider.rb +0 -62
  642. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -31
  643. data/lib/ddtrace/contrib/action_cable/event.rb +0 -67
  644. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -50
  645. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -56
  646. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -51
  647. data/lib/ddtrace/contrib/action_cable/events.rb +0 -34
  648. data/lib/ddtrace/contrib/action_cable/ext.rb +0 -27
  649. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -78
  650. data/lib/ddtrace/contrib/action_cable/integration.rb +0 -46
  651. data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -29
  652. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +0 -32
  653. data/lib/ddtrace/contrib/action_mailer/event.rb +0 -50
  654. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +0 -54
  655. data/lib/ddtrace/contrib/action_mailer/events/process.rb +0 -41
  656. data/lib/ddtrace/contrib/action_mailer/events.rb +0 -31
  657. data/lib/ddtrace/contrib/action_mailer/ext.rb +0 -32
  658. data/lib/ddtrace/contrib/action_mailer/integration.rb +0 -45
  659. data/lib/ddtrace/contrib/action_mailer/patcher.rb +0 -27
  660. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -157
  661. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -26
  662. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -33
  663. data/lib/ddtrace/contrib/action_pack/ext.rb +0 -20
  664. data/lib/ddtrace/contrib/action_pack/integration.rb +0 -46
  665. data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -24
  666. data/lib/ddtrace/contrib/action_pack/utils.rb +0 -37
  667. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -32
  668. data/lib/ddtrace/contrib/action_view/event.rb +0 -36
  669. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -47
  670. data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -50
  671. data/lib/ddtrace/contrib/action_view/events.rb +0 -31
  672. data/lib/ddtrace/contrib/action_view/ext.rb +0 -21
  673. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -75
  674. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -168
  675. data/lib/ddtrace/contrib/action_view/integration.rb +0 -53
  676. data/lib/ddtrace/contrib/action_view/patcher.rb +0 -48
  677. data/lib/ddtrace/contrib/action_view/utils.rb +0 -33
  678. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +0 -33
  679. data/lib/ddtrace/contrib/active_job/event.rb +0 -54
  680. data/lib/ddtrace/contrib/active_job/events/discard.rb +0 -46
  681. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +0 -45
  682. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +0 -45
  683. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +0 -47
  684. data/lib/ddtrace/contrib/active_job/events/perform.rb +0 -45
  685. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +0 -46
  686. data/lib/ddtrace/contrib/active_job/events.rb +0 -39
  687. data/lib/ddtrace/contrib/active_job/ext.rb +0 -32
  688. data/lib/ddtrace/contrib/active_job/integration.rb +0 -46
  689. data/lib/ddtrace/contrib/active_job/log_injection.rb +0 -21
  690. data/lib/ddtrace/contrib/active_job/patcher.rb +0 -33
  691. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -31
  692. data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -69
  693. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -33
  694. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -36
  695. data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -31
  696. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -21
  697. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -41
  698. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -30
  699. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +0 -31
  700. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -135
  701. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -36
  702. data/lib/ddtrace/contrib/active_record/event.rb +0 -31
  703. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -61
  704. data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -69
  705. data/lib/ddtrace/contrib/active_record/events.rb +0 -31
  706. data/lib/ddtrace/contrib/active_record/ext.rb +0 -25
  707. data/lib/ddtrace/contrib/active_record/integration.rb +0 -54
  708. data/lib/ddtrace/contrib/active_record/patcher.rb +0 -24
  709. data/lib/ddtrace/contrib/active_record/utils.rb +0 -124
  710. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -259
  711. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -70
  712. data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -44
  713. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -31
  714. data/lib/ddtrace/contrib/active_support/ext.rb +0 -28
  715. data/lib/ddtrace/contrib/active_support/integration.rb +0 -47
  716. data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -76
  717. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -68
  718. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -164
  719. data/lib/ddtrace/contrib/active_support/patcher.rb +0 -24
  720. data/lib/ddtrace/contrib/analytics.rb +0 -25
  721. data/lib/ddtrace/contrib/auto_instrument.rb +0 -48
  722. data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -31
  723. data/lib/ddtrace/contrib/aws/ext.rb +0 -24
  724. data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -91
  725. data/lib/ddtrace/contrib/aws/integration.rb +0 -43
  726. data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -57
  727. data/lib/ddtrace/contrib/aws/patcher.rb +0 -54
  728. data/lib/ddtrace/contrib/aws/services.rb +0 -119
  729. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -21
  730. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -42
  731. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -13
  732. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -24
  733. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -39
  734. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -30
  735. data/lib/ddtrace/contrib/configurable.rb +0 -103
  736. data/lib/ddtrace/contrib/configuration/resolver.rb +0 -82
  737. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -40
  738. data/lib/ddtrace/contrib/configuration/settings.rb +0 -56
  739. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -31
  740. data/lib/ddtrace/contrib/dalli/ext.rb +0 -21
  741. data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -55
  742. data/lib/ddtrace/contrib/dalli/integration.rb +0 -39
  743. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -26
  744. data/lib/ddtrace/contrib/dalli/quantize.rb +0 -23
  745. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -33
  746. data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -24
  747. data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -39
  748. data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -29
  749. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -85
  750. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -32
  751. data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -23
  752. data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -40
  753. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -123
  754. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -84
  755. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -33
  756. data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -152
  757. data/lib/ddtrace/contrib/ethon/ext.rb +0 -20
  758. data/lib/ddtrace/contrib/ethon/integration.rb +0 -44
  759. data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -85
  760. data/lib/ddtrace/contrib/ethon/patcher.rb +0 -27
  761. data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -34
  762. data/lib/ddtrace/contrib/excon/ext.rb +0 -18
  763. data/lib/ddtrace/contrib/excon/integration.rb +0 -44
  764. data/lib/ddtrace/contrib/excon/middleware.rb +0 -164
  765. data/lib/ddtrace/contrib/excon/patcher.rb +0 -28
  766. data/lib/ddtrace/contrib/extensions.rb +0 -169
  767. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -39
  768. data/lib/ddtrace/contrib/faraday/connection.rb +0 -19
  769. data/lib/ddtrace/contrib/faraday/ext.rb +0 -18
  770. data/lib/ddtrace/contrib/faraday/integration.rb +0 -44
  771. data/lib/ddtrace/contrib/faraday/middleware.rb +0 -86
  772. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -54
  773. data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -19
  774. data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -39
  775. data/lib/ddtrace/contrib/grape/endpoint.rb +0 -246
  776. data/lib/ddtrace/contrib/grape/ext.rb +0 -24
  777. data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -34
  778. data/lib/ddtrace/contrib/grape/integration.rb +0 -40
  779. data/lib/ddtrace/contrib/grape/patcher.rb +0 -32
  780. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -33
  781. data/lib/ddtrace/contrib/graphql/ext.rb +0 -17
  782. data/lib/ddtrace/contrib/graphql/integration.rb +0 -40
  783. data/lib/ddtrace/contrib/graphql/patcher.rb +0 -61
  784. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -32
  785. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -59
  786. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -80
  787. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -79
  788. data/lib/ddtrace/contrib/grpc/ext.rb +0 -19
  789. data/lib/ddtrace/contrib/grpc/integration.rb +0 -39
  790. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -50
  791. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -34
  792. data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -38
  793. data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -33
  794. data/lib/ddtrace/contrib/http/ext.rb +0 -18
  795. data/lib/ddtrace/contrib/http/instrumentation.rb +0 -180
  796. data/lib/ddtrace/contrib/http/integration.rb +0 -46
  797. data/lib/ddtrace/contrib/http/patcher.rb +0 -27
  798. data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -11
  799. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +0 -33
  800. data/lib/ddtrace/contrib/httpclient/ext.rb +0 -18
  801. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +0 -148
  802. data/lib/ddtrace/contrib/httpclient/integration.rb +0 -44
  803. data/lib/ddtrace/contrib/httpclient/patcher.rb +0 -39
  804. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +0 -33
  805. data/lib/ddtrace/contrib/httprb/ext.rb +0 -18
  806. data/lib/ddtrace/contrib/httprb/instrumentation.rb +0 -158
  807. data/lib/ddtrace/contrib/httprb/integration.rb +0 -44
  808. data/lib/ddtrace/contrib/httprb/patcher.rb +0 -39
  809. data/lib/ddtrace/contrib/integration.rb +0 -17
  810. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +0 -31
  811. data/lib/ddtrace/contrib/kafka/consumer_event.rb +0 -15
  812. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +0 -15
  813. data/lib/ddtrace/contrib/kafka/event.rb +0 -52
  814. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +0 -35
  815. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +0 -42
  816. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +0 -40
  817. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +0 -40
  818. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +0 -30
  819. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +0 -30
  820. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +0 -30
  821. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +0 -33
  822. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +0 -36
  823. data/lib/ddtrace/contrib/kafka/events.rb +0 -45
  824. data/lib/ddtrace/contrib/kafka/ext.rb +0 -42
  825. data/lib/ddtrace/contrib/kafka/integration.rb +0 -40
  826. data/lib/ddtrace/contrib/kafka/patcher.rb +0 -27
  827. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +0 -19
  828. data/lib/ddtrace/contrib/lograge/ext.rb +0 -11
  829. data/lib/ddtrace/contrib/lograge/instrumentation.rb +0 -39
  830. data/lib/ddtrace/contrib/lograge/integration.rb +0 -46
  831. data/lib/ddtrace/contrib/lograge/patcher.rb +0 -26
  832. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -34
  833. data/lib/ddtrace/contrib/mongodb/ext.rb +0 -24
  834. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -70
  835. data/lib/ddtrace/contrib/mongodb/integration.rb +0 -44
  836. data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -69
  837. data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -32
  838. data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -112
  839. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -31
  840. data/lib/ddtrace/contrib/mysql2/ext.rb +0 -19
  841. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -65
  842. data/lib/ddtrace/contrib/mysql2/integration.rb +0 -39
  843. data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -28
  844. data/lib/ddtrace/contrib/patchable.rb +0 -71
  845. data/lib/ddtrace/contrib/patcher.rb +0 -66
  846. data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -31
  847. data/lib/ddtrace/contrib/presto/ext.rb +0 -29
  848. data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -111
  849. data/lib/ddtrace/contrib/presto/integration.rb +0 -39
  850. data/lib/ddtrace/contrib/presto/patcher.rb +0 -34
  851. data/lib/ddtrace/contrib/qless/configuration/settings.rb +0 -36
  852. data/lib/ddtrace/contrib/qless/ext.rb +0 -21
  853. data/lib/ddtrace/contrib/qless/integration.rb +0 -39
  854. data/lib/ddtrace/contrib/qless/patcher.rb +0 -35
  855. data/lib/ddtrace/contrib/qless/qless_job.rb +0 -74
  856. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +0 -34
  857. data/lib/ddtrace/contrib/que/configuration/settings.rb +0 -44
  858. data/lib/ddtrace/contrib/que/ext.rb +0 -31
  859. data/lib/ddtrace/contrib/que/integration.rb +0 -43
  860. data/lib/ddtrace/contrib/que/patcher.rb +0 -25
  861. data/lib/ddtrace/contrib/que/tracer.rb +0 -58
  862. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -31
  863. data/lib/ddtrace/contrib/racecar/event.rb +0 -77
  864. data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -28
  865. data/lib/ddtrace/contrib/racecar/events/consume.rb +0 -28
  866. data/lib/ddtrace/contrib/racecar/events/message.rb +0 -28
  867. data/lib/ddtrace/contrib/racecar/events.rb +0 -33
  868. data/lib/ddtrace/contrib/racecar/ext.rb +0 -26
  869. data/lib/ddtrace/contrib/racecar/integration.rb +0 -40
  870. data/lib/ddtrace/contrib/racecar/patcher.rb +0 -27
  871. data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -47
  872. data/lib/ddtrace/contrib/rack/ext.rb +0 -22
  873. data/lib/ddtrace/contrib/rack/integration.rb +0 -46
  874. data/lib/ddtrace/contrib/rack/middlewares.rb +0 -288
  875. data/lib/ddtrace/contrib/rack/patcher.rb +0 -106
  876. data/lib/ddtrace/contrib/rack/request_queue.rb +0 -45
  877. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +0 -10
  878. data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -101
  879. data/lib/ddtrace/contrib/rails/ext.rb +0 -18
  880. data/lib/ddtrace/contrib/rails/framework.rb +0 -172
  881. data/lib/ddtrace/contrib/rails/integration.rb +0 -45
  882. data/lib/ddtrace/contrib/rails/log_injection.rb +0 -42
  883. data/lib/ddtrace/contrib/rails/middlewares.rb +0 -44
  884. data/lib/ddtrace/contrib/rails/patcher.rb +0 -119
  885. data/lib/ddtrace/contrib/rails/railtie.rb +0 -18
  886. data/lib/ddtrace/contrib/rails/utils.rb +0 -25
  887. data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -32
  888. data/lib/ddtrace/contrib/rake/ext.rb +0 -22
  889. data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -91
  890. data/lib/ddtrace/contrib/rake/integration.rb +0 -39
  891. data/lib/ddtrace/contrib/rake/patcher.rb +0 -31
  892. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -46
  893. data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -36
  894. data/lib/ddtrace/contrib/redis/ext.rb +0 -23
  895. data/lib/ddtrace/contrib/redis/instrumentation.rb +0 -90
  896. data/lib/ddtrace/contrib/redis/integration.rb +0 -43
  897. data/lib/ddtrace/contrib/redis/patcher.rb +0 -33
  898. data/lib/ddtrace/contrib/redis/quantize.rb +0 -76
  899. data/lib/ddtrace/contrib/redis/tags.rb +0 -47
  900. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -159
  901. data/lib/ddtrace/contrib/registerable.rb +0 -33
  902. data/lib/ddtrace/contrib/registry.rb +0 -43
  903. data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -49
  904. data/lib/ddtrace/contrib/resque/ext.rb +0 -18
  905. data/lib/ddtrace/contrib/resque/integration.rb +0 -44
  906. data/lib/ddtrace/contrib/resque/patcher.rb +0 -30
  907. data/lib/ddtrace/contrib/resque/resque_job.rb +0 -104
  908. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -32
  909. data/lib/ddtrace/contrib/rest_client/ext.rb +0 -18
  910. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -39
  911. data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -25
  912. data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -92
  913. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +0 -19
  914. data/lib/ddtrace/contrib/semantic_logger/ext.rb +0 -11
  915. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +0 -43
  916. data/lib/ddtrace/contrib/semantic_logger/integration.rb +0 -48
  917. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +0 -26
  918. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -29
  919. data/lib/ddtrace/contrib/sequel/database.rb +0 -64
  920. data/lib/ddtrace/contrib/sequel/dataset.rb +0 -64
  921. data/lib/ddtrace/contrib/sequel/ext.rb +0 -20
  922. data/lib/ddtrace/contrib/sequel/integration.rb +0 -39
  923. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -34
  924. data/lib/ddtrace/contrib/sequel/utils.rb +0 -75
  925. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -32
  926. data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -22
  927. data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -40
  928. data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -25
  929. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -56
  930. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -44
  931. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -38
  932. data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -31
  933. data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -49
  934. data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -68
  935. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +0 -30
  936. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +0 -30
  937. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +0 -29
  938. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -66
  939. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -45
  940. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -40
  941. data/lib/ddtrace/contrib/sinatra/env.rb +0 -59
  942. data/lib/ddtrace/contrib/sinatra/ext.rb +0 -28
  943. data/lib/ddtrace/contrib/sinatra/headers.rb +0 -30
  944. data/lib/ddtrace/contrib/sinatra/integration.rb +0 -39
  945. data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -30
  946. data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -150
  947. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -112
  948. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +0 -34
  949. data/lib/ddtrace/contrib/sneakers/ext.rb +0 -23
  950. data/lib/ddtrace/contrib/sneakers/integration.rb +0 -42
  951. data/lib/ddtrace/contrib/sneakers/patcher.rb +0 -25
  952. data/lib/ddtrace/contrib/sneakers/tracer.rb +0 -54
  953. data/lib/ddtrace/contrib/status_code_matcher.rb +0 -70
  954. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -31
  955. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -25
  956. data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -22
  957. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -89
  958. data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -39
  959. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -44
  960. data/lib/ddtrace/correlation.rb +0 -40
  961. data/lib/ddtrace/diagnostics/environment_logger.rb +0 -280
  962. data/lib/ddtrace/diagnostics/health.rb +0 -34
  963. data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -45
  964. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -57
  965. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -43
  966. data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -72
  967. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -44
  968. data/lib/ddtrace/encoding.rb +0 -72
  969. data/lib/ddtrace/error.rb +0 -97
  970. data/lib/ddtrace/event.rb +0 -53
  971. data/lib/ddtrace/ext/analytics.rb +0 -13
  972. data/lib/ddtrace/ext/app_types.rb +0 -12
  973. data/lib/ddtrace/ext/correlation.rb +0 -12
  974. data/lib/ddtrace/ext/diagnostics.rb +0 -37
  975. data/lib/ddtrace/ext/distributed.rb +0 -40
  976. data/lib/ddtrace/ext/environment.rb +0 -24
  977. data/lib/ddtrace/ext/errors.rb +0 -11
  978. data/lib/ddtrace/ext/forced_tracing.rb +0 -26
  979. data/lib/ddtrace/ext/git.rb +0 -32
  980. data/lib/ddtrace/ext/http.rb +0 -47
  981. data/lib/ddtrace/ext/integration.rb +0 -9
  982. data/lib/ddtrace/ext/manual_tracing.rb +0 -10
  983. data/lib/ddtrace/ext/metrics.rb +0 -16
  984. data/lib/ddtrace/ext/net.rb +0 -11
  985. data/lib/ddtrace/ext/priority.rb +0 -19
  986. data/lib/ddtrace/ext/profiling.rb +0 -53
  987. data/lib/ddtrace/ext/runtime.rb +0 -25
  988. data/lib/ddtrace/ext/sampling.rb +0 -17
  989. data/lib/ddtrace/ext/sql.rb +0 -9
  990. data/lib/ddtrace/ext/test.rb +0 -9
  991. data/lib/ddtrace/ext/transport.rb +0 -32
  992. data/lib/ddtrace/forced_tracing.rb +0 -39
  993. data/lib/ddtrace/logger.rb +0 -41
  994. data/lib/ddtrace/metrics.rb +0 -282
  995. data/lib/ddtrace/opentelemetry/extensions.rb +0 -14
  996. data/lib/ddtrace/opentelemetry/span.rb +0 -34
  997. data/lib/ddtrace/opentracer/binary_propagator.rb +0 -25
  998. data/lib/ddtrace/opentracer/carrier.rb +0 -7
  999. data/lib/ddtrace/opentracer/distributed_headers.rb +0 -56
  1000. data/lib/ddtrace/opentracer/global_tracer.rb +0 -16
  1001. data/lib/ddtrace/opentracer/propagator.rb +0 -23
  1002. data/lib/ddtrace/opentracer/rack_propagator.rb +0 -61
  1003. data/lib/ddtrace/opentracer/scope.rb +0 -16
  1004. data/lib/ddtrace/opentracer/scope_manager.rb +0 -7
  1005. data/lib/ddtrace/opentracer/span.rb +0 -95
  1006. data/lib/ddtrace/opentracer/span_context.rb +0 -15
  1007. data/lib/ddtrace/opentracer/span_context_factory.rb +0 -24
  1008. data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -76
  1009. data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -32
  1010. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -41
  1011. data/lib/ddtrace/opentracer/tracer.rb +0 -209
  1012. data/lib/ddtrace/opentracer.rb +0 -22
  1013. data/lib/ddtrace/patcher.rb +0 -69
  1014. data/lib/ddtrace/pin.rb +0 -86
  1015. data/lib/ddtrace/pipeline/span_filter.rb +0 -39
  1016. data/lib/ddtrace/pipeline/span_processor.rb +0 -21
  1017. data/lib/ddtrace/pipeline.rb +0 -47
  1018. data/lib/ddtrace/profiling/backtrace_location.rb +0 -33
  1019. data/lib/ddtrace/profiling/buffer.rb +0 -42
  1020. data/lib/ddtrace/profiling/collectors/stack.rb +0 -297
  1021. data/lib/ddtrace/profiling/encoding/profile.rb +0 -46
  1022. data/lib/ddtrace/profiling/event.rb +0 -14
  1023. data/lib/ddtrace/profiling/events/stack.rb +0 -81
  1024. data/lib/ddtrace/profiling/exporter.rb +0 -24
  1025. data/lib/ddtrace/profiling/ext/forking.rb +0 -98
  1026. data/lib/ddtrace/profiling/flush.rb +0 -44
  1027. data/lib/ddtrace/profiling/native_extension.rb +0 -40
  1028. data/lib/ddtrace/profiling/pprof/builder.rb +0 -126
  1029. data/lib/ddtrace/profiling/pprof/converter.rb +0 -103
  1030. data/lib/ddtrace/profiling/pprof/message_set.rb +0 -15
  1031. data/lib/ddtrace/profiling/pprof/payload.rb +0 -19
  1032. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +0 -82
  1033. data/lib/ddtrace/profiling/pprof/stack_sample.rb +0 -140
  1034. data/lib/ddtrace/profiling/pprof/string_table.rb +0 -11
  1035. data/lib/ddtrace/profiling/pprof/template.rb +0 -119
  1036. data/lib/ddtrace/profiling/profiler.rb +0 -31
  1037. data/lib/ddtrace/profiling/recorder.rb +0 -96
  1038. data/lib/ddtrace/profiling/scheduler.rb +0 -150
  1039. data/lib/ddtrace/profiling/tasks/setup.rb +0 -90
  1040. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +0 -42
  1041. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +0 -46
  1042. data/lib/ddtrace/profiling/transport/client.rb +0 -15
  1043. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +0 -94
  1044. data/lib/ddtrace/profiling/transport/http/api/instance.rb +0 -37
  1045. data/lib/ddtrace/profiling/transport/http/api/spec.rb +0 -41
  1046. data/lib/ddtrace/profiling/transport/http/api.rb +0 -44
  1047. data/lib/ddtrace/profiling/transport/http/builder.rb +0 -29
  1048. data/lib/ddtrace/profiling/transport/http/client.rb +0 -34
  1049. data/lib/ddtrace/profiling/transport/http/response.rb +0 -22
  1050. data/lib/ddtrace/profiling/transport/http.rb +0 -111
  1051. data/lib/ddtrace/profiling/transport/io/client.rb +0 -28
  1052. data/lib/ddtrace/profiling/transport/io/response.rb +0 -17
  1053. data/lib/ddtrace/profiling/transport/io.rb +0 -31
  1054. data/lib/ddtrace/profiling/transport/parcel.rb +0 -18
  1055. data/lib/ddtrace/profiling/transport/request.rb +0 -16
  1056. data/lib/ddtrace/profiling/transport/response.rb +0 -9
  1057. data/lib/ddtrace/profiling.rb +0 -149
  1058. data/lib/ddtrace/propagation/grpc_propagator.rb +0 -75
  1059. data/lib/ddtrace/propagation/http_propagator.rb +0 -91
  1060. data/lib/ddtrace/quantization/hash.rb +0 -104
  1061. data/lib/ddtrace/quantization/http.rb +0 -90
  1062. data/lib/ddtrace/runtime/metrics.rb +0 -135
  1063. data/lib/ddtrace/sampler.rb +0 -303
  1064. data/lib/ddtrace/sampling/matcher.rb +0 -58
  1065. data/lib/ddtrace/sampling/rate_limiter.rb +0 -177
  1066. data/lib/ddtrace/sampling/rule.rb +0 -62
  1067. data/lib/ddtrace/sampling/rule_sampler.rb +0 -133
  1068. data/lib/ddtrace/sampling.rb +0 -3
  1069. data/lib/ddtrace/span.rb +0 -445
  1070. data/lib/ddtrace/sync_writer.rb +0 -69
  1071. data/lib/ddtrace/tasks/exec.rb +0 -47
  1072. data/lib/ddtrace/tasks/help.rb +0 -15
  1073. data/lib/ddtrace/tracer.rb +0 -449
  1074. data/lib/ddtrace/utils/compression.rb +0 -28
  1075. data/lib/ddtrace/utils/database.rb +0 -26
  1076. data/lib/ddtrace/utils/forking.rb +0 -53
  1077. data/lib/ddtrace/utils/object_set.rb +0 -40
  1078. data/lib/ddtrace/utils/only_once.rb +0 -41
  1079. data/lib/ddtrace/utils/sequence.rb +0 -18
  1080. data/lib/ddtrace/utils/string_table.rb +0 -46
  1081. data/lib/ddtrace/utils/time.rb +0 -51
  1082. data/lib/ddtrace/utils.rb +0 -80
  1083. data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -302
  1084. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -117
  1085. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +0 -58
  1086. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +0 -136
  1087. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +0 -10
  1088. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +0 -9
  1089. data/lib/ddtrace/vendor/multipart-post/multipart.rb +0 -13
  1090. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +0 -33
  1091. data/lib/ddtrace/worker.rb +0 -21
  1092. data/lib/ddtrace/workers/async.rb +0 -175
  1093. data/lib/ddtrace/workers/interval_loop.rb +0 -116
  1094. data/lib/ddtrace/workers/polling.rb +0 -56
  1095. data/lib/ddtrace/workers/queue.rb +0 -41
  1096. data/lib/ddtrace/workers/runtime_metrics.rb +0 -65
  1097. data/lib/ddtrace/workers/trace_writer.rb +0 -200
  1098. data/lib/ddtrace/workers.rb +0 -123
  1099. data/lib/ddtrace/writer.rb +0 -200
@@ -0,0 +1,141 @@
1
+ # typed: true
2
+
3
+ require 'datadog/profiling/ext'
4
+ require 'datadog/profiling/events/stack'
5
+ require 'datadog/profiling/pprof/builder'
6
+ require 'datadog/profiling/pprof/converter'
7
+
8
+ module Datadog
9
+ module Profiling
10
+ module Pprof
11
+ # Builds a profile from a StackSample
12
+ #
13
+ # NOTE: This class may appear stateless but is in fact stateful; a new instance should be created for every
14
+ # encoded profile.
15
+ class StackSample < Converter
16
+ SAMPLE_TYPES = {
17
+ cpu_time_ns: [
18
+ Profiling::Ext::Pprof::VALUE_TYPE_CPU,
19
+ Profiling::Ext::Pprof::VALUE_UNIT_NANOSECONDS
20
+ ],
21
+ wall_time_ns: [
22
+ Profiling::Ext::Pprof::VALUE_TYPE_WALL,
23
+ Profiling::Ext::Pprof::VALUE_UNIT_NANOSECONDS
24
+ ]
25
+ }.freeze
26
+
27
+ def self.sample_value_types
28
+ SAMPLE_TYPES
29
+ end
30
+
31
+ def initialize(*_)
32
+ super
33
+
34
+ @most_recent_trace_samples = {}
35
+ @processed_unique_stacks = 0
36
+ @processed_with_trace = 0
37
+ end
38
+
39
+ def add_events!(stack_samples)
40
+ new_samples = build_samples(stack_samples)
41
+ builder.samples.concat(new_samples)
42
+ end
43
+
44
+ def stack_sample_group_key(stack_sample)
45
+ # We want to make sure we have the most recent sample for any trace.
46
+ # (This is done here to save an iteration over all samples.)
47
+ update_most_recent_trace_sample(stack_sample)
48
+
49
+ stack_sample.hash
50
+ end
51
+
52
+ # Track the most recent sample for each trace (identified by root span id)
53
+ def update_most_recent_trace_sample(stack_sample)
54
+ return unless stack_sample.root_span_id && stack_sample.trace_resource
55
+
56
+ # Update trace resource with most recent value
57
+ if (most_recent_trace_sample = @most_recent_trace_samples[stack_sample.root_span_id])
58
+ if most_recent_trace_sample.timestamp < stack_sample.timestamp
59
+ @most_recent_trace_samples[stack_sample.root_span_id] = stack_sample
60
+ end
61
+ else
62
+ # Add trace resource
63
+ @most_recent_trace_samples[stack_sample.root_span_id] = stack_sample
64
+ end
65
+ end
66
+
67
+ def build_samples(stack_samples)
68
+ groups = group_events(stack_samples, &method(:stack_sample_group_key))
69
+ groups.collect do |_group_key, group|
70
+ @processed_unique_stacks += 1
71
+ build_sample(group.sample, group.values)
72
+ end
73
+ end
74
+
75
+ def build_sample(stack_sample, values)
76
+ locations = builder.build_locations(
77
+ stack_sample.frames,
78
+ stack_sample.total_frame_count
79
+ )
80
+
81
+ Perftools::Profiles::Sample.new(
82
+ location_id: locations.collect { |location| location['id'.freeze] },
83
+ value: values,
84
+ label: build_sample_labels(stack_sample)
85
+ )
86
+ end
87
+
88
+ def build_event_values(stack_sample)
89
+ no_value = Profiling::Ext::Pprof::SAMPLE_VALUE_NO_VALUE
90
+ values = super(stack_sample)
91
+ values[sample_value_index(:cpu_time_ns)] = stack_sample.cpu_time_interval_ns || no_value
92
+ values[sample_value_index(:wall_time_ns)] = stack_sample.wall_time_interval_ns || no_value
93
+ values
94
+ end
95
+
96
+ def build_sample_labels(stack_sample)
97
+ labels = [
98
+ Perftools::Profiles::Label.new(
99
+ key: builder.string_table.fetch(Profiling::Ext::Pprof::LABEL_KEY_THREAD_ID),
100
+ str: builder.string_table.fetch(stack_sample.thread_id.to_s)
101
+ )
102
+ ]
103
+
104
+ root_span_id = stack_sample.root_span_id || 0
105
+ span_id = stack_sample.span_id || 0
106
+
107
+ if root_span_id != 0 && span_id != 0
108
+ @processed_with_trace += 1
109
+
110
+ labels << Perftools::Profiles::Label.new(
111
+ key: builder.string_table.fetch(Profiling::Ext::Pprof::LABEL_KEY_LOCAL_ROOT_SPAN_ID),
112
+ str: builder.string_table.fetch(root_span_id.to_s)
113
+ )
114
+
115
+ labels << Perftools::Profiles::Label.new(
116
+ key: builder.string_table.fetch(Profiling::Ext::Pprof::LABEL_KEY_SPAN_ID),
117
+ str: builder.string_table.fetch(span_id.to_s)
118
+ )
119
+
120
+ # Use most up-to-date trace resource, if available.
121
+ # Otherwise, use the trace resource provided.
122
+ trace_resource = @most_recent_trace_samples.fetch(stack_sample.root_span_id, stack_sample).trace_resource
123
+
124
+ if trace_resource && !trace_resource.empty?
125
+ labels << Perftools::Profiles::Label.new(
126
+ key: builder.string_table.fetch(Profiling::Ext::Pprof::LABEL_KEY_TRACE_ENDPOINT),
127
+ str: builder.string_table.fetch(trace_resource)
128
+ )
129
+ end
130
+ end
131
+
132
+ labels
133
+ end
134
+
135
+ def debug_statistics
136
+ "unique stacks: #{@processed_unique_stacks}, of which had active traces: #{@processed_with_trace}"
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,12 @@
1
+ # typed: strict
2
+
3
+ require 'datadog/core/utils/string_table'
4
+
5
+ module Datadog
6
+ module Profiling
7
+ module Pprof
8
+ # Tracks strings and returns IDs
9
+ class StringTable < Core::Utils::StringTable; end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,120 @@
1
+ # typed: false
2
+
3
+ require 'datadog/profiling/pprof/payload'
4
+ require 'datadog/profiling/pprof/message_set'
5
+ require 'datadog/profiling/pprof/builder'
6
+
7
+ require 'datadog/profiling/events/stack'
8
+ require 'datadog/profiling/pprof/stack_sample'
9
+
10
+ module Datadog
11
+ module Profiling
12
+ module Pprof
13
+ # Converts a collection of profiling events into a Perftools::Profiles::Profile
14
+ class Template
15
+ DEFAULT_MAPPINGS = {
16
+ Events::StackSample => Pprof::StackSample
17
+ }.freeze
18
+
19
+ attr_reader \
20
+ :builder,
21
+ :converters,
22
+ :sample_type_mappings
23
+
24
+ def self.for_event_classes(event_classes)
25
+ # Build a map of event class --> converter class
26
+ mappings = event_classes.each_with_object({}) do |event_class, m|
27
+ converter_class = DEFAULT_MAPPINGS[event_class]
28
+ raise NoProfilingEventConversionError, event_class unless converter_class
29
+
30
+ m[event_class] = converter_class
31
+ end
32
+
33
+ new(mappings)
34
+ end
35
+
36
+ def initialize(mappings)
37
+ @builder = Builder.new
38
+ @converters = Hash.new { |_h, event_class| raise NoProfilingEventConversionError, event_class }
39
+ @sample_type_mappings = Hash.new { |_h, type| raise UnknownSampleTypeMappingError, type }
40
+
41
+ # Add default mapping
42
+ builder.mappings.fetch($PROGRAM_NAME, &builder.method(:build_mapping))
43
+
44
+ # Combine all sample types from each converter class
45
+ types = mappings.values.each_with_object({}) do |converter_class, t|
46
+ t.merge!(converter_class.sample_value_types)
47
+ end
48
+
49
+ # Build the sample types into sample type objects
50
+ types.each do |type_name, type_args|
51
+ index = nil
52
+
53
+ sample_type = builder.sample_types.fetch(*type_args) do |id, type, unit|
54
+ index = id
55
+ builder.build_value_type(type, unit)
56
+ end
57
+
58
+ # Create mapping between the type and index to which its assigned.
59
+ # Do this for faster lookup while building profile sample values.
60
+ sample_type_mappings[type_name] = index || builder.sample_types.messages.index(sample_type)
61
+ end
62
+
63
+ # Freeze them so they can't be modified.
64
+ # We don't want the number of sample types to vary between samples within the same profile.
65
+ builder.sample_types.freeze
66
+ sample_type_mappings.freeze
67
+
68
+ # Add converters
69
+ mappings.each do |event_class, converter_class|
70
+ converters[event_class] = converter_class.new(builder, sample_type_mappings)
71
+ end
72
+
73
+ converters.freeze
74
+ end
75
+
76
+ def add_events!(event_class, events)
77
+ converters[event_class].add_events!(events)
78
+ end
79
+
80
+ def debug_statistics
81
+ converters.values.map(&:debug_statistics).join(', ')
82
+ end
83
+
84
+ def to_pprof(start:, finish:)
85
+ profile = builder.build_profile(start: start, finish: finish)
86
+ data = builder.encode_profile(profile)
87
+ types = sample_type_mappings.keys
88
+
89
+ Payload.new(data, types)
90
+ end
91
+
92
+ # Error when an unknown event type is given to be converted
93
+ class NoProfilingEventConversionError < ArgumentError
94
+ attr_reader :type
95
+
96
+ def initialize(type)
97
+ @type = type
98
+ end
99
+
100
+ def message
101
+ "Profiling event type '#{type}' cannot be converted to pprof."
102
+ end
103
+ end
104
+
105
+ # Error when the mapping of a sample type to value index is unknown
106
+ class UnknownSampleTypeMappingError < ArgumentError
107
+ attr_reader :type
108
+
109
+ def initialize(type)
110
+ @type = type
111
+ end
112
+
113
+ def message
114
+ "Mapping for sample value type '#{type}' is unknown."
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,5 @@
1
+ # typed: strict
2
+
3
+ require 'ddtrace'
4
+
5
+ Datadog::Profiling.start_if_enabled
@@ -0,0 +1,34 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ # Profiling entry point, which coordinates collectors and a scheduler
6
+ class Profiler
7
+ attr_reader \
8
+ :collectors,
9
+ :scheduler
10
+
11
+ def initialize(collectors, scheduler)
12
+ @collectors = collectors
13
+ @scheduler = scheduler
14
+ end
15
+
16
+ def start
17
+ collectors.each(&:start)
18
+ scheduler.start
19
+ end
20
+
21
+ def shutdown!
22
+ Datadog.logger.debug('Shutting down profiler')
23
+
24
+ collectors.each do |collector|
25
+ collector.enabled = false
26
+ collector.stop(true)
27
+ end
28
+
29
+ scheduler.enabled = false
30
+ scheduler.stop(true)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,117 @@
1
+ # typed: true
2
+
3
+ require 'datadog/profiling/buffer'
4
+ require 'datadog/profiling/flush'
5
+
6
+ module Datadog
7
+ module Profiling
8
+ # Stores profiling events gathered by `Collector`s
9
+ class Recorder
10
+ attr_reader :max_size
11
+
12
+ # TODO: Why does the Recorder directly reference the `code_provenance_collector`?
13
+ #
14
+ # For starters, this is weird/a problem because the relationship is supposed to go in the other direction:
15
+ # collectors are supposed to record their results in the `Recorder`, rather than the `Recorder` having to know
16
+ # about individual collectors.
17
+ #
18
+ # But the `code_provenance_collector` is different from other existing and potential collectors because it is not
19
+ # asynchronous. It does not gather data over time and record it as it goes. Instead, you call it once per profile,
20
+ # synchronously, and just use what it spits out.
21
+ #
22
+ # The current design of the `Recorder` is quite tied to the asynchronous model. Modifying our current design
23
+ # to support synchronous collectors is non-trivial, and I decided not to go through with it because we're
24
+ # soon going to replace the `Recorder` and many other existing classes with a
25
+ # [libddprof](https://github.com/datadog/libddprof)-based implementation, and thus I don't think massive refactors
26
+ # are worth it before moving to libddprof.
27
+
28
+ def initialize(event_classes, max_size, code_provenance_collector:, last_flush_time: Time.now.utc)
29
+ @buffers = {}
30
+ @last_flush_time = last_flush_time
31
+ @max_size = max_size
32
+ @code_provenance_collector = code_provenance_collector
33
+
34
+ # Add a buffer for each class
35
+ event_classes.each do |event_class|
36
+ @buffers[event_class] = Profiling::Buffer.new(max_size)
37
+ end
38
+
39
+ # Event classes can only be added ahead of time
40
+ @buffers.freeze
41
+ end
42
+
43
+ def [](event_class)
44
+ @buffers[event_class]
45
+ end
46
+
47
+ def push(events)
48
+ if events.is_a?(Array)
49
+ # Push multiple events
50
+ event_class = events.first.class
51
+ raise UnknownEventError, event_class unless @buffers.key?(event_class)
52
+
53
+ @buffers[event_class].concat(events)
54
+ else
55
+ # Push single event
56
+ event_class = events.class
57
+ raise UnknownEventError, event_class unless @buffers.key?(event_class)
58
+
59
+ @buffers[event_class].push(events)
60
+ end
61
+ end
62
+
63
+ def flush
64
+ event_count = 0
65
+
66
+ event_groups, start, finish = update_time do
67
+ @buffers.collect do |event_class, buffer|
68
+ events = buffer.pop
69
+ next if events.empty?
70
+
71
+ event_count += events.length
72
+ EventGroup.new(event_class, events)
73
+ end.compact
74
+ end
75
+
76
+ code_provenance = @code_provenance_collector.refresh.generate_json if @code_provenance_collector
77
+
78
+ Flush.new(
79
+ start: start,
80
+ finish: finish,
81
+ event_groups: event_groups,
82
+ event_count: event_count,
83
+ code_provenance: code_provenance,
84
+ )
85
+ end
86
+
87
+ # NOTE: Remember that if the recorder is being accessed by multiple threads, this is an inherently racy operation.
88
+ def empty?
89
+ @buffers.values.all?(&:empty?)
90
+ end
91
+
92
+ # Error when event of an unknown type is used with the Recorder
93
+ class UnknownEventError < StandardError
94
+ attr_reader :event_class
95
+
96
+ def initialize(event_class)
97
+ @event_class = event_class
98
+ end
99
+
100
+ def message
101
+ @message ||= "Unknown event class '#{event_class}' for profiling recorder."
102
+ end
103
+ end
104
+
105
+ private
106
+
107
+ def update_time
108
+ start = @last_flush_time
109
+ result = yield
110
+ @last_flush_time = Time.now.utc
111
+
112
+ # Return event groups, start time, finish time
113
+ [result, start, @last_flush_time]
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,151 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core/utils/time'
4
+
5
+ require 'datadog/core/worker'
6
+ require 'datadog/core/workers/polling'
7
+
8
+ module Datadog
9
+ module Profiling
10
+ # Periodically (every DEFAULT_INTERVAL_SECONDS) takes data from the `Recorder` and pushes them to all configured
11
+ # `Exporter`s. Runs on its own background thread.
12
+ class Scheduler < Core::Worker
13
+ include Core::Workers::Polling
14
+
15
+ DEFAULT_INTERVAL_SECONDS = 60
16
+ MINIMUM_INTERVAL_SECONDS = 0
17
+
18
+ # Profiles with duration less than this will not be reported
19
+ PROFILE_DURATION_THRESHOLD_SECONDS = 1
20
+
21
+ # We sleep for at most this duration seconds before reporting data to avoid multi-process applications all
22
+ # reporting profiles at the exact same time
23
+ DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS = 3
24
+
25
+ private_constant :DEFAULT_INTERVAL_SECONDS, :MINIMUM_INTERVAL_SECONDS, :PROFILE_DURATION_THRESHOLD_SECONDS
26
+
27
+ attr_reader \
28
+ :exporters,
29
+ :recorder
30
+
31
+ def initialize(
32
+ recorder,
33
+ exporters,
34
+ fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default
35
+ interval: DEFAULT_INTERVAL_SECONDS,
36
+ enabled: true
37
+ )
38
+ @recorder = recorder
39
+ @exporters = [exporters].flatten
40
+
41
+ # Workers::Async::Thread settings
42
+ self.fork_policy = fork_policy
43
+
44
+ # Workers::IntervalLoop settings
45
+ self.loop_base_interval = interval
46
+
47
+ # Workers::Polling settings
48
+ self.enabled = enabled
49
+ end
50
+
51
+ def start
52
+ perform
53
+ end
54
+
55
+ def perform
56
+ # A profiling flush may be called while the VM is shutting down, to report the last profile. When we do so,
57
+ # we impose a strict timeout. This means this last profile may or may not be sent, depending on if the flush can
58
+ # successfully finish in the strict timeout.
59
+ # This can be somewhat confusing (why did it not get reported?), so let's at least log what happened.
60
+ interrupted = true
61
+
62
+ begin
63
+ flush_and_wait
64
+ interrupted = false
65
+ ensure
66
+ Datadog.logger.debug('#flush was interrupted or failed before it could complete') if interrupted
67
+ end
68
+ end
69
+
70
+ def after_fork
71
+ # Clear recorder's buffers by flushing events.
72
+ # Objects from parent process will copy-on-write,
73
+ # and we don't want to send events for the wrong process.
74
+ recorder.flush
75
+ end
76
+
77
+ # Configure Workers::IntervalLoop to not report immediately when scheduler starts
78
+ #
79
+ # When a scheduler gets created (or reset), we don't want it to immediately try to flush; we want it to wait for
80
+ # the loop wait time first. This avoids an issue where the scheduler reported a mostly-empty profile if the
81
+ # application just started but this thread took a bit longer so there's already samples in the recorder.
82
+ def loop_wait_before_first_iteration?
83
+ true
84
+ end
85
+
86
+ def work_pending?
87
+ !recorder.empty?
88
+ end
89
+
90
+ private
91
+
92
+ def flush_and_wait
93
+ run_time = Core::Utils::Time.measure do
94
+ flush_events
95
+ end
96
+
97
+ # Update wait time to try to wake consistently on time.
98
+ # Don't drop below the minimum interval.
99
+ self.loop_wait_time = [loop_base_interval - run_time, MINIMUM_INTERVAL_SECONDS].max
100
+ end
101
+
102
+ def flush_events
103
+ # Get events from recorder
104
+ flush = recorder.flush
105
+
106
+ if duration_below_threshold?(flush)
107
+ Datadog.logger.debug do
108
+ "Skipped exporting profiling events as profile duration is below minimum (#{flush.event_count} events skipped)"
109
+ end
110
+
111
+ return flush
112
+ end
113
+
114
+ # Sleep for a bit to cause misalignment between profilers in multi-process applications
115
+ #
116
+ # When not being run in a loop, it means the scheduler has not been started or was stopped, and thus
117
+ # a) it's being shutting down (and is trying to report the last profile)
118
+ # b) it's being run as a one-shot, usually in a test
119
+ # ...so in those cases we don't sleep
120
+ #
121
+ # During PR review (https://github.com/DataDog/dd-trace-rb/pull/1807) we discussed the possible alternative of
122
+ # just sleeping before starting the scheduler loop. We ended up not going with that option to avoid the first
123
+ # profile containing up to DEFAULT_INTERVAL_SECONDS + DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS instead of the
124
+ # usual DEFAULT_INTERVAL_SECONDS size.
125
+ if run_loop?
126
+ jitter_seconds = rand * DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS # floating point number between (0.0...maximum)
127
+ sleep(jitter_seconds)
128
+ end
129
+
130
+ # Send events to each exporter
131
+ if flush.event_count > 0
132
+ exporters.each do |exporter|
133
+ begin
134
+ exporter.export(flush)
135
+ rescue StandardError => e
136
+ Datadog.logger.error(
137
+ "Unable to export #{flush.event_count} profiling events. Cause: #{e} Location: #{Array(e.backtrace).first}"
138
+ )
139
+ end
140
+ end
141
+ end
142
+
143
+ flush
144
+ end
145
+
146
+ def duration_below_threshold?(flush)
147
+ (flush.finish - flush.start) < PROFILE_DURATION_THRESHOLD_SECONDS
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,50 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ module Tasks
6
+ # Wraps command with Datadog tracing
7
+ class Exec
8
+ attr_reader :args
9
+
10
+ def initialize(args)
11
+ @args = args
12
+ end
13
+
14
+ def run
15
+ set_rubyopt!
16
+ exec_with_error_handling(args)
17
+ end
18
+
19
+ def rubyopts
20
+ [
21
+ '-rdatadog/profiling/preload'
22
+ ]
23
+ end
24
+
25
+ private
26
+
27
+ def set_rubyopt!
28
+ existing_rubyopt = ENV['RUBYOPT']
29
+
30
+ ENV['RUBYOPT'] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(' ')}" : rubyopts.join(' ')
31
+ end
32
+
33
+ # If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
34
+ # follow the same status codes as the shell uses
35
+ # See also:
36
+ # * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
37
+ # * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
38
+ def exec_with_error_handling(args)
39
+ Kernel.exec(*args)
40
+ rescue Errno::ENOENT => e
41
+ Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
42
+ Kernel.exit 127
43
+ rescue Errno::EACCES, Errno::ENOEXEC => e
44
+ Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
45
+ Kernel.exit 126
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ module Tasks
6
+ # Prints help message for usage of `ddtrace`
7
+ class Help
8
+ def run
9
+ puts %(
10
+ Usage: ddtracerb [command] [arguments]
11
+ exec [command]: Executes command with tracing & profiling preloaded.
12
+ help: Prints this help message.
13
+ )
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end