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,185 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core/utils/time'
4
+
5
+ module Datadog
6
+ module Tracing
7
+ module Sampling
8
+ # Checks for rate limiting on a resource.
9
+ # @public_api
10
+ class RateLimiter
11
+ # Checks if resource of specified size can be
12
+ # conforms with the current limit.
13
+ #
14
+ # Implementations of this method are not guaranteed
15
+ # to be side-effect free.
16
+ #
17
+ # @return [Boolean] whether a resource conforms with the current limit
18
+ def allow?(size); end
19
+
20
+ # The effective rate limiting ratio based on
21
+ # recent calls to `allow?`.
22
+ #
23
+ # @return [Float] recent allowance ratio
24
+ def effective_rate; end
25
+ end
26
+
27
+ # Implementation of the Token Bucket metering algorithm
28
+ # for rate limiting.
29
+ #
30
+ # @see https://en.wikipedia.org/wiki/Token_bucket Token bucket
31
+ # @public_api
32
+ class TokenBucket < RateLimiter
33
+ attr_reader :rate, :max_tokens
34
+
35
+ # @param rate [Numeric] Allowance rate, in units per second
36
+ # if rate is negative, always allow
37
+ # if rate is zero, never allow
38
+ # @param max_tokens [Numeric] Limit of available tokens
39
+ def initialize(rate, max_tokens = rate)
40
+ super()
41
+
42
+ @rate = rate
43
+ @max_tokens = max_tokens
44
+
45
+ @tokens = max_tokens
46
+ @total_messages = 0
47
+ @conforming_messages = 0
48
+ @prev_conforming_messages = nil
49
+ @prev_total_messages = nil
50
+ @current_window = nil
51
+
52
+ @last_refill = Core::Utils::Time.get_time
53
+ end
54
+
55
+ # Checks if a message of provided +size+
56
+ # conforms with the current bucket limit.
57
+ #
58
+ # If it does, return +true+ and remove +size+
59
+ # tokens from the bucket.
60
+ # If it does not, return +false+ without affecting
61
+ # the tokens from the bucket.
62
+ #
63
+ # @return [Boolean] +true+ if message conforms with current bucket limit
64
+ def allow?(size)
65
+ allowed = should_allow?(size)
66
+ update_rate_counts(allowed)
67
+ allowed
68
+ end
69
+
70
+ # Ratio of 'conformance' per 'total messages' checked
71
+ # averaged for the past 2 buckets
72
+ #
73
+ # Returns +1.0+ when no messages have been checked yet.
74
+ #
75
+ # @return [Float] Conformance ratio, between +[0,1]+
76
+ def effective_rate
77
+ return 0.0 if @rate.zero?
78
+ return 1.0 if @rate < 0 || @total_messages.zero?
79
+
80
+ return current_window_rate if @prev_conforming_messages.nil? || @prev_total_messages.nil?
81
+
82
+ (@conforming_messages.to_f + @prev_conforming_messages.to_f) / (@total_messages + @prev_total_messages)
83
+ end
84
+
85
+ # Ratio of 'conformance' per 'total messages' checked
86
+ # on this bucket
87
+ #
88
+ # Returns +1.0+ when no messages have been checked yet.
89
+ #
90
+ # @return [Float] Conformance ratio, between +[0,1]+
91
+ def current_window_rate
92
+ return 1.0 if @total_messages.zero?
93
+
94
+ @conforming_messages.to_f / @total_messages
95
+ end
96
+
97
+ # @return [Numeric] number of tokens currently available
98
+ def available_tokens
99
+ @tokens
100
+ end
101
+
102
+ private
103
+
104
+ def refill_since_last_message
105
+ now = Core::Utils::Time.get_time
106
+ elapsed = now - @last_refill
107
+
108
+ # Update the number of available tokens, but ensure we do not exceed the max
109
+ # we return the min of tokens + rate*elapsed, or max tokens
110
+ refill_tokens(@rate * elapsed)
111
+
112
+ @last_refill = now
113
+ end
114
+
115
+ def refill_tokens(size)
116
+ @tokens += size
117
+ @tokens = @max_tokens if @tokens > @max_tokens
118
+ end
119
+
120
+ def increment_total_count
121
+ @total_messages += 1
122
+ end
123
+
124
+ def increment_conforming_count
125
+ @conforming_messages += 1
126
+ end
127
+
128
+ def should_allow?(size)
129
+ # rate limit of 0 blocks everything
130
+ return false if @rate.zero?
131
+
132
+ # negative rate limit disables rate limiting
133
+ return true if @rate < 0
134
+
135
+ refill_since_last_message
136
+
137
+ # if tokens < 1 we don't allow?
138
+ return false if @tokens < size
139
+
140
+ @tokens -= size
141
+
142
+ true
143
+ end
144
+
145
+ # Sets and Updates the past two 1 second windows for which
146
+ # the rate limiter must compute it's rate over and updates
147
+ # the total count, and conforming message count if +allowed+
148
+ def update_rate_counts(allowed)
149
+ now = Core::Utils::Time.get_time
150
+
151
+ # No tokens have been seen yet, start a new window
152
+ if @current_window.nil?
153
+ @current_window = now
154
+ # If more than 1 second has past since last window, reset
155
+ elsif now - @current_window >= 1
156
+ @prev_conforming_messages = @conforming_messages
157
+ @prev_total_messages = @total_messages
158
+ @conforming_messages = 0
159
+ @total_messages = 0
160
+ @current_window = now
161
+ end
162
+
163
+ increment_conforming_count if allowed
164
+
165
+ increment_total_count
166
+ end
167
+ end
168
+
169
+ # {Datadog::Tracing::Sampling::RateLimiter} that accepts all resources,
170
+ # with no limits.
171
+ # @public_api
172
+ class UnlimitedLimiter < RateLimiter
173
+ # @return [Boolean] always +true+
174
+ def allow?(_)
175
+ true
176
+ end
177
+
178
+ # @return [Float] always 100%
179
+ def effective_rate
180
+ 1.0
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core'
4
+
5
+ require 'datadog/tracing/sampling/sampler'
6
+ require 'datadog/tracing/span'
7
+
8
+ module Datadog
9
+ module Tracing
10
+ module Sampling
11
+ # {Datadog:::Tracing::Sampling::RateSampler} is based on a sample rate.
12
+ # @public_api
13
+ class RateSampler < Sampler
14
+ KNUTH_FACTOR = 1111111111111111111
15
+
16
+ # Initialize a {Datadog:::Tracing::Sampling::RateSampler}.
17
+ # This sampler keeps a random subset of the traces. Its main purpose is to
18
+ # reduce the instrumentation footprint.
19
+ #
20
+ # * +sample_rate+: the sample rate as a {Float} between 0.0 and 1.0. 0.0
21
+ # means that no trace will be sampled; 1.0 means that all traces will be
22
+ # sampled.
23
+ def initialize(sample_rate = 1.0)
24
+ super()
25
+
26
+ unless sample_rate > 0.0 && sample_rate <= 1.0
27
+ Datadog.logger.error('sample rate is not between 0 and 1, disabling the sampler')
28
+ sample_rate = 1.0
29
+ end
30
+
31
+ self.sample_rate = sample_rate
32
+ end
33
+
34
+ def sample_rate(*_)
35
+ @sample_rate
36
+ end
37
+
38
+ def sample_rate=(sample_rate)
39
+ @sample_rate = sample_rate
40
+ @sampling_id_threshold = sample_rate * Tracing::Span::EXTERNAL_MAX_ID
41
+ end
42
+
43
+ def sample?(trace)
44
+ ((trace.id * KNUTH_FACTOR) % Tracing::Span::EXTERNAL_MAX_ID) <= @sampling_id_threshold
45
+ end
46
+
47
+ def sample!(trace)
48
+ sampled = trace.sampled = sample?(trace)
49
+ trace.sample_rate = @sample_rate if sampled
50
+ sampled
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,76 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core'
4
+
5
+ require 'datadog/tracing/sampling/matcher'
6
+ require 'datadog/tracing/sampling/rate_sampler'
7
+
8
+ module Datadog
9
+ module Tracing
10
+ module Sampling
11
+ # Sampling rule that dictates if a trace matches
12
+ # a specific criteria and what sampling strategy to
13
+ # apply in case of a positive match.
14
+ # @public_api
15
+ class Rule
16
+ attr_reader :matcher, :sampler
17
+
18
+ # @param [Matcher] matcher A matcher to verify trace conformity against
19
+ # @param [Sampler] sampler A sampler to be consulted on a positive match
20
+ def initialize(matcher, sampler)
21
+ @matcher = matcher
22
+ @sampler = sampler
23
+ end
24
+
25
+ # Evaluates if the provided `trace` conforms to the `matcher`.
26
+ #
27
+ # @param [TraceOperation] trace
28
+ # @return [Boolean] whether this rules applies to the trace
29
+ # @return [NilClass] if the matcher fails errs during evaluation
30
+ def match?(trace)
31
+ @matcher.match?(trace)
32
+ rescue => e
33
+ Datadog.logger.error(
34
+ "Matcher failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
35
+ )
36
+ nil
37
+ end
38
+
39
+ # (see Datadog::Tracing::Sampling::Sampler#sample?)
40
+ def sample?(trace)
41
+ @sampler.sample?(trace)
42
+ end
43
+
44
+ # (see Datadog::Tracing::Sampling::Sampler#sample_rate)
45
+ def sample_rate(trace)
46
+ @sampler.sample_rate(trace)
47
+ end
48
+ end
49
+
50
+ # A {Datadog::Tracing::Sampling::Rule} that matches a trace based on
51
+ # trace name and/or service name and
52
+ # applies a fixed sampling to matching spans.
53
+ # @public_api
54
+ class SimpleRule < Rule
55
+ # @param name [String,Regexp,Proc] Matcher for case equality (===) with the trace name, defaults to always match
56
+ # @param service [String,Regexp,Proc] Matcher for case equality (===) with the service name,
57
+ # defaults to always match
58
+ # @param sample_rate [Float] Sampling rate between +[0,1]+
59
+ def initialize(name: SimpleMatcher::MATCH_ALL, service: SimpleMatcher::MATCH_ALL, sample_rate: 1.0)
60
+ # We want to allow 0.0 to drop all traces, but {Datadog::Tracing::Sampling::RateSampler}
61
+ # considers 0.0 an invalid rate and falls back to 100% sampling.
62
+ #
63
+ # We address that here by not setting the rate in the constructor,
64
+ # but using the setter method.
65
+ #
66
+ # We don't want to make this change directly to {Datadog::Tracing::Sampling::RateSampler}
67
+ # because it breaks its current contract to existing users.
68
+ sampler = RateSampler.new
69
+ sampler.sample_rate = sample_rate
70
+
71
+ super(SimpleMatcher.new(name: name, service: service), sampler)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,131 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core'
4
+
5
+ require 'datadog/tracing/sampling/ext'
6
+ require 'datadog/tracing/sampling/rate_limiter'
7
+ require 'datadog/tracing/sampling/rule'
8
+
9
+ module Datadog
10
+ module Tracing
11
+ module Sampling
12
+ # Span {Sampler} that applies a set of {Rule}s to decide
13
+ # on sampling outcome. Then, a rate limiter is applied.
14
+ #
15
+ # If a trace does not conform to any rules, a default
16
+ # sampling strategy is applied.
17
+ # @public_api
18
+ class RuleSampler
19
+ attr_reader :rules, :rate_limiter, :default_sampler
20
+
21
+ # @param rules [Array<Rule>] ordered list of rules to be applied to a trace
22
+ # @param rate_limit [Float] number of traces per second, defaults to +100+
23
+ # @param rate_limiter [RateLimiter] limiter applied after rule matching
24
+ # @param default_sample_rate [Float] fallback sample rate when no rules apply to a trace,
25
+ # between +[0,1]+, defaults to +1+
26
+ # @param default_sampler [Sample] fallback strategy when no rules apply to a trace
27
+ def initialize(
28
+ rules = [],
29
+ rate_limit: Datadog.configuration.tracing.sampling.rate_limit,
30
+ rate_limiter: nil,
31
+ default_sample_rate: Datadog.configuration.tracing.sampling.default_rate,
32
+ default_sampler: nil
33
+ )
34
+ @rules = rules
35
+ @rate_limiter = if rate_limiter
36
+ rate_limiter
37
+ elsif rate_limit
38
+ TokenBucket.new(rate_limit)
39
+ else
40
+ UnlimitedLimiter.new
41
+ end
42
+
43
+ @default_sampler = if default_sampler
44
+ default_sampler
45
+ elsif default_sample_rate
46
+ # Add to the end of the rule list a rule always matches any trace
47
+ @rules << SimpleRule.new(sample_rate: default_sample_rate)
48
+ nil
49
+ else
50
+ # TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
51
+ RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags[:env] })
52
+ end
53
+ end
54
+
55
+ # /RuleSampler's components (it's rate limiter, for example) are
56
+ # not be guaranteed to be size-effect free.
57
+ # It is not possible to guarantee that a call to {#sample?} will
58
+ # return the same result as a successive call to {#sample!} with the same trace.
59
+ #
60
+ # Use {#sample!} instead
61
+ def sample?(_trace)
62
+ raise 'RuleSampler cannot be evaluated without side-effects'
63
+ end
64
+
65
+ def sample!(trace)
66
+ sampled = sample_trace(trace) do |t|
67
+ @default_sampler.sample!(t).tap do
68
+ # We want to make sure the trace is tagged with the agent-derived
69
+ # service rate. Retrieve this from the rate by service sampler.
70
+ # Only do this if it was set by a RateByServiceSampler.
71
+ trace.agent_sample_rate = @default_sampler.sample_rate(trace) if @default_sampler.is_a?(RateByServiceSampler)
72
+ end
73
+ end
74
+
75
+ trace.sampled = sampled
76
+ end
77
+
78
+ # @!visibility private
79
+ def update(*args)
80
+ return false unless @default_sampler.respond_to?(:update)
81
+
82
+ @default_sampler.update(*args)
83
+ end
84
+
85
+ private
86
+
87
+ def sample_trace(trace)
88
+ rule = @rules.find { |r| r.match?(trace) }
89
+
90
+ return yield(trace) if rule.nil?
91
+
92
+ sampled = rule.sample?(trace)
93
+ sample_rate = rule.sample_rate(trace)
94
+
95
+ set_priority(trace, sampled)
96
+ set_rule_metrics(trace, sample_rate)
97
+
98
+ return false unless sampled
99
+
100
+ rate_limiter.allow?(1).tap do |allowed|
101
+ set_priority(trace, allowed)
102
+ set_limiter_metrics(trace, rate_limiter.effective_rate)
103
+ end
104
+ rescue StandardError => e
105
+ Datadog.logger.error(
106
+ "Rule sampling failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
107
+ )
108
+ yield(trace)
109
+ end
110
+
111
+ # Span priority should only be set when the {RuleSampler}
112
+ # was responsible for the sampling decision.
113
+ def set_priority(trace, sampled)
114
+ trace.sampling_priority = if sampled
115
+ Sampling::Ext::Priority::USER_KEEP
116
+ else
117
+ Sampling::Ext::Priority::USER_REJECT
118
+ end
119
+ end
120
+
121
+ def set_rule_metrics(trace, sample_rate)
122
+ trace.rule_sample_rate = sample_rate
123
+ end
124
+
125
+ def set_limiter_metrics(trace, limiter_rate)
126
+ trace.rate_limiter_rate = limiter_rate
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,44 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Sampling
6
+ # Interface for client-side trace sampling.
7
+ # @abstract
8
+ # @public_api
9
+ class Sampler
10
+ # Returns `true` if the provided trace should be kept.
11
+ # Otherwise, `false`.
12
+ #
13
+ # This method *must not* modify the `trace`.
14
+ #
15
+ # @param [Datadog::Tracing::TraceOperation] trace
16
+ # @return [Boolean] should this trace be kept?
17
+ def sample?(trace)
18
+ raise NotImplementedError, 'Samplers must implement the #sample? method'
19
+ end
20
+
21
+ # Returns `true` if the provided trace should be kept.
22
+ # Otherwise, `false`.
23
+ #
24
+ # This method *may* modify the `trace`, in case changes are necessary based on the
25
+ # sampling decision.
26
+ #
27
+ # @param [Datadog::Tracing::TraceOperation] trace
28
+ # @return [Boolean] should this trace be kept?
29
+ def sample!(trace)
30
+ raise NotImplementedError, 'Samplers must implement the #sample! method'
31
+ end
32
+
33
+ # The sampling rate, if this sampler has such concept.
34
+ # Otherwise, `nil`.
35
+ #
36
+ # @param [Datadog::Tracing::TraceOperation] trace
37
+ # @return [Float,nil] sampling ratio between 0.0 and 1.0 (inclusive), or `nil` if not applicable
38
+ def sample_rate(trace)
39
+ raise NotImplementedError, 'Samplers must implement the #sample_rate method'
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Sampling
6
+ module Span
7
+ # Checks if a span conforms to a matching criteria.
8
+ class Matcher
9
+ # Pattern that matches any string
10
+ MATCH_ALL_PATTERN = '*'
11
+
12
+ # Matches span name and service to their respective patterns provided.
13
+ #
14
+ # The patterns are {String}s with two special characters available:
15
+ # 1. `?`: matches exactly one of any character.
16
+ # 2. `*`: matches a substring of any size, including zero.
17
+ # These patterns can occur any point of the string, any number of times.
18
+ #
19
+ # Both {SpanOperation#name} and {SpanOperation#service} must match the provided patterns.
20
+ #
21
+ # The whole String has to match the provided patterns: providing a pattern that
22
+ # matches a portion of the provided String is not considered a match.
23
+ #
24
+ # @example web-*
25
+ # `'web-*'` will match any string starting with `web-`.
26
+ # @example cache-?
27
+ # `'cache-?'` will match any string starting with `database-` followed by exactly one character.
28
+ #
29
+ # @param name_pattern [String] a pattern to be matched against {SpanOperation#name}
30
+ # @param service_pattern [String] a pattern to be matched against {SpanOperation#service}
31
+ def initialize(name_pattern: MATCH_ALL_PATTERN, service_pattern: MATCH_ALL_PATTERN)
32
+ @name = pattern_to_regex(name_pattern)
33
+ @service = pattern_to_regex(service_pattern)
34
+ end
35
+
36
+ # {Regexp#match?} was added in Ruby 2.4, and it's measurably
37
+ # the least costly way to get a boolean result for a Regexp match.
38
+ # @see https://www.ruby-lang.org/en/news/2016/12/25/ruby-2-4-0-released/
39
+ if Regexp.method_defined?(:match?)
40
+ # Returns `true` if the span conforms to the configured patterns,
41
+ # `false` otherwise
42
+ #
43
+ # @param [SpanOperation] span
44
+ # @return [Boolean]
45
+ def match?(span)
46
+ # Matching is performed at the end of the lifecycle of a Span,
47
+ # thus both `name` and `service` are guaranteed to be not `nil`.
48
+ @name.match?(span.name) && @service.match?(span.service)
49
+ end
50
+ else
51
+ # DEV: Remove when support for Ruby 2.3 and older is removed.
52
+ def match?(span)
53
+ @name === span.name && @service === span.service
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ # @param pattern [String]
60
+ # @return [Regexp]
61
+ def pattern_to_regex(pattern)
62
+ # Ensure no undesired characters are treated as regex.
63
+ # Our valid special characters, `?` and `*`,
64
+ # will be escaped so...
65
+ pattern = Regexp.quote(pattern)
66
+
67
+ # ...we account for that here:
68
+ pattern.gsub!('\?', '.') # Any single character
69
+ pattern.gsub!('\*', '.*') # Any substring
70
+
71
+ # Patterns have to match the whole input string
72
+ pattern = "\\A#{pattern}\\z"
73
+
74
+ Regexp.new(pattern)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end