ddtrace 0.35.2 → 1.1.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 (1018) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +16 -17
  4. data/CHANGELOG.md +1969 -293
  5. data/CONTRIBUTING.md +3 -7
  6. data/LICENSE-3rdparty.csv +4 -0
  7. data/README.md +5 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +34 -32
  10. data/docs/0.x-trace.png +0 -0
  11. data/docs/1.0-trace.png +0 -0
  12. data/docs/AutoInstrumentation.md +36 -0
  13. data/docs/Deprecation.md +8 -0
  14. data/docs/DevelopmentGuide.md +73 -9
  15. data/docs/GettingStarted.md +989 -496
  16. data/docs/ProfilingDevelopment.md +110 -0
  17. data/docs/PublicApi.md +14 -0
  18. data/docs/UpgradeGuide.md +736 -0
  19. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +118 -0
  20. data/ext/ddtrace_profiling_loader/extconf.rb +53 -0
  21. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +112 -0
  22. data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
  23. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +44 -0
  24. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
  25. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +278 -0
  26. data/ext/ddtrace_profiling_native_extension/extconf.rb +176 -0
  27. data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +13 -0
  28. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +186 -0
  29. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +607 -0
  30. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +33 -0
  31. data/ext/ddtrace_profiling_native_extension/profiling.c +31 -0
  32. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +139 -0
  33. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +28 -0
  34. data/lib/datadog/appsec/assets/blocked.html +4 -0
  35. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  36. data/lib/datadog/appsec/assets/waf_rules/recommended.json +5638 -0
  37. data/lib/datadog/appsec/assets/waf_rules/risky.json +1499 -0
  38. data/lib/datadog/appsec/assets/waf_rules/strict.json +1298 -0
  39. data/lib/datadog/appsec/assets.rb +38 -0
  40. data/lib/datadog/appsec/autoload.rb +16 -0
  41. data/lib/datadog/appsec/configuration/settings.rb +194 -0
  42. data/lib/datadog/appsec/configuration.rb +80 -0
  43. data/lib/datadog/appsec/contrib/auto_instrument.rb +29 -0
  44. data/lib/datadog/appsec/contrib/configuration/settings.rb +20 -0
  45. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  46. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  47. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +22 -0
  48. data/lib/datadog/appsec/contrib/rack/ext.rb +15 -0
  49. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +169 -0
  50. data/lib/datadog/appsec/contrib/rack/integration.rb +49 -0
  51. data/lib/datadog/appsec/contrib/rack/patcher.rb +32 -0
  52. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +87 -0
  53. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
  54. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +64 -0
  55. data/lib/datadog/appsec/contrib/rack/request.rb +58 -0
  56. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
  57. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +112 -0
  58. data/lib/datadog/appsec/contrib/rack/response.rb +24 -0
  59. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +22 -0
  60. data/lib/datadog/appsec/contrib/rails/ext.rb +15 -0
  61. data/lib/datadog/appsec/contrib/rails/framework.rb +30 -0
  62. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +81 -0
  63. data/lib/datadog/appsec/contrib/rails/integration.rb +48 -0
  64. data/lib/datadog/appsec/contrib/rails/patcher.rb +158 -0
  65. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
  66. data/lib/datadog/appsec/contrib/rails/request.rb +33 -0
  67. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  68. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +22 -0
  69. data/lib/datadog/appsec/contrib/sinatra/ext.rb +15 -0
  70. data/lib/datadog/appsec/contrib/sinatra/framework.rb +34 -0
  71. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +124 -0
  72. data/lib/datadog/appsec/contrib/sinatra/integration.rb +48 -0
  73. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +144 -0
  74. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
  75. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  76. data/lib/datadog/appsec/event.rb +121 -0
  77. data/lib/datadog/appsec/extensions.rb +118 -0
  78. data/lib/datadog/appsec/instrumentation/gateway.rb +44 -0
  79. data/lib/datadog/appsec/processor.rb +164 -0
  80. data/lib/datadog/appsec/rate_limiter.rb +60 -0
  81. data/lib/datadog/appsec/reactive/address_hash.rb +18 -0
  82. data/lib/datadog/appsec/reactive/engine.rb +44 -0
  83. data/lib/datadog/appsec/reactive/operation.rb +51 -0
  84. data/lib/datadog/appsec/reactive/subscriber.rb +18 -0
  85. data/lib/datadog/appsec.rb +23 -0
  86. data/lib/datadog/ci/configuration/components.rb +32 -0
  87. data/lib/datadog/ci/configuration/settings.rb +53 -0
  88. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +33 -0
  89. data/lib/datadog/ci/contrib/cucumber/ext.rb +22 -0
  90. data/lib/datadog/ci/contrib/cucumber/formatter.rb +94 -0
  91. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +28 -0
  92. data/lib/datadog/ci/contrib/cucumber/integration.rb +49 -0
  93. data/lib/datadog/ci/contrib/cucumber/patcher.rb +27 -0
  94. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +33 -0
  95. data/lib/datadog/ci/contrib/rspec/example.rb +70 -0
  96. data/lib/datadog/ci/contrib/rspec/ext.rb +21 -0
  97. data/lib/datadog/ci/contrib/rspec/integration.rb +50 -0
  98. data/lib/datadog/ci/contrib/rspec/patcher.rb +27 -0
  99. data/lib/datadog/ci/ext/app_types.rb +11 -0
  100. data/lib/datadog/ci/ext/environment.rb +503 -0
  101. data/lib/datadog/ci/ext/settings.rb +12 -0
  102. data/lib/datadog/ci/ext/test.rb +37 -0
  103. data/lib/datadog/ci/extensions.rb +19 -0
  104. data/lib/datadog/ci/flush.rb +38 -0
  105. data/lib/datadog/ci/test.rb +83 -0
  106. data/lib/datadog/ci.rb +20 -0
  107. data/lib/datadog/core/buffer/cruby.rb +55 -0
  108. data/lib/datadog/core/buffer/random.rb +134 -0
  109. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  110. data/lib/datadog/core/chunker.rb +35 -0
  111. data/lib/datadog/core/configuration/agent_settings_resolver.rb +365 -0
  112. data/lib/datadog/core/configuration/base.rb +89 -0
  113. data/lib/datadog/core/configuration/components.rb +411 -0
  114. data/lib/datadog/core/configuration/dependency_resolver.rb +28 -0
  115. data/lib/datadog/core/configuration/option.rb +69 -0
  116. data/lib/datadog/core/configuration/option_definition.rb +126 -0
  117. data/lib/datadog/core/configuration/option_definition_set.rb +22 -0
  118. data/lib/datadog/core/configuration/option_set.rb +10 -0
  119. data/lib/datadog/core/configuration/options.rb +118 -0
  120. data/lib/datadog/core/configuration/settings.rb +618 -0
  121. data/lib/datadog/core/configuration.rb +286 -0
  122. data/lib/datadog/core/diagnostics/environment_logger.rb +283 -0
  123. data/lib/datadog/core/diagnostics/ext.rb +41 -0
  124. data/lib/datadog/core/diagnostics/health.rb +37 -0
  125. data/lib/datadog/core/encoding.rb +76 -0
  126. data/lib/datadog/core/environment/cgroup.rb +55 -0
  127. data/lib/datadog/core/environment/class_count.rb +21 -0
  128. data/lib/datadog/core/environment/container.rb +93 -0
  129. data/lib/datadog/core/environment/ext.rb +46 -0
  130. data/lib/datadog/core/environment/gc.rb +20 -0
  131. data/lib/datadog/core/environment/identity.rb +58 -0
  132. data/lib/datadog/core/environment/socket.rb +24 -0
  133. data/lib/datadog/core/environment/thread_count.rb +20 -0
  134. data/lib/datadog/core/environment/variable_helpers.rb +68 -0
  135. data/lib/datadog/core/environment/vm_cache.rb +47 -0
  136. data/lib/datadog/core/error.rb +101 -0
  137. data/lib/datadog/core/extensions.rb +16 -0
  138. data/lib/datadog/core/git/ext.rb +35 -0
  139. data/lib/datadog/core/logger.rb +46 -0
  140. data/lib/datadog/core/logging/ext.rb +11 -0
  141. data/lib/datadog/core/metrics/client.rb +198 -0
  142. data/lib/datadog/core/metrics/ext.rb +20 -0
  143. data/lib/datadog/core/metrics/helpers.rb +25 -0
  144. data/lib/datadog/core/metrics/logging.rb +44 -0
  145. data/lib/datadog/core/metrics/metric.rb +14 -0
  146. data/lib/datadog/core/metrics/options.rb +50 -0
  147. data/lib/datadog/core/pin.rb +75 -0
  148. data/lib/datadog/core/runtime/ext.rb +28 -0
  149. data/lib/datadog/core/runtime/metrics.rb +126 -0
  150. data/lib/datadog/core/utils/compression.rb +32 -0
  151. data/lib/datadog/core/utils/forking.rb +63 -0
  152. data/lib/datadog/core/utils/object_set.rb +43 -0
  153. data/lib/datadog/core/utils/only_once.rb +44 -0
  154. data/lib/datadog/core/utils/safe_dup.rb +27 -0
  155. data/lib/datadog/core/utils/sequence.rb +21 -0
  156. data/lib/datadog/core/utils/string_table.rb +49 -0
  157. data/lib/datadog/core/utils/time.rb +54 -0
  158. data/lib/datadog/core/utils.rb +115 -0
  159. data/lib/datadog/core/vendor/multipart-post/LICENSE +11 -0
  160. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +120 -0
  161. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +61 -0
  162. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +139 -0
  163. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +13 -0
  164. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +12 -0
  165. data/lib/datadog/core/vendor/multipart-post/multipart.rb +16 -0
  166. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +36 -0
  167. data/lib/datadog/core/worker.rb +24 -0
  168. data/lib/datadog/core/workers/async.rb +182 -0
  169. data/lib/datadog/core/workers/interval_loop.rb +119 -0
  170. data/lib/datadog/core/workers/polling.rb +59 -0
  171. data/lib/datadog/core/workers/queue.rb +44 -0
  172. data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
  173. data/lib/datadog/core.rb +80 -0
  174. data/lib/datadog/kit/enable_core_dumps.rb +50 -0
  175. data/lib/datadog/kit/identity.rb +63 -0
  176. data/lib/datadog/kit.rb +11 -0
  177. data/lib/datadog/opentracer/binary_propagator.rb +26 -0
  178. data/lib/datadog/opentracer/carrier.rb +9 -0
  179. data/lib/datadog/opentracer/distributed_headers.rb +58 -0
  180. data/lib/datadog/opentracer/global_tracer.rb +17 -0
  181. data/lib/datadog/opentracer/propagator.rb +26 -0
  182. data/lib/datadog/opentracer/rack_propagator.rb +72 -0
  183. data/lib/datadog/opentracer/scope.rb +18 -0
  184. data/lib/datadog/opentracer/scope_manager.rb +9 -0
  185. data/lib/datadog/opentracer/span.rb +101 -0
  186. data/lib/datadog/opentracer/span_context.rb +19 -0
  187. data/lib/datadog/opentracer/span_context_factory.rb +27 -0
  188. data/lib/datadog/opentracer/text_map_propagator.rb +87 -0
  189. data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
  190. data/lib/datadog/opentracer/thread_local_scope_manager.rb +43 -0
  191. data/lib/datadog/opentracer/tracer.rb +212 -0
  192. data/lib/datadog/opentracer.rb +24 -0
  193. data/lib/datadog/profiling/backtrace_location.rb +34 -0
  194. data/lib/datadog/profiling/buffer.rb +43 -0
  195. data/lib/datadog/profiling/collectors/code_provenance.rb +114 -0
  196. data/lib/datadog/profiling/collectors/old_stack.rb +298 -0
  197. data/lib/datadog/profiling/collectors/stack.rb +16 -0
  198. data/lib/datadog/profiling/encoding/profile.rb +47 -0
  199. data/lib/datadog/profiling/event.rb +15 -0
  200. data/lib/datadog/profiling/events/stack.rb +82 -0
  201. data/lib/datadog/profiling/exporter.rb +25 -0
  202. data/lib/datadog/profiling/ext/forking.rb +99 -0
  203. data/lib/datadog/profiling/ext.rb +57 -0
  204. data/lib/datadog/profiling/flush.rb +69 -0
  205. data/lib/datadog/profiling/load_native_extension.rb +22 -0
  206. data/lib/datadog/profiling/native_extension.rb +41 -0
  207. data/lib/datadog/profiling/pprof/builder.rb +127 -0
  208. data/lib/datadog/profiling/pprof/converter.rb +104 -0
  209. data/lib/datadog/profiling/pprof/message_set.rb +16 -0
  210. data/lib/datadog/profiling/pprof/payload.rb +20 -0
  211. data/lib/datadog/profiling/pprof/pprof.proto +212 -0
  212. data/lib/datadog/profiling/pprof/pprof_pb.rb +83 -0
  213. data/lib/datadog/profiling/pprof/stack_sample.rb +141 -0
  214. data/lib/datadog/profiling/pprof/string_table.rb +12 -0
  215. data/lib/datadog/profiling/pprof/template.rb +120 -0
  216. data/lib/datadog/profiling/preload.rb +5 -0
  217. data/lib/datadog/profiling/profiler.rb +34 -0
  218. data/lib/datadog/profiling/recorder.rb +117 -0
  219. data/lib/datadog/profiling/scheduler.rb +151 -0
  220. data/lib/datadog/profiling/stack_recorder.rb +33 -0
  221. data/lib/datadog/profiling/tag_builder.rb +48 -0
  222. data/lib/datadog/profiling/tasks/exec.rb +50 -0
  223. data/lib/datadog/profiling/tasks/help.rb +18 -0
  224. data/lib/datadog/profiling/tasks/setup.rb +93 -0
  225. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +45 -0
  226. data/lib/datadog/profiling/trace_identifiers/helper.rb +47 -0
  227. data/lib/datadog/profiling/transport/client.rb +16 -0
  228. data/lib/datadog/profiling/transport/http/api/endpoint.rb +107 -0
  229. data/lib/datadog/profiling/transport/http/api/instance.rb +38 -0
  230. data/lib/datadog/profiling/transport/http/api/spec.rb +42 -0
  231. data/lib/datadog/profiling/transport/http/api.rb +45 -0
  232. data/lib/datadog/profiling/transport/http/builder.rb +30 -0
  233. data/lib/datadog/profiling/transport/http/client.rb +35 -0
  234. data/lib/datadog/profiling/transport/http/response.rb +23 -0
  235. data/lib/datadog/profiling/transport/http.rb +112 -0
  236. data/lib/datadog/profiling/transport/io/client.rb +29 -0
  237. data/lib/datadog/profiling/transport/io/response.rb +18 -0
  238. data/lib/datadog/profiling/transport/io.rb +32 -0
  239. data/lib/datadog/profiling/transport/parcel.rb +19 -0
  240. data/lib/datadog/profiling/transport/request.rb +17 -0
  241. data/lib/datadog/profiling/transport/response.rb +10 -0
  242. data/lib/datadog/profiling.rb +170 -0
  243. data/lib/datadog/tracing/analytics.rb +25 -0
  244. data/lib/datadog/tracing/buffer.rb +132 -0
  245. data/lib/datadog/tracing/configuration/ext.rb +51 -0
  246. data/lib/datadog/tracing/context.rb +68 -0
  247. data/lib/datadog/tracing/context_provider.rb +66 -0
  248. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +35 -0
  249. data/lib/datadog/tracing/contrib/action_cable/event.rb +72 -0
  250. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
  251. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
  252. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
  253. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  254. data/lib/datadog/tracing/contrib/action_cable/ext.rb +32 -0
  255. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +91 -0
  256. data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
  257. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  258. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +36 -0
  259. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  260. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
  261. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
  262. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  263. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +33 -0
  264. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
  265. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  266. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +156 -0
  267. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  268. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +36 -0
  269. data/lib/datadog/tracing/contrib/action_pack/ext.rb +22 -0
  270. data/lib/datadog/tracing/contrib/action_pack/integration.rb +50 -0
  271. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  272. data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
  273. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +36 -0
  274. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  275. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
  276. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
  277. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  278. data/lib/datadog/tracing/contrib/action_view/ext.rb +24 -0
  279. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
  280. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +91 -0
  281. data/lib/datadog/tracing/contrib/action_view/integration.rb +57 -0
  282. data/lib/datadog/tracing/contrib/action_view/patcher.rb +47 -0
  283. data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
  284. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +37 -0
  285. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  286. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
  287. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
  288. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
  289. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
  290. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
  291. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
  292. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  293. data/lib/datadog/tracing/contrib/active_job/ext.rb +39 -0
  294. data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
  295. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +26 -0
  296. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  297. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +33 -0
  298. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +69 -0
  299. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
  300. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
  301. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  302. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +24 -0
  303. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
  304. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +33 -0
  305. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
  306. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +138 -0
  307. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +39 -0
  308. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  309. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
  310. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +78 -0
  311. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  312. data/lib/datadog/tracing/contrib/active_record/ext.rb +29 -0
  313. data/lib/datadog/tracing/contrib/active_record/integration.rb +56 -0
  314. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  315. data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
  316. data/lib/datadog/tracing/contrib/active_record/vendor/MIT-LICENSE +20 -0
  317. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +307 -0
  318. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +270 -0
  319. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +73 -0
  320. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  321. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +35 -0
  322. data/lib/datadog/tracing/contrib/active_support/ext.rb +31 -0
  323. data/lib/datadog/tracing/contrib/active_support/integration.rb +51 -0
  324. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  325. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  326. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +164 -0
  327. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  328. data/lib/datadog/tracing/contrib/analytics.rb +29 -0
  329. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  330. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +35 -0
  331. data/lib/datadog/tracing/contrib/aws/ext.rb +27 -0
  332. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +95 -0
  333. data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
  334. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +60 -0
  335. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  336. data/lib/datadog/tracing/contrib/aws/services.rb +123 -0
  337. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +23 -0
  338. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
  339. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
  340. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +27 -0
  341. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +43 -0
  342. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +33 -0
  343. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  344. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  345. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  346. data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
  347. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +35 -0
  348. data/lib/datadog/tracing/contrib/dalli/ext.rb +24 -0
  349. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +58 -0
  350. data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
  351. data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
  352. data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
  353. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +38 -0
  354. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +26 -0
  355. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
  356. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +31 -0
  357. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +101 -0
  358. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +36 -0
  359. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +26 -0
  360. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
  361. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +151 -0
  362. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +89 -0
  363. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +37 -0
  364. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +177 -0
  365. data/lib/datadog/tracing/contrib/ethon/ext.rb +24 -0
  366. data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
  367. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +96 -0
  368. data/lib/datadog/tracing/contrib/ethon/patcher.rb +31 -0
  369. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +38 -0
  370. data/lib/datadog/tracing/contrib/excon/ext.rb +21 -0
  371. data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
  372. data/lib/datadog/tracing/contrib/excon/middleware.rb +170 -0
  373. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  374. data/lib/datadog/tracing/contrib/extensions.rb +197 -0
  375. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +42 -0
  376. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  377. data/lib/datadog/tracing/contrib/faraday/ext.rb +21 -0
  378. data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
  379. data/lib/datadog/tracing/contrib/faraday/middleware.rb +93 -0
  380. data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
  381. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  382. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +42 -0
  383. data/lib/datadog/tracing/contrib/grape/endpoint.rb +253 -0
  384. data/lib/datadog/tracing/contrib/grape/ext.rb +28 -0
  385. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
  386. data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
  387. data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
  388. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +36 -0
  389. data/lib/datadog/tracing/contrib/graphql/ext.rb +19 -0
  390. data/lib/datadog/tracing/contrib/graphql/integration.rb +44 -0
  391. data/lib/datadog/tracing/contrib/graphql/patcher.rb +91 -0
  392. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +37 -0
  393. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +84 -0
  394. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +90 -0
  395. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +104 -0
  396. data/lib/datadog/tracing/contrib/grpc/ext.rb +23 -0
  397. data/lib/datadog/tracing/contrib/grpc/integration.rb +43 -0
  398. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  399. data/lib/datadog/tracing/contrib/grpc/patcher.rb +37 -0
  400. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +44 -0
  401. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +37 -0
  402. data/lib/datadog/tracing/contrib/http/ext.rb +21 -0
  403. data/lib/datadog/tracing/contrib/http/instrumentation.rb +139 -0
  404. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  405. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  406. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  407. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +37 -0
  408. data/lib/datadog/tracing/contrib/httpclient/ext.rb +21 -0
  409. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +117 -0
  410. data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
  411. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
  412. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +37 -0
  413. data/lib/datadog/tracing/contrib/httprb/ext.rb +21 -0
  414. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +128 -0
  415. data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
  416. data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
  417. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  418. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +35 -0
  419. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +18 -0
  420. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  421. data/lib/datadog/tracing/contrib/kafka/event.rb +52 -0
  422. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
  423. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
  424. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
  425. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
  426. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
  427. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
  428. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
  429. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +40 -0
  430. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +43 -0
  431. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  432. data/lib/datadog/tracing/contrib/kafka/ext.rb +52 -0
  433. data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
  434. data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
  435. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +23 -0
  436. data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
  437. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +47 -0
  438. data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
  439. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  440. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +38 -0
  441. data/lib/datadog/tracing/contrib/mongodb/ext.rb +27 -0
  442. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  443. data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
  444. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
  445. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  446. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +121 -0
  447. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +35 -0
  448. data/lib/datadog/tracing/contrib/mysql2/ext.rb +22 -0
  449. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +62 -0
  450. data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
  451. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  452. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  453. data/lib/datadog/tracing/contrib/patcher.rb +74 -0
  454. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +35 -0
  455. data/lib/datadog/tracing/contrib/presto/ext.rb +32 -0
  456. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +125 -0
  457. data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
  458. data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
  459. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +40 -0
  460. data/lib/datadog/tracing/contrib/qless/ext.rb +26 -0
  461. data/lib/datadog/tracing/contrib/qless/integration.rb +43 -0
  462. data/lib/datadog/tracing/contrib/qless/patcher.rb +38 -0
  463. data/lib/datadog/tracing/contrib/qless/qless_job.rb +75 -0
  464. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +32 -0
  465. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +49 -0
  466. data/lib/datadog/tracing/contrib/que/ext.rb +34 -0
  467. data/lib/datadog/tracing/contrib/que/integration.rb +46 -0
  468. data/lib/datadog/tracing/contrib/que/patcher.rb +28 -0
  469. data/lib/datadog/tracing/contrib/que/tracer.rb +61 -0
  470. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +35 -0
  471. data/lib/datadog/tracing/contrib/racecar/event.rb +79 -0
  472. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +35 -0
  473. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
  474. data/lib/datadog/tracing/contrib/racecar/events/message.rb +35 -0
  475. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  476. data/lib/datadog/tracing/contrib/racecar/ext.rb +31 -0
  477. data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
  478. data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
  479. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +51 -0
  480. data/lib/datadog/tracing/contrib/rack/ext.rb +25 -0
  481. data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
  482. data/lib/datadog/tracing/contrib/rack/middlewares.rb +255 -0
  483. data/lib/datadog/tracing/contrib/rack/patcher.rb +109 -0
  484. data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
  485. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +12 -0
  486. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +71 -0
  487. data/lib/datadog/tracing/contrib/rails/ext.rb +19 -0
  488. data/lib/datadog/tracing/contrib/rails/framework.rb +152 -0
  489. data/lib/datadog/tracing/contrib/rails/integration.rb +49 -0
  490. data/lib/datadog/tracing/contrib/rails/log_injection.rb +34 -0
  491. data/lib/datadog/tracing/contrib/rails/middlewares.rb +47 -0
  492. data/lib/datadog/tracing/contrib/rails/patcher.rb +121 -0
  493. data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
  494. data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
  495. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +36 -0
  496. data/lib/datadog/tracing/contrib/rake/ext.rb +26 -0
  497. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +98 -0
  498. data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
  499. data/lib/datadog/tracing/contrib/rake/patcher.rb +34 -0
  500. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
  501. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +40 -0
  502. data/lib/datadog/tracing/contrib/redis/ext.rb +26 -0
  503. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +78 -0
  504. data/lib/datadog/tracing/contrib/redis/integration.rb +47 -0
  505. data/lib/datadog/tracing/contrib/redis/patcher.rb +35 -0
  506. data/lib/datadog/tracing/contrib/redis/quantize.rb +79 -0
  507. data/lib/datadog/tracing/contrib/redis/tags.rb +54 -0
  508. data/lib/datadog/tracing/contrib/redis/vendor/LICENSE +20 -0
  509. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +162 -0
  510. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  511. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  512. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +37 -0
  513. data/lib/datadog/tracing/contrib/resque/ext.rb +21 -0
  514. data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
  515. data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
  516. data/lib/datadog/tracing/contrib/resque/resque_job.rb +103 -0
  517. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +36 -0
  518. data/lib/datadog/tracing/contrib/rest_client/ext.rb +21 -0
  519. data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
  520. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +29 -0
  521. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +105 -0
  522. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +23 -0
  523. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
  524. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +51 -0
  525. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
  526. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  527. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +33 -0
  528. data/lib/datadog/tracing/contrib/sequel/database.rb +60 -0
  529. data/lib/datadog/tracing/contrib/sequel/dataset.rb +65 -0
  530. data/lib/datadog/tracing/contrib/sequel/ext.rb +22 -0
  531. data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
  532. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  533. data/lib/datadog/tracing/contrib/sequel/utils.rb +87 -0
  534. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +38 -0
  535. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +25 -0
  536. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
  537. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  538. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +61 -0
  539. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +53 -0
  540. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +44 -0
  541. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +38 -0
  542. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +53 -0
  543. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +71 -0
  544. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +34 -0
  545. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +34 -0
  546. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +33 -0
  547. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +98 -0
  548. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +44 -0
  549. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +43 -0
  550. data/lib/datadog/tracing/contrib/sinatra/env.rb +66 -0
  551. data/lib/datadog/tracing/contrib/sinatra/ext.rb +32 -0
  552. data/lib/datadog/tracing/contrib/sinatra/framework.rb +118 -0
  553. data/lib/datadog/tracing/contrib/sinatra/headers.rb +35 -0
  554. data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
  555. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +76 -0
  556. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +159 -0
  557. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +123 -0
  558. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +38 -0
  559. data/lib/datadog/tracing/contrib/sneakers/ext.rb +26 -0
  560. data/lib/datadog/tracing/contrib/sneakers/integration.rb +46 -0
  561. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +29 -0
  562. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +58 -0
  563. data/lib/datadog/tracing/contrib/status_code_matcher.rb +75 -0
  564. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +35 -0
  565. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  566. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +27 -0
  567. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +105 -0
  568. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
  569. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +37 -0
  570. data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
  571. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
  572. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +99 -0
  573. data/lib/datadog/tracing/contrib.rb +76 -0
  574. data/lib/datadog/tracing/correlation.rb +100 -0
  575. data/lib/datadog/tracing/distributed/headers/b3.rb +55 -0
  576. data/lib/datadog/tracing/distributed/headers/b3_single.rb +67 -0
  577. data/lib/datadog/tracing/distributed/headers/datadog.rb +52 -0
  578. data/lib/datadog/tracing/distributed/headers/ext.rb +31 -0
  579. data/lib/datadog/tracing/distributed/helpers.rb +44 -0
  580. data/lib/datadog/tracing/distributed/parser.rb +70 -0
  581. data/lib/datadog/tracing/event.rb +78 -0
  582. data/lib/datadog/tracing/flush.rb +74 -0
  583. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  584. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  585. data/lib/datadog/tracing/metadata/ext.rb +151 -0
  586. data/lib/datadog/tracing/metadata/tagging.rb +110 -0
  587. data/lib/datadog/tracing/metadata.rb +20 -0
  588. data/lib/datadog/tracing/pipeline/span_filter.rb +42 -0
  589. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  590. data/lib/datadog/tracing/pipeline.rb +65 -0
  591. data/lib/datadog/tracing/propagation/grpc.rb +88 -0
  592. data/lib/datadog/tracing/propagation/http.rb +109 -0
  593. data/lib/datadog/tracing/runtime/metrics.rb +19 -0
  594. data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
  595. data/lib/datadog/tracing/sampling/ext.rb +27 -0
  596. data/lib/datadog/tracing/sampling/matcher.rb +68 -0
  597. data/lib/datadog/tracing/sampling/priority_sampler.rb +112 -0
  598. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +97 -0
  599. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +41 -0
  600. data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
  601. data/lib/datadog/tracing/sampling/rate_sampler.rb +55 -0
  602. data/lib/datadog/tracing/sampling/rule.rb +76 -0
  603. data/lib/datadog/tracing/sampling/rule_sampler.rb +131 -0
  604. data/lib/datadog/tracing/sampling/sampler.rb +44 -0
  605. data/lib/datadog/tracing/span.rb +212 -0
  606. data/lib/datadog/tracing/span_operation.rb +520 -0
  607. data/lib/datadog/tracing/sync_writer.rb +69 -0
  608. data/lib/datadog/tracing/trace_digest.rb +60 -0
  609. data/lib/datadog/tracing/trace_operation.rb +431 -0
  610. data/lib/datadog/tracing/trace_segment.rb +207 -0
  611. data/lib/datadog/tracing/tracer.rb +505 -0
  612. data/lib/datadog/tracing/workers/trace_writer.rb +195 -0
  613. data/lib/datadog/tracing/workers.rb +125 -0
  614. data/lib/datadog/tracing/writer.rb +180 -0
  615. data/lib/datadog/tracing.rb +142 -0
  616. data/lib/ddtrace/auto_instrument.rb +9 -0
  617. data/lib/ddtrace/auto_instrument_base.rb +8 -0
  618. data/lib/ddtrace/profiling/preload.rb +4 -0
  619. data/lib/ddtrace/transport/ext.rb +35 -0
  620. data/lib/ddtrace/transport/http/adapters/net.rb +57 -12
  621. data/lib/ddtrace/transport/http/adapters/registry.rb +3 -0
  622. data/lib/ddtrace/transport/http/adapters/test.rb +12 -2
  623. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +30 -15
  624. data/lib/ddtrace/transport/http/api/endpoint.rb +2 -0
  625. data/lib/ddtrace/transport/http/api/fallbacks.rb +2 -0
  626. data/lib/ddtrace/transport/http/api/instance.rb +2 -0
  627. data/lib/ddtrace/transport/http/api/map.rb +2 -0
  628. data/lib/ddtrace/transport/http/api/spec.rb +2 -0
  629. data/lib/ddtrace/transport/http/api.rb +6 -11
  630. data/lib/ddtrace/transport/http/builder.rb +22 -7
  631. data/lib/ddtrace/transport/http/client.rb +5 -1
  632. data/lib/ddtrace/transport/http/env.rb +10 -0
  633. data/lib/ddtrace/transport/http/response.rb +36 -4
  634. data/lib/ddtrace/transport/http/statistics.rb +18 -3
  635. data/lib/ddtrace/transport/http/traces.rb +9 -6
  636. data/lib/ddtrace/transport/http.rb +66 -39
  637. data/lib/ddtrace/transport/io/client.rb +20 -9
  638. data/lib/ddtrace/transport/io/response.rb +3 -3
  639. data/lib/ddtrace/transport/io/traces.rb +12 -2
  640. data/lib/ddtrace/transport/io.rb +5 -3
  641. data/lib/ddtrace/transport/parcel.rb +9 -0
  642. data/lib/ddtrace/transport/request.rb +2 -0
  643. data/lib/ddtrace/transport/response.rb +13 -0
  644. data/lib/ddtrace/transport/serializable_trace.rb +118 -0
  645. data/lib/ddtrace/transport/statistics.rb +7 -4
  646. data/lib/ddtrace/transport/trace_formatter.rb +187 -0
  647. data/lib/ddtrace/transport/traces.rb +43 -10
  648. data/lib/ddtrace/version.rb +20 -5
  649. data/lib/ddtrace.rb +10 -71
  650. metadata +643 -603
  651. data/.circleci/config.yml +0 -490
  652. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  653. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  654. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  655. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  656. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  657. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  658. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  659. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  660. data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
  661. data/.dockerignore +0 -1
  662. data/.env +0 -26
  663. data/.github/CODEOWNERS +0 -1
  664. data/.rspec +0 -1
  665. data/.rubocop.yml +0 -81
  666. data/.yardopts +0 -5
  667. data/Appraisals +0 -944
  668. data/Gemfile +0 -7
  669. data/Rakefile +0 -731
  670. data/benchmarks/postgres_database.yml +0 -9
  671. data/benchmarks/sidekiq_test.rb +0 -154
  672. data/docker-compose.yml +0 -335
  673. data/lib/ddtrace/analytics.rb +0 -36
  674. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  675. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  676. data/lib/ddtrace/augmentation/shim.rb +0 -102
  677. data/lib/ddtrace/augmentation.rb +0 -13
  678. data/lib/ddtrace/buffer.rb +0 -119
  679. data/lib/ddtrace/chunker.rb +0 -34
  680. data/lib/ddtrace/configuration/base.rb +0 -84
  681. data/lib/ddtrace/configuration/components.rb +0 -154
  682. data/lib/ddtrace/configuration/dependency_resolver.rb +0 -24
  683. data/lib/ddtrace/configuration/option.rb +0 -64
  684. data/lib/ddtrace/configuration/option_definition.rb +0 -123
  685. data/lib/ddtrace/configuration/option_definition_set.rb +0 -18
  686. data/lib/ddtrace/configuration/option_set.rb +0 -6
  687. data/lib/ddtrace/configuration/options.rb +0 -112
  688. data/lib/ddtrace/configuration/pin_setup.rb +0 -30
  689. data/lib/ddtrace/configuration/settings.rb +0 -255
  690. data/lib/ddtrace/configuration.rb +0 -53
  691. data/lib/ddtrace/context.rb +0 -305
  692. data/lib/ddtrace/context_flush.rb +0 -69
  693. data/lib/ddtrace/context_provider.rb +0 -50
  694. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -25
  695. data/lib/ddtrace/contrib/action_cable/event.rb +0 -65
  696. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -49
  697. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -55
  698. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -50
  699. data/lib/ddtrace/contrib/action_cable/events.rb +0 -33
  700. data/lib/ddtrace/contrib/action_cable/ext.rb +0 -23
  701. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -31
  702. data/lib/ddtrace/contrib/action_cable/integration.rb +0 -38
  703. data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -27
  704. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -148
  705. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -25
  706. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -27
  707. data/lib/ddtrace/contrib/action_pack/ext.rb +0 -16
  708. data/lib/ddtrace/contrib/action_pack/integration.rb +0 -38
  709. data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -23
  710. data/lib/ddtrace/contrib/action_pack/utils.rb +0 -36
  711. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -26
  712. data/lib/ddtrace/contrib/action_view/event.rb +0 -39
  713. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -45
  714. data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -48
  715. data/lib/ddtrace/contrib/action_view/events.rb +0 -30
  716. data/lib/ddtrace/contrib/action_view/ext.rb +0 -17
  717. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -74
  718. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -167
  719. data/lib/ddtrace/contrib/action_view/integration.rb +0 -45
  720. data/lib/ddtrace/contrib/action_view/patcher.rb +0 -47
  721. data/lib/ddtrace/contrib/action_view/utils.rb +0 -32
  722. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -25
  723. data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -68
  724. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -32
  725. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -35
  726. data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -30
  727. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -17
  728. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -40
  729. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -29
  730. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -45
  731. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -30
  732. data/lib/ddtrace/contrib/active_record/event.rb +0 -30
  733. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -60
  734. data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -64
  735. data/lib/ddtrace/contrib/active_record/events.rb +0 -30
  736. data/lib/ddtrace/contrib/active_record/ext.rb +0 -21
  737. data/lib/ddtrace/contrib/active_record/integration.rb +0 -46
  738. data/lib/ddtrace/contrib/active_record/patcher.rb +0 -23
  739. data/lib/ddtrace/contrib/active_record/utils.rb +0 -76
  740. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -157
  741. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -48
  742. data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -47
  743. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -25
  744. data/lib/ddtrace/contrib/active_support/ext.rb +0 -21
  745. data/lib/ddtrace/contrib/active_support/integration.rb +0 -40
  746. data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -62
  747. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -66
  748. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -159
  749. data/lib/ddtrace/contrib/active_support/patcher.rb +0 -23
  750. data/lib/ddtrace/contrib/analytics.rb +0 -24
  751. data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -25
  752. data/lib/ddtrace/contrib/aws/ext.rb +0 -20
  753. data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -56
  754. data/lib/ddtrace/contrib/aws/integration.rb +0 -42
  755. data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -56
  756. data/lib/ddtrace/contrib/aws/patcher.rb +0 -49
  757. data/lib/ddtrace/contrib/aws/services.rb +0 -115
  758. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -15
  759. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -35
  760. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -11
  761. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -23
  762. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -38
  763. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -28
  764. data/lib/ddtrace/contrib/configurable.rb +0 -76
  765. data/lib/ddtrace/contrib/configuration/resolver.rb +0 -16
  766. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -39
  767. data/lib/ddtrace/contrib/configuration/settings.rb +0 -35
  768. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -25
  769. data/lib/ddtrace/contrib/dalli/ext.rb +0 -17
  770. data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -50
  771. data/lib/ddtrace/contrib/dalli/integration.rb +0 -38
  772. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -67
  773. data/lib/ddtrace/contrib/dalli/quantize.rb +0 -22
  774. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -25
  775. data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -18
  776. data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -38
  777. data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -28
  778. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -61
  779. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -26
  780. data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -19
  781. data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -39
  782. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -118
  783. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -80
  784. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -27
  785. data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -148
  786. data/lib/ddtrace/contrib/ethon/ext.rb +0 -15
  787. data/lib/ddtrace/contrib/ethon/integration.rb +0 -43
  788. data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -80
  789. data/lib/ddtrace/contrib/ethon/patcher.rb +0 -25
  790. data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -28
  791. data/lib/ddtrace/contrib/excon/ext.rb +0 -14
  792. data/lib/ddtrace/contrib/excon/integration.rb +0 -43
  793. data/lib/ddtrace/contrib/excon/middleware.rb +0 -157
  794. data/lib/ddtrace/contrib/excon/patcher.rb +0 -27
  795. data/lib/ddtrace/contrib/extensions.rb +0 -59
  796. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -33
  797. data/lib/ddtrace/contrib/faraday/connection.rb +0 -18
  798. data/lib/ddtrace/contrib/faraday/ext.rb +0 -14
  799. data/lib/ddtrace/contrib/faraday/integration.rb +0 -43
  800. data/lib/ddtrace/contrib/faraday/middleware.rb +0 -81
  801. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -81
  802. data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -18
  803. data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -27
  804. data/lib/ddtrace/contrib/grape/endpoint.rb +0 -208
  805. data/lib/ddtrace/contrib/grape/ext.rb +0 -19
  806. data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -33
  807. data/lib/ddtrace/contrib/grape/integration.rb +0 -39
  808. data/lib/ddtrace/contrib/grape/patcher.rb +0 -73
  809. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -27
  810. data/lib/ddtrace/contrib/graphql/ext.rb +0 -13
  811. data/lib/ddtrace/contrib/graphql/integration.rb +0 -39
  812. data/lib/ddtrace/contrib/graphql/patcher.rb +0 -57
  813. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -25
  814. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -56
  815. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -76
  816. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -74
  817. data/lib/ddtrace/contrib/grpc/ext.rb +0 -15
  818. data/lib/ddtrace/contrib/grpc/integration.rb +0 -38
  819. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -49
  820. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -72
  821. data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -39
  822. data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -27
  823. data/lib/ddtrace/contrib/http/ext.rb +0 -14
  824. data/lib/ddtrace/contrib/http/instrumentation.rb +0 -170
  825. data/lib/ddtrace/contrib/http/integration.rb +0 -45
  826. data/lib/ddtrace/contrib/http/patcher.rb +0 -26
  827. data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -10
  828. data/lib/ddtrace/contrib/integration.rb +0 -16
  829. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -28
  830. data/lib/ddtrace/contrib/mongodb/ext.rb +0 -20
  831. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -68
  832. data/lib/ddtrace/contrib/mongodb/integration.rb +0 -38
  833. data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -68
  834. data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -31
  835. data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -108
  836. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -25
  837. data/lib/ddtrace/contrib/mysql2/ext.rb +0 -15
  838. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -60
  839. data/lib/ddtrace/contrib/mysql2/integration.rb +0 -38
  840. data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -27
  841. data/lib/ddtrace/contrib/patchable.rb +0 -59
  842. data/lib/ddtrace/contrib/patcher.rb +0 -56
  843. data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -25
  844. data/lib/ddtrace/contrib/presto/ext.rb +0 -25
  845. data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -107
  846. data/lib/ddtrace/contrib/presto/integration.rb +0 -38
  847. data/lib/ddtrace/contrib/presto/patcher.rb +0 -30
  848. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -25
  849. data/lib/ddtrace/contrib/racecar/event.rb +0 -71
  850. data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -27
  851. data/lib/ddtrace/contrib/racecar/events/message.rb +0 -27
  852. data/lib/ddtrace/contrib/racecar/events.rb +0 -30
  853. data/lib/ddtrace/contrib/racecar/ext.rb +0 -21
  854. data/lib/ddtrace/contrib/racecar/integration.rb +0 -39
  855. data/lib/ddtrace/contrib/racecar/patcher.rb +0 -26
  856. data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -41
  857. data/lib/ddtrace/contrib/rack/ext.rb +0 -18
  858. data/lib/ddtrace/contrib/rack/integration.rb +0 -38
  859. data/lib/ddtrace/contrib/rack/middlewares.rb +0 -287
  860. data/lib/ddtrace/contrib/rack/patcher.rb +0 -107
  861. data/lib/ddtrace/contrib/rack/request_queue.rb +0 -39
  862. data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -94
  863. data/lib/ddtrace/contrib/rails/ext.rb +0 -13
  864. data/lib/ddtrace/contrib/rails/framework.rb +0 -118
  865. data/lib/ddtrace/contrib/rails/integration.rb +0 -44
  866. data/lib/ddtrace/contrib/rails/middlewares.rb +0 -38
  867. data/lib/ddtrace/contrib/rails/patcher.rb +0 -74
  868. data/lib/ddtrace/contrib/rails/railtie.rb +0 -17
  869. data/lib/ddtrace/contrib/rails/utils.rb +0 -20
  870. data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -27
  871. data/lib/ddtrace/contrib/rake/ext.rb +0 -18
  872. data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -88
  873. data/lib/ddtrace/contrib/rake/integration.rb +0 -38
  874. data/lib/ddtrace/contrib/rake/patcher.rb +0 -30
  875. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -36
  876. data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -25
  877. data/lib/ddtrace/contrib/redis/ext.rb +0 -18
  878. data/lib/ddtrace/contrib/redis/integration.rb +0 -42
  879. data/lib/ddtrace/contrib/redis/patcher.rb +0 -97
  880. data/lib/ddtrace/contrib/redis/quantize.rb +0 -47
  881. data/lib/ddtrace/contrib/redis/tags.rb +0 -38
  882. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -159
  883. data/lib/ddtrace/contrib/registerable.rb +0 -33
  884. data/lib/ddtrace/contrib/registry.rb +0 -42
  885. data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -26
  886. data/lib/ddtrace/contrib/resque/ext.rb +0 -14
  887. data/lib/ddtrace/contrib/resque/integration.rb +0 -47
  888. data/lib/ddtrace/contrib/resque/patcher.rb +0 -29
  889. data/lib/ddtrace/contrib/resque/resque_job.rb +0 -80
  890. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -26
  891. data/lib/ddtrace/contrib/rest_client/ext.rb +0 -14
  892. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -38
  893. data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -23
  894. data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -89
  895. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -23
  896. data/lib/ddtrace/contrib/sequel/database.rb +0 -61
  897. data/lib/ddtrace/contrib/sequel/dataset.rb +0 -62
  898. data/lib/ddtrace/contrib/sequel/ext.rb +0 -15
  899. data/lib/ddtrace/contrib/sequel/integration.rb +0 -38
  900. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -33
  901. data/lib/ddtrace/contrib/sequel/utils.rb +0 -46
  902. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -24
  903. data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -18
  904. data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -39
  905. data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -24
  906. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -49
  907. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -43
  908. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -31
  909. data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -23
  910. data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -38
  911. data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -34
  912. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -66
  913. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -45
  914. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -34
  915. data/lib/ddtrace/contrib/sinatra/env.rb +0 -58
  916. data/lib/ddtrace/contrib/sinatra/ext.rb +0 -24
  917. data/lib/ddtrace/contrib/sinatra/headers.rb +0 -31
  918. data/lib/ddtrace/contrib/sinatra/integration.rb +0 -38
  919. data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -28
  920. data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -150
  921. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -78
  922. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -25
  923. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -26
  924. data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -18
  925. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -84
  926. data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -38
  927. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -42
  928. data/lib/ddtrace/correlation.rb +0 -38
  929. data/lib/ddtrace/diagnostics/health.rb +0 -33
  930. data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -44
  931. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -56
  932. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -42
  933. data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -70
  934. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -45
  935. data/lib/ddtrace/encoding.rb +0 -69
  936. data/lib/ddtrace/environment.rb +0 -27
  937. data/lib/ddtrace/error.rb +0 -27
  938. data/lib/ddtrace/event.rb +0 -52
  939. data/lib/ddtrace/ext/analytics.rb +0 -12
  940. data/lib/ddtrace/ext/app_types.rb +0 -11
  941. data/lib/ddtrace/ext/correlation.rb +0 -11
  942. data/lib/ddtrace/ext/diagnostics.rb +0 -33
  943. data/lib/ddtrace/ext/distributed.rb +0 -33
  944. data/lib/ddtrace/ext/environment.rb +0 -14
  945. data/lib/ddtrace/ext/errors.rb +0 -10
  946. data/lib/ddtrace/ext/forced_tracing.rb +0 -25
  947. data/lib/ddtrace/ext/http.rb +0 -46
  948. data/lib/ddtrace/ext/manual_tracing.rb +0 -9
  949. data/lib/ddtrace/ext/metrics.rb +0 -15
  950. data/lib/ddtrace/ext/net.rb +0 -10
  951. data/lib/ddtrace/ext/priority.rb +0 -16
  952. data/lib/ddtrace/ext/runtime.rb +0 -26
  953. data/lib/ddtrace/ext/sampling.rb +0 -16
  954. data/lib/ddtrace/ext/sql.rb +0 -8
  955. data/lib/ddtrace/ext/transport.rb +0 -17
  956. data/lib/ddtrace/forced_tracing.rb +0 -36
  957. data/lib/ddtrace/logger.rb +0 -40
  958. data/lib/ddtrace/metrics.rb +0 -222
  959. data/lib/ddtrace/monkey.rb +0 -58
  960. data/lib/ddtrace/opentelemetry/extensions.rb +0 -13
  961. data/lib/ddtrace/opentelemetry/span.rb +0 -33
  962. data/lib/ddtrace/opentracer/binary_propagator.rb +0 -24
  963. data/lib/ddtrace/opentracer/carrier.rb +0 -6
  964. data/lib/ddtrace/opentracer/distributed_headers.rb +0 -52
  965. data/lib/ddtrace/opentracer/global_tracer.rb +0 -15
  966. data/lib/ddtrace/opentracer/propagator.rb +0 -22
  967. data/lib/ddtrace/opentracer/rack_propagator.rb +0 -60
  968. data/lib/ddtrace/opentracer/scope.rb +0 -15
  969. data/lib/ddtrace/opentracer/scope_manager.rb +0 -6
  970. data/lib/ddtrace/opentracer/span.rb +0 -98
  971. data/lib/ddtrace/opentracer/span_context.rb +0 -14
  972. data/lib/ddtrace/opentracer/span_context_factory.rb +0 -23
  973. data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -75
  974. data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -30
  975. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -40
  976. data/lib/ddtrace/opentracer/tracer.rb +0 -208
  977. data/lib/ddtrace/opentracer.rb +0 -40
  978. data/lib/ddtrace/patcher.rb +0 -47
  979. data/lib/ddtrace/pin.rb +0 -114
  980. data/lib/ddtrace/pipeline/span_filter.rb +0 -38
  981. data/lib/ddtrace/pipeline/span_processor.rb +0 -20
  982. data/lib/ddtrace/pipeline.rb +0 -46
  983. data/lib/ddtrace/propagation/grpc_propagator.rb +0 -61
  984. data/lib/ddtrace/propagation/http_propagator.rb +0 -75
  985. data/lib/ddtrace/quantization/hash.rb +0 -103
  986. data/lib/ddtrace/quantization/http.rb +0 -86
  987. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  988. data/lib/ddtrace/runtime/class_count.rb +0 -17
  989. data/lib/ddtrace/runtime/container.rb +0 -73
  990. data/lib/ddtrace/runtime/gc.rb +0 -16
  991. data/lib/ddtrace/runtime/identity.rb +0 -41
  992. data/lib/ddtrace/runtime/metrics.rb +0 -96
  993. data/lib/ddtrace/runtime/object_space.rb +0 -19
  994. data/lib/ddtrace/runtime/socket.rb +0 -14
  995. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  996. data/lib/ddtrace/sampler.rb +0 -290
  997. data/lib/ddtrace/sampling/matcher.rb +0 -57
  998. data/lib/ddtrace/sampling/rate_limiter.rb +0 -127
  999. data/lib/ddtrace/sampling/rule.rb +0 -61
  1000. data/lib/ddtrace/sampling/rule_sampler.rb +0 -125
  1001. data/lib/ddtrace/sampling.rb +0 -2
  1002. data/lib/ddtrace/span.rb +0 -297
  1003. data/lib/ddtrace/sync_writer.rb +0 -67
  1004. data/lib/ddtrace/tracer.rb +0 -432
  1005. data/lib/ddtrace/utils/database.rb +0 -25
  1006. data/lib/ddtrace/utils/time.rb +0 -14
  1007. data/lib/ddtrace/utils.rb +0 -65
  1008. data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -301
  1009. data/lib/ddtrace/worker.rb +0 -20
  1010. data/lib/ddtrace/workers/async.rb +0 -165
  1011. data/lib/ddtrace/workers/loop.rb +0 -105
  1012. data/lib/ddtrace/workers/polling.rb +0 -48
  1013. data/lib/ddtrace/workers/queue.rb +0 -39
  1014. data/lib/ddtrace/workers/runtime_metrics.rb +0 -47
  1015. data/lib/ddtrace/workers/trace_writer.rb +0 -199
  1016. data/lib/ddtrace/workers.rb +0 -117
  1017. data/lib/ddtrace/writer.rb +0 -154
  1018. data/tasks/release_gem.rake +0 -28
@@ -0,0 +1,411 @@
1
+ # typed: false
2
+
3
+ require 'datadog/core/configuration/agent_settings_resolver'
4
+ require 'datadog/core/diagnostics/environment_logger'
5
+ require 'datadog/core/diagnostics/health'
6
+ require 'datadog/core/logger'
7
+ require 'datadog/core/runtime/metrics'
8
+ require 'datadog/core/workers/runtime_metrics'
9
+
10
+ require 'datadog/tracing/tracer'
11
+ require 'datadog/tracing/flush'
12
+ require 'datadog/tracing/sync_writer'
13
+
14
+ module Datadog
15
+ module Core
16
+ module Configuration
17
+ # Global components for the trace library.
18
+ # rubocop:disable Metrics/ClassLength
19
+ class Components
20
+ class << self
21
+ def build_health_metrics(settings)
22
+ settings = settings.diagnostics.health_metrics
23
+ options = { enabled: settings.enabled }
24
+ options[:statsd] = settings.statsd unless settings.statsd.nil?
25
+
26
+ Core::Diagnostics::Health::Metrics.new(**options)
27
+ end
28
+
29
+ def build_logger(settings)
30
+ logger = settings.logger.instance || Core::Logger.new($stdout)
31
+ logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
32
+
33
+ logger
34
+ end
35
+
36
+ def build_runtime_metrics(settings)
37
+ options = { enabled: settings.runtime_metrics.enabled }
38
+ options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
39
+ options[:services] = [settings.service] unless settings.service.nil?
40
+
41
+ Core::Runtime::Metrics.new(**options)
42
+ end
43
+
44
+ def build_runtime_metrics_worker(settings)
45
+ # NOTE: Should we just ignore building the worker if its not enabled?
46
+ options = settings.runtime_metrics.opts.merge(
47
+ enabled: settings.runtime_metrics.enabled,
48
+ metrics: build_runtime_metrics(settings)
49
+ )
50
+
51
+ Core::Workers::RuntimeMetrics.new(options)
52
+ end
53
+
54
+ def build_tracer(settings, agent_settings)
55
+ # If a custom tracer has been provided, use it instead.
56
+ # Ignore all other options (they should already be configured.)
57
+ tracer = settings.tracing.instance
58
+ return tracer unless tracer.nil?
59
+
60
+ # Apply test mode settings if test mode is activated
61
+ if settings.tracing.test_mode.enabled
62
+ trace_flush = build_test_mode_trace_flush(settings)
63
+ sampler = build_test_mode_sampler
64
+ writer = build_test_mode_writer(settings, agent_settings)
65
+ else
66
+ trace_flush = build_trace_flush(settings)
67
+ sampler = build_sampler(settings)
68
+ writer = build_writer(settings, agent_settings)
69
+ end
70
+
71
+ subscribe_to_writer_events!(writer, sampler, settings.tracing.test_mode.enabled)
72
+
73
+ Tracing::Tracer.new(
74
+ default_service: settings.service,
75
+ enabled: settings.tracing.enabled,
76
+ trace_flush: trace_flush,
77
+ sampler: sampler,
78
+ writer: writer,
79
+ tags: build_tracer_tags(settings),
80
+ )
81
+ end
82
+
83
+ def build_trace_flush(settings)
84
+ if settings.tracing.partial_flush.enabled
85
+ Tracing::Flush::Partial.new(
86
+ min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold
87
+ )
88
+ else
89
+ Tracing::Flush::Finished.new
90
+ end
91
+ end
92
+
93
+ # TODO: Sampler should be a top-level component.
94
+ # It is currently part of the Tracer initialization
95
+ # process, but can take a variety of options (including
96
+ # a fully custom instance) that makes the Tracer
97
+ # initialization process complex.
98
+ def build_sampler(settings)
99
+ if (sampler = settings.tracing.sampler)
100
+ if settings.tracing.priority_sampling == false
101
+ sampler
102
+ else
103
+ ensure_priority_sampling(sampler, settings)
104
+ end
105
+ elsif settings.tracing.priority_sampling == false
106
+ Tracing::Sampling::RuleSampler.new(
107
+ rate_limit: settings.tracing.sampling.rate_limit,
108
+ default_sample_rate: settings.tracing.sampling.default_rate
109
+ )
110
+ else
111
+ Tracing::Sampling::PrioritySampler.new(
112
+ base_sampler: Tracing::Sampling::AllSampler.new,
113
+ post_sampler: Tracing::Sampling::RuleSampler.new(
114
+ rate_limit: settings.tracing.sampling.rate_limit,
115
+ default_sample_rate: settings.tracing.sampling.default_rate
116
+ )
117
+ )
118
+ end
119
+ end
120
+
121
+ def ensure_priority_sampling(sampler, settings)
122
+ if sampler.is_a?(Tracing::Sampling::PrioritySampler)
123
+ sampler
124
+ else
125
+ Tracing::Sampling::PrioritySampler.new(
126
+ base_sampler: sampler,
127
+ post_sampler: Tracing::Sampling::RuleSampler.new(
128
+ rate_limit: settings.tracing.sampling.rate_limit,
129
+ default_sample_rate: settings.tracing.sampling.default_rate
130
+ )
131
+ )
132
+ end
133
+ end
134
+
135
+ # TODO: Writer should be a top-level component.
136
+ # It is currently part of the Tracer initialization
137
+ # process, but can take a variety of options (including
138
+ # a fully custom instance) that makes the Tracer
139
+ # initialization process complex.
140
+ def build_writer(settings, agent_settings)
141
+ if (writer = settings.tracing.writer)
142
+ return writer
143
+ end
144
+
145
+ Tracing::Writer.new(agent_settings: agent_settings, **settings.tracing.writer_options)
146
+ end
147
+
148
+ def subscribe_to_writer_events!(writer, sampler, test_mode)
149
+ return unless writer.respond_to?(:events) # Check if it's a custom, external writer
150
+
151
+ writer.events.after_send.subscribe(&WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK)
152
+
153
+ return unless sampler.is_a?(Tracing::Sampling::PrioritySampler)
154
+
155
+ # DEV: We need to ignore priority sampling updates coming from the agent in test mode
156
+ # because test mode wants to *unconditionally* sample all traces.
157
+ #
158
+ # This can cause trace metrics to be overestimated, but that's a trade-off we take
159
+ # here to achieve 100% sampling rate.
160
+ return if test_mode
161
+
162
+ writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(sampler))
163
+ end
164
+
165
+ WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK = lambda do |_, responses|
166
+ Core::Diagnostics::EnvironmentLogger.log!(responses)
167
+ end
168
+
169
+ # Create new lambda for writer callback,
170
+ # capture the current sampler in the callback closure.
171
+ def writer_update_priority_sampler_rates_callback(sampler)
172
+ lambda do |_, responses|
173
+ response = responses.last
174
+
175
+ next unless response && !response.internal_error? && response.service_rates
176
+
177
+ sampler.update(response.service_rates)
178
+ end
179
+ end
180
+
181
+ def build_profiler(settings, agent_settings, tracer)
182
+ return unless settings.profiling.enabled
183
+
184
+ # Workaround for weird dependency direction: the Core::Configuration::Components class currently has a
185
+ # dependency on individual products, in this case the Profiler.
186
+ # (Note "currently": in the future we want to change this so core classes don't depend on specific products)
187
+ #
188
+ # If the current file included a `require 'datadog/profiler'` at its beginning, we would generate circular
189
+ # requires when used from profiling:
190
+ #
191
+ # datadog/profiling
192
+ # └─requires─> datadog/core
193
+ # └─requires─> datadog/core/configuration/components
194
+ # └─requires─> datadog/profiling # Loop!
195
+ #
196
+ # ...thus in #1998 we removed such a require.
197
+ #
198
+ # On the other hand, if datadog/core is loaded by a different product and no general `require 'ddtrace'` is
199
+ # done, then profiling may not be loaded, and thus to avoid this issue we do a require here (which is a
200
+ # no-op if profiling is already loaded).
201
+ require 'datadog/profiling'
202
+ return unless Profiling.supported?
203
+
204
+ unless defined?(Profiling::Tasks::Setup)
205
+ # In #1545 a user reported a NameError due to this constant being uninitialized
206
+ # I've documented my suspicion on why that happened in
207
+ # https://github.com/DataDog/dd-trace-rb/issues/1545#issuecomment-856049025
208
+ #
209
+ # > Thanks for the info! It seems to feed into my theory: there's two moments in the code where we check if
210
+ # > profiler is "supported": 1) when loading ddtrace (inside preload) and 2) when starting the profile
211
+ # > after Datadog.configure gets run.
212
+ # > The problem is that the code assumes that both checks 1) and 2) will always reach the same conclusion:
213
+ # > either profiler is supported, or profiler is not supported.
214
+ # > In the problematic case, it looks like in your case check 1 decides that profiler is not
215
+ # > supported => doesn't load it, and then check 2 decides that it is => assumes it is loaded and tries to
216
+ # > start it.
217
+ #
218
+ # I was never able to validate if this was the issue or why exactly .supported? would change its mind BUT
219
+ # just in case it happens again, I've left this check which avoids breaking the user's application AND
220
+ # would instead direct them to report it to us instead, so that we can investigate what's wrong.
221
+ #
222
+ # TODO: As of June 2021, most checks in .supported? are related to the google-protobuf gem; so it's
223
+ # very likely that it was the origin of the issue we saw. Thus, if, as planned we end up moving away from
224
+ # protobuf OR enough time has passed and no users saw the issue again, we can remove this check altogether.
225
+ Datadog.logger.error(
226
+ 'Profiling was marked as supported and enabled, but setup task was not loaded properly. ' \
227
+ 'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug'
228
+ )
229
+
230
+ return
231
+ end
232
+
233
+ # Load extensions needed to support some of the Profiling features
234
+ Profiling::Tasks::Setup.new.run
235
+
236
+ # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
237
+
238
+ trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
239
+ tracer: tracer,
240
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
241
+ )
242
+
243
+ # TODO: It's a bit weird to treat this collector differently from others. See the TODO on the
244
+ # Datadog::Profiling::Recorder class for a discussion of this choice.
245
+ if settings.profiling.advanced.code_provenance_enabled
246
+ code_provenance_collector =
247
+ Profiling::Collectors::CodeProvenance.new
248
+ end
249
+
250
+ recorder = build_profiler_recorder(settings, code_provenance_collector)
251
+ collectors = build_profiler_collectors(settings, recorder, trace_identifiers_helper)
252
+ exporters = build_profiler_exporters(settings, agent_settings)
253
+ scheduler = build_profiler_scheduler(settings, recorder, exporters)
254
+
255
+ Profiling::Profiler.new(collectors, scheduler)
256
+ end
257
+
258
+ private
259
+
260
+ def build_tracer_tags(settings)
261
+ settings.tags.dup.tap do |tags|
262
+ tags[Core::Environment::Ext::TAG_ENV] = settings.env unless settings.env.nil?
263
+ tags[Core::Environment::Ext::TAG_VERSION] = settings.version unless settings.version.nil?
264
+ end
265
+ end
266
+
267
+ def build_test_mode_trace_flush(settings)
268
+ # If context flush behavior is provided, use it instead.
269
+ settings.tracing.test_mode.trace_flush || build_trace_flush(settings)
270
+ end
271
+
272
+ def build_test_mode_sampler
273
+ # Do not sample any spans for tests; all must be preserved.
274
+ # Set priority sampler to ensure the agent doesn't drop any traces.
275
+ Tracing::Sampling::PrioritySampler.new(
276
+ base_sampler: Tracing::Sampling::AllSampler.new,
277
+ post_sampler: Tracing::Sampling::AllSampler.new
278
+ )
279
+ end
280
+
281
+ def build_test_mode_writer(settings, agent_settings)
282
+ # Flush traces synchronously, to guarantee they are written.
283
+ writer_options = settings.tracing.test_mode.writer_options || {}
284
+ Tracing::SyncWriter.new(agent_settings: agent_settings, **writer_options)
285
+ end
286
+
287
+ def build_profiler_recorder(settings, code_provenance_collector)
288
+ event_classes = [Profiling::Events::StackSample]
289
+
290
+ Profiling::Recorder.new(
291
+ event_classes,
292
+ settings.profiling.advanced.max_events,
293
+ code_provenance_collector: code_provenance_collector
294
+ )
295
+ end
296
+
297
+ def build_profiler_collectors(settings, recorder, trace_identifiers_helper)
298
+ [
299
+ Profiling::Collectors::OldStack.new(
300
+ recorder,
301
+ trace_identifiers_helper: trace_identifiers_helper,
302
+ max_frames: settings.profiling.advanced.max_frames
303
+ # TODO: Provide proc that identifies Datadog worker threads?
304
+ # ignore_thread: settings.profiling.ignore_profiler
305
+ )
306
+ ]
307
+ end
308
+
309
+ def build_profiler_exporters(settings, agent_settings)
310
+ transport =
311
+ settings.profiling.exporter.transport || Profiling::Transport::HTTP.default(
312
+ agent_settings: agent_settings,
313
+ site: settings.site,
314
+ api_key: settings.api_key,
315
+ profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
316
+ )
317
+
318
+ [Profiling::Exporter.new(transport)]
319
+ end
320
+
321
+ def build_profiler_scheduler(settings, recorder, exporters)
322
+ Profiling::Scheduler.new(recorder, exporters)
323
+ end
324
+ end
325
+
326
+ attr_reader \
327
+ :health_metrics,
328
+ :logger,
329
+ :profiler,
330
+ :runtime_metrics,
331
+ :tracer
332
+
333
+ def initialize(settings)
334
+ # Logger
335
+ @logger = self.class.build_logger(settings)
336
+
337
+ agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
338
+
339
+ # Tracer
340
+ @tracer = self.class.build_tracer(settings, agent_settings)
341
+
342
+ # Profiler
343
+ @profiler = self.class.build_profiler(settings, agent_settings, @tracer)
344
+
345
+ # Runtime metrics
346
+ @runtime_metrics = self.class.build_runtime_metrics_worker(settings)
347
+
348
+ # Health metrics
349
+ @health_metrics = self.class.build_health_metrics(settings)
350
+ end
351
+
352
+ # Starts up components
353
+ def startup!(settings)
354
+ if settings.profiling.enabled
355
+ if profiler
356
+ @logger.debug('Profiling started')
357
+ profiler.start
358
+ else
359
+ # Display a warning for users who expected profiling to be enabled
360
+ unsupported_reason = Profiling.unsupported_reason
361
+ logger.warn("Profiling was requested but is not supported, profiling disabled: #{unsupported_reason}")
362
+ end
363
+ else
364
+ @logger.debug('Profiling is disabled')
365
+ end
366
+ end
367
+
368
+ # Shuts down all the components in use.
369
+ # If it has another instance to compare to, it will compare
370
+ # and avoid tearing down parts still in use.
371
+ def shutdown!(replacement = nil)
372
+ # Shutdown the old tracer, unless it's still being used.
373
+ # (e.g. a custom tracer instance passed in.)
374
+ tracer.shutdown! unless replacement && tracer == replacement.tracer
375
+
376
+ # Shutdown old profiler
377
+ profiler.shutdown! unless profiler.nil?
378
+
379
+ # Shutdown workers
380
+ runtime_metrics.stop(true, close_metrics: false)
381
+
382
+ # Shutdown the old metrics, unless they are still being used.
383
+ # (e.g. custom Statsd instances.)
384
+ #
385
+ # TODO: This violates the encapsulation created by Runtime::Metrics and
386
+ # Health::Metrics, by directly manipulating `statsd` and changing
387
+ # it's lifecycle management.
388
+ # If we need to directly have ownership of `statsd` lifecycle, we should
389
+ # have direct ownership of it.
390
+ old_statsd = [
391
+ runtime_metrics.metrics.statsd,
392
+ health_metrics.statsd
393
+ ].compact.uniq
394
+
395
+ new_statsd = if replacement
396
+ [
397
+ replacement.runtime_metrics.metrics.statsd,
398
+ replacement.health_metrics.statsd
399
+ ].compact.uniq
400
+ else
401
+ []
402
+ end
403
+
404
+ unused_statsd = (old_statsd - (old_statsd & new_statsd))
405
+ unused_statsd.each(&:close)
406
+ end
407
+ end
408
+ # rubocop:enable Metrics/ClassLength
409
+ end
410
+ end
411
+ end
@@ -0,0 +1,28 @@
1
+ # typed: false
2
+
3
+ require 'tsort'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Configuration
8
+ # Resolver performs a topological sort over the dependency graph
9
+ class DependencyResolver
10
+ include TSort
11
+
12
+ def initialize(dependency_graph = {})
13
+ @dependency_graph = dependency_graph
14
+ end
15
+
16
+ def tsort_each_node(&blk)
17
+ @dependency_graph.each_key(&blk)
18
+ end
19
+
20
+ def tsort_each_child(node, &blk)
21
+ @dependency_graph.fetch(node).each(&blk)
22
+ end
23
+
24
+ alias call tsort
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,69 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Core
5
+ module Configuration
6
+ # Represents an instance of an integration configuration option
7
+ # @public_api
8
+ class Option
9
+ attr_reader \
10
+ :definition
11
+
12
+ def initialize(definition, context)
13
+ @definition = definition
14
+ @context = context
15
+ @value = nil
16
+ @is_set = false
17
+ end
18
+
19
+ def set(value)
20
+ old_value = @value
21
+ (@value = context_exec(value, old_value, &definition.setter)).tap do |v|
22
+ @is_set = true
23
+ context_exec(v, old_value, &definition.on_set) if definition.on_set
24
+ end
25
+ end
26
+
27
+ def get
28
+ if @is_set
29
+ @value
30
+ elsif definition.delegate_to
31
+ context_eval(&definition.delegate_to)
32
+ else
33
+ set(default_value)
34
+ end
35
+ end
36
+
37
+ def reset
38
+ @value = if definition.resetter
39
+ # Don't change @is_set to false; custom resetters are
40
+ # responsible for changing @value back to a good state.
41
+ # Setting @is_set = false would cause a default to be applied.
42
+ context_exec(@value, &definition.resetter)
43
+ else
44
+ @is_set = false
45
+ nil
46
+ end
47
+ end
48
+
49
+ def default_value
50
+ if definition.lazy
51
+ context_eval(&definition.default)
52
+ else
53
+ definition.default
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def context_exec(*args, &block)
60
+ @context.instance_exec(*args, &block)
61
+ end
62
+
63
+ def context_eval(&block)
64
+ @context.instance_eval(&block)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,126 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core/configuration/option'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Configuration
8
+ # Represents a definition for an integration configuration option
9
+ class OptionDefinition
10
+ IDENTITY = ->(new_value, _old_value) { new_value }
11
+
12
+ attr_reader \
13
+ :default,
14
+ :delegate_to,
15
+ :depends_on,
16
+ :lazy,
17
+ :name,
18
+ :on_set,
19
+ :resetter,
20
+ :setter
21
+
22
+ def initialize(name, meta = {}, &block)
23
+ @default = meta[:default]
24
+ @delegate_to = meta[:delegate_to]
25
+ @depends_on = meta[:depends_on] || []
26
+ @lazy = meta[:lazy] || false
27
+ @name = name.to_sym
28
+ @on_set = meta[:on_set]
29
+ @resetter = meta[:resetter]
30
+ @setter = meta[:setter] || block || IDENTITY
31
+ end
32
+
33
+ # Creates a new Option, bound to the context provided.
34
+ def build(context)
35
+ Option.new(self, context)
36
+ end
37
+
38
+ # Acts as DSL for building OptionDefinitions
39
+ # @public_api
40
+ class Builder
41
+ attr_reader \
42
+ :helpers
43
+
44
+ def initialize(name, options = {})
45
+ @default = nil
46
+ @delegate_to = nil
47
+ @depends_on = []
48
+ @helpers = {}
49
+ @lazy = false
50
+ @name = name.to_sym
51
+ @on_set = nil
52
+ @resetter = nil
53
+ @setter = OptionDefinition::IDENTITY
54
+
55
+ # If options were supplied, apply them.
56
+ apply_options!(options)
57
+
58
+ # Apply block if given.
59
+ yield(self) if block_given?
60
+ end
61
+
62
+ def depends_on(*values)
63
+ @depends_on = values.flatten
64
+ end
65
+
66
+ def default(value = nil, &block)
67
+ @default = block || value
68
+ end
69
+
70
+ def delegate_to(&block)
71
+ @delegate_to = block
72
+ end
73
+
74
+ def helper(name, *_args, &block)
75
+ @helpers[name] = block
76
+ end
77
+
78
+ def lazy(value = true)
79
+ @lazy = value
80
+ end
81
+
82
+ def on_set(&block)
83
+ @on_set = block
84
+ end
85
+
86
+ def resetter(&block)
87
+ @resetter = block
88
+ end
89
+
90
+ def setter(&block)
91
+ @setter = block
92
+ end
93
+
94
+ # For applying options for OptionDefinition
95
+ def apply_options!(options = {})
96
+ return if options.nil? || options.empty?
97
+
98
+ default(options[:default]) if options.key?(:default)
99
+ delegate_to(&options[:delegate_to]) if options.key?(:delegate_to)
100
+ depends_on(*options[:depends_on]) if options.key?(:depends_on)
101
+ lazy(options[:lazy]) if options.key?(:lazy)
102
+ on_set(&options[:on_set]) if options.key?(:on_set)
103
+ resetter(&options[:resetter]) if options.key?(:resetter)
104
+ setter(&options[:setter]) if options.key?(:setter)
105
+ end
106
+
107
+ def to_definition
108
+ OptionDefinition.new(@name, meta)
109
+ end
110
+
111
+ def meta
112
+ {
113
+ default: @default,
114
+ delegate_to: @delegate_to,
115
+ depends_on: @depends_on,
116
+ lazy: @lazy,
117
+ on_set: @on_set,
118
+ resetter: @resetter,
119
+ setter: @setter
120
+ }
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,22 @@
1
+ # typed: true
2
+
3
+ require 'datadog/core/configuration/dependency_resolver'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Configuration
8
+ # Represents a set of configuration option definitions for an integration
9
+ class OptionDefinitionSet < Hash
10
+ def dependency_order
11
+ DependencyResolver.new(dependency_graph).call
12
+ end
13
+
14
+ def dependency_graph
15
+ each_with_object({}) do |(name, option), graph|
16
+ graph[name] = option.depends_on
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Core
5
+ module Configuration
6
+ class OptionSet < Hash
7
+ end
8
+ end
9
+ end
10
+ end