ddtrace 1.1.0 → 1.9.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 (641) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +423 -1
  3. data/LICENSE-3rdparty.csv +3 -0
  4. data/README.md +9 -4
  5. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +21 -5
  6. data/ext/ddtrace_profiling_loader/extconf.rb +22 -1
  7. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +52 -8
  8. data/ext/ddtrace_profiling_native_extension/clock_id.h +22 -1
  9. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +34 -3
  10. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +11 -2
  11. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +899 -0
  12. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +9 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +776 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
  15. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
  16. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
  17. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  18. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +175 -63
  19. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +18 -0
  20. data/ext/ddtrace_profiling_native_extension/extconf.rb +90 -18
  21. data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
  22. data/ext/ddtrace_profiling_native_extension/http_transport.c +354 -0
  23. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +18 -0
  24. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +154 -21
  25. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +256 -17
  26. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +17 -5
  27. data/ext/ddtrace_profiling_native_extension/profiling.c +223 -3
  28. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
  29. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +89 -0
  30. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
  31. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
  32. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +392 -44
  33. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +25 -14
  34. data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
  35. data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
  36. data/lib/datadog/appsec/assets/blocked.html +98 -3
  37. data/lib/datadog/appsec/assets/blocked.json +1 -0
  38. data/lib/datadog/appsec/assets/blocked.text +5 -0
  39. data/lib/datadog/appsec/assets/waf_rules/recommended.json +1250 -300
  40. data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -78
  41. data/lib/datadog/appsec/assets/waf_rules/strict.json +308 -73
  42. data/lib/datadog/appsec/assets.rb +3 -3
  43. data/lib/datadog/appsec/autoload.rb +4 -2
  44. data/lib/datadog/appsec/configuration/settings.rb +40 -23
  45. data/lib/datadog/appsec/configuration.rb +9 -3
  46. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -3
  47. data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -2
  48. data/lib/datadog/appsec/contrib/integration.rb +1 -1
  49. data/lib/datadog/appsec/contrib/patcher.rb +1 -1
  50. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +3 -3
  51. data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
  52. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +32 -27
  53. data/lib/datadog/appsec/contrib/rack/integration.rb +5 -5
  54. data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
  55. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +17 -21
  56. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +13 -13
  57. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +13 -13
  58. data/lib/datadog/appsec/contrib/rack/request.rb +21 -1
  59. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -3
  60. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +50 -23
  61. data/lib/datadog/appsec/contrib/rack/response.rb +1 -1
  62. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +3 -3
  63. data/lib/datadog/appsec/contrib/rails/ext.rb +1 -1
  64. data/lib/datadog/appsec/contrib/rails/framework.rb +1 -1
  65. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +12 -11
  66. data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
  67. data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -13
  68. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +13 -13
  69. data/lib/datadog/appsec/contrib/rails/request.rb +4 -1
  70. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
  71. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +3 -3
  72. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
  73. data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -1
  74. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +21 -19
  75. data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
  76. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +22 -15
  77. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +12 -12
  78. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
  79. data/lib/datadog/appsec/event.rb +10 -14
  80. data/lib/datadog/appsec/extensions.rb +43 -23
  81. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -3
  82. data/lib/datadog/appsec/processor.rb +51 -21
  83. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  84. data/lib/datadog/appsec/reactive/address_hash.rb +1 -1
  85. data/lib/datadog/appsec/reactive/engine.rb +3 -3
  86. data/lib/datadog/appsec/reactive/operation.rb +5 -5
  87. data/lib/datadog/appsec/reactive/subscriber.rb +1 -1
  88. data/lib/datadog/appsec/response.rb +63 -0
  89. data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
  90. data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
  91. data/lib/datadog/appsec/utils/http.rb +9 -0
  92. data/lib/datadog/appsec/utils.rb +7 -0
  93. data/lib/datadog/appsec.rb +6 -6
  94. data/lib/datadog/ci/configuration/components.rb +1 -1
  95. data/lib/datadog/ci/configuration/settings.rb +1 -1
  96. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
  97. data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
  98. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
  99. data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -4
  100. data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
  101. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
  102. data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
  103. data/lib/datadog/ci/contrib/rspec/integration.rb +4 -4
  104. data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
  105. data/lib/datadog/ci/ext/environment.rb +78 -20
  106. data/lib/datadog/ci/extensions.rb +4 -4
  107. data/lib/datadog/ci/flush.rb +2 -2
  108. data/lib/datadog/ci/test.rb +3 -3
  109. data/lib/datadog/ci.rb +6 -6
  110. data/lib/datadog/core/buffer/cruby.rb +1 -1
  111. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  112. data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -11
  113. data/lib/datadog/core/configuration/base.rb +14 -2
  114. data/lib/datadog/core/configuration/components.rb +103 -52
  115. data/lib/datadog/core/configuration/ext.rb +26 -0
  116. data/lib/datadog/core/configuration/option_definition.rb +12 -3
  117. data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
  118. data/lib/datadog/core/configuration/options.rb +3 -3
  119. data/lib/datadog/core/configuration/settings.rb +78 -250
  120. data/lib/datadog/core/configuration.rb +9 -6
  121. data/lib/datadog/core/diagnostics/environment_logger.rb +10 -5
  122. data/lib/datadog/core/diagnostics/health.rb +5 -23
  123. data/lib/datadog/core/environment/cgroup.rb +1 -1
  124. data/lib/datadog/core/environment/container.rb +1 -1
  125. data/lib/datadog/core/environment/ext.rb +1 -1
  126. data/lib/datadog/core/environment/identity.rb +2 -2
  127. data/lib/datadog/core/environment/platform.rb +40 -0
  128. data/lib/datadog/core/environment/socket.rb +1 -1
  129. data/lib/datadog/core/environment/variable_helpers.rb +58 -10
  130. data/lib/datadog/core/error.rb +1 -1
  131. data/lib/datadog/core/extensions.rb +1 -1
  132. data/lib/datadog/core/header_collection.rb +41 -0
  133. data/lib/datadog/core/metrics/client.rb +10 -9
  134. data/lib/datadog/core/metrics/ext.rb +0 -2
  135. data/lib/datadog/core/metrics/options.rb +3 -3
  136. data/lib/datadog/core/runtime/ext.rb +1 -1
  137. data/lib/datadog/core/runtime/metrics.rb +6 -6
  138. data/lib/datadog/core/telemetry/client.rb +79 -0
  139. data/lib/datadog/core/telemetry/collector.rb +233 -0
  140. data/lib/datadog/core/telemetry/emitter.rb +48 -0
  141. data/lib/datadog/core/telemetry/event.rb +71 -0
  142. data/lib/datadog/core/telemetry/ext.rb +11 -0
  143. data/lib/datadog/core/telemetry/heartbeat.rb +37 -0
  144. data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
  145. data/lib/datadog/core/telemetry/http/env.rb +20 -0
  146. data/lib/datadog/core/telemetry/http/ext.rb +20 -0
  147. data/lib/datadog/core/telemetry/http/response.rb +68 -0
  148. data/lib/datadog/core/telemetry/http/transport.rb +53 -0
  149. data/lib/datadog/core/telemetry/v1/app_event.rb +52 -0
  150. data/lib/datadog/core/telemetry/v1/application.rb +86 -0
  151. data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
  152. data/lib/datadog/core/telemetry/v1/dependency.rb +36 -0
  153. data/lib/datadog/core/telemetry/v1/host.rb +51 -0
  154. data/lib/datadog/core/telemetry/v1/integration.rb +58 -0
  155. data/lib/datadog/core/telemetry/v1/product.rb +28 -0
  156. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +100 -0
  157. data/lib/datadog/core/utils/compression.rb +5 -1
  158. data/lib/datadog/core/utils/object_set.rb +1 -1
  159. data/lib/datadog/core/utils/sequence.rb +5 -0
  160. data/lib/datadog/core/utils/string_table.rb +1 -1
  161. data/lib/datadog/core/utils/time.rb +3 -3
  162. data/lib/datadog/core/utils.rb +1 -22
  163. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
  164. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
  165. data/lib/datadog/core/workers/async.rb +1 -3
  166. data/lib/datadog/core/workers/polling.rb +2 -2
  167. data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
  168. data/lib/datadog/core.rb +22 -56
  169. data/lib/datadog/kit/appsec/events.rb +75 -0
  170. data/lib/datadog/kit/enable_core_dumps.rb +1 -0
  171. data/lib/datadog/kit/identity.rb +8 -7
  172. data/lib/datadog/kit.rb +1 -1
  173. data/lib/datadog/opentelemetry/api/context.rb +187 -0
  174. data/lib/datadog/opentelemetry/api/trace/span.rb +15 -0
  175. data/lib/datadog/opentelemetry/sdk/configurator.rb +38 -0
  176. data/lib/datadog/opentelemetry/sdk/id_generator.rb +27 -0
  177. data/lib/datadog/opentelemetry/sdk/propagator.rb +91 -0
  178. data/lib/datadog/opentelemetry/sdk/span_processor.rb +92 -0
  179. data/lib/datadog/opentelemetry.rb +48 -0
  180. data/lib/datadog/opentracer/distributed_headers.rb +7 -9
  181. data/lib/datadog/opentracer/rack_propagator.rb +10 -9
  182. data/lib/datadog/opentracer/span.rb +1 -1
  183. data/lib/datadog/opentracer/text_map_propagator.rb +13 -12
  184. data/lib/datadog/opentracer/thread_local_scope_manager.rb +26 -3
  185. data/lib/datadog/opentracer/tracer.rb +23 -21
  186. data/lib/datadog/opentracer.rb +16 -16
  187. data/lib/datadog/profiling/buffer.rb +3 -3
  188. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -0
  189. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +43 -0
  190. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +91 -0
  191. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  192. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
  193. data/lib/datadog/profiling/collectors/old_stack.rb +15 -8
  194. data/lib/datadog/profiling/collectors/stack.rb +3 -6
  195. data/lib/datadog/profiling/encoding/profile.rb +8 -12
  196. data/lib/datadog/profiling/events/stack.rb +1 -1
  197. data/lib/datadog/profiling/exporter.rb +69 -9
  198. data/lib/datadog/profiling/ext/forking.rb +41 -42
  199. data/lib/datadog/profiling/ext.rb +3 -15
  200. data/lib/datadog/profiling/flush.rb +25 -56
  201. data/lib/datadog/profiling/http_transport.rb +132 -0
  202. data/lib/datadog/profiling/old_recorder.rb +109 -0
  203. data/lib/datadog/profiling/pprof/builder.rb +4 -4
  204. data/lib/datadog/profiling/pprof/converter.rb +1 -1
  205. data/lib/datadog/profiling/pprof/message_set.rb +1 -1
  206. data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
  207. data/lib/datadog/profiling/pprof/string_table.rb +1 -1
  208. data/lib/datadog/profiling/pprof/template.rb +5 -5
  209. data/lib/datadog/profiling/preload.rb +1 -1
  210. data/lib/datadog/profiling/profiler.rb +7 -0
  211. data/lib/datadog/profiling/scheduler.rb +28 -49
  212. data/lib/datadog/profiling/stack_recorder.rb +50 -4
  213. data/lib/datadog/profiling/tag_builder.rb +6 -1
  214. data/lib/datadog/profiling/tasks/setup.rb +2 -9
  215. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
  216. data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
  217. data/lib/datadog/profiling.rb +24 -21
  218. data/lib/datadog/tracing/analytics.rb +1 -1
  219. data/lib/datadog/tracing/buffer.rb +5 -5
  220. data/lib/datadog/tracing/client_ip.rb +164 -0
  221. data/lib/datadog/tracing/configuration/ext.rb +47 -4
  222. data/lib/datadog/tracing/configuration/settings.rb +433 -0
  223. data/lib/datadog/tracing/context.rb +1 -1
  224. data/lib/datadog/tracing/context_provider.rb +18 -2
  225. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  226. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
  227. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
  228. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
  229. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
  230. data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
  231. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
  232. data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
  233. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  234. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  235. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
  236. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
  237. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
  238. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
  239. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
  240. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  241. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +10 -6
  242. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  243. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
  244. data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
  245. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
  246. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  247. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
  248. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  249. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
  250. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
  251. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
  252. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
  253. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
  254. data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
  255. data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -7
  256. data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
  257. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
  258. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  259. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
  260. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
  261. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
  262. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
  263. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
  264. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
  265. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  266. data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
  267. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
  268. data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
  269. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  270. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
  271. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
  272. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
  273. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
  274. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
  275. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
  276. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
  277. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
  278. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  279. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
  280. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
  281. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
  282. data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
  283. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  284. data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -2
  285. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
  286. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
  287. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
  288. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
  289. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
  290. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  291. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
  292. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  293. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  294. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  295. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -3
  296. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
  297. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -4
  298. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
  299. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  300. data/lib/datadog/tracing/contrib/aws/services.rb +0 -2
  301. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  302. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  303. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
  304. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
  305. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  306. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  307. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  308. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -3
  309. data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -0
  310. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +8 -5
  311. data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
  312. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  313. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
  314. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
  315. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
  316. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
  317. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -2
  318. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +7 -4
  319. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
  320. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -3
  321. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -0
  322. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -3
  323. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +9 -7
  324. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
  325. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -3
  326. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
  327. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
  328. data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
  329. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -4
  330. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  331. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -3
  332. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
  333. data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
  334. data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -7
  335. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  336. data/lib/datadog/tracing/contrib/ext.rb +25 -0
  337. data/lib/datadog/tracing/contrib/extensions.rb +5 -3
  338. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -3
  339. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
  340. data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
  341. data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -8
  342. data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -5
  343. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
  344. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -7
  345. data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
  346. data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -4
  347. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
  348. data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
  349. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -3
  350. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +10 -4
  351. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -5
  352. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -17
  353. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +7 -4
  354. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +27 -0
  355. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +43 -0
  356. data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -0
  357. data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
  358. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -5
  359. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  360. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +22 -0
  361. data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
  362. data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
  363. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  364. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  365. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  366. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  367. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
  368. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -3
  369. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +39 -0
  370. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +38 -0
  371. data/lib/datadog/tracing/contrib/http/ext.rb +2 -0
  372. data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -10
  373. data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
  374. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  375. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -3
  376. data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -0
  377. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -9
  378. data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
  379. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  380. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -3
  381. data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -0
  382. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -9
  383. data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
  384. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  385. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  386. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  387. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
  388. data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
  389. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
  390. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
  391. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
  392. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
  393. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
  394. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
  395. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
  396. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -2
  397. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -2
  398. data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
  399. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
  400. data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -3
  401. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  402. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -2
  403. data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
  404. data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
  405. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -3
  406. data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -0
  407. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  408. data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
  409. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  410. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  411. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -4
  412. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +18 -3
  413. data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -0
  414. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -5
  415. data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
  416. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  417. data/lib/datadog/tracing/contrib/patcher.rb +16 -4
  418. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +50 -0
  419. data/lib/datadog/tracing/contrib/pg/ext.rb +33 -0
  420. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +168 -0
  421. data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
  422. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  423. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -3
  424. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
  425. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
  426. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
  427. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  428. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +43 -0
  429. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
  430. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  431. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +47 -0
  432. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
  433. data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
  434. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
  435. data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
  436. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
  437. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
  438. data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
  439. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  440. data/lib/datadog/tracing/contrib/que/tracer.rb +3 -1
  441. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
  442. data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
  443. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -3
  444. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
  445. data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -3
  446. data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
  447. data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
  448. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  449. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
  450. data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
  451. data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
  452. data/lib/datadog/tracing/contrib/rack/middlewares.rb +129 -61
  453. data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -2
  454. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  455. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -1
  456. data/lib/datadog/tracing/contrib/rails/framework.rb +18 -22
  457. data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
  458. data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -2
  459. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
  460. data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
  461. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  462. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
  463. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
  464. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -7
  465. data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
  466. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -4
  467. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
  468. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -3
  469. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -0
  470. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -26
  471. data/lib/datadog/tracing/contrib/redis/integration.rb +37 -4
  472. data/lib/datadog/tracing/contrib/redis/patcher.rb +57 -13
  473. data/lib/datadog/tracing/contrib/redis/quantize.rb +12 -9
  474. data/lib/datadog/tracing/contrib/redis/tags.rb +12 -10
  475. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +72 -0
  476. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
  477. data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
  478. data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -2
  479. data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -4
  480. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +9 -3
  481. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
  482. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
  483. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  484. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +7 -6
  485. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  486. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -2
  487. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
  488. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  489. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  490. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
  491. data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
  492. data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
  493. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  494. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
  495. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
  496. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
  497. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  498. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +3 -1
  499. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -5
  500. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -3
  501. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
  502. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
  503. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
  504. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
  505. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
  506. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
  507. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +10 -6
  508. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
  509. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
  510. data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -25
  511. data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -3
  512. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
  513. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
  514. data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
  515. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +7 -7
  516. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -88
  517. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -16
  518. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
  519. data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
  520. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  521. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +4 -3
  522. data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
  523. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
  524. data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
  525. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  526. data/lib/datadog/tracing/contrib/stripe/patcher.rb +29 -0
  527. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  528. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  529. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
  530. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
  531. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -5
  532. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -10
  533. data/lib/datadog/tracing/contrib.rb +50 -47
  534. data/lib/datadog/tracing/correlation.rb +1 -1
  535. data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -6
  536. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  537. data/lib/datadog/tracing/distributed/b3_multi.rb +66 -0
  538. data/lib/datadog/tracing/distributed/b3_single.rb +66 -0
  539. data/lib/datadog/tracing/distributed/datadog.rb +153 -0
  540. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +85 -0
  541. data/lib/datadog/tracing/distributed/fetcher.rb +30 -0
  542. data/lib/datadog/tracing/distributed/headers/ext.rb +19 -15
  543. data/lib/datadog/tracing/distributed/helpers.rb +40 -4
  544. data/lib/datadog/tracing/distributed/none.rb +19 -0
  545. data/lib/datadog/tracing/distributed/propagation.rb +127 -0
  546. data/lib/datadog/tracing/distributed/trace_context.rb +378 -0
  547. data/lib/datadog/tracing/event.rb +1 -1
  548. data/lib/datadog/tracing/flush.rb +57 -35
  549. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  550. data/lib/datadog/tracing/metadata/errors.rb +2 -2
  551. data/lib/datadog/tracing/metadata/ext.rb +28 -1
  552. data/lib/datadog/tracing/metadata/tagging.rb +23 -2
  553. data/lib/datadog/tracing/metadata.rb +3 -3
  554. data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
  555. data/lib/datadog/tracing/pipeline.rb +3 -3
  556. data/lib/datadog/tracing/propagation/http.rb +3 -98
  557. data/lib/datadog/tracing/runtime/metrics.rb +1 -1
  558. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  559. data/lib/datadog/tracing/sampling/ext.rb +31 -0
  560. data/lib/datadog/tracing/sampling/priority_sampler.rb +62 -9
  561. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -11
  562. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -8
  563. data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -1
  564. data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -10
  565. data/lib/datadog/tracing/sampling/rule.rb +3 -3
  566. data/lib/datadog/tracing/sampling/rule_sampler.rb +8 -7
  567. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  568. data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
  569. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  570. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  571. data/lib/datadog/tracing/sampling/span/sampler.rb +75 -0
  572. data/lib/datadog/tracing/span.rb +24 -20
  573. data/lib/datadog/tracing/span_operation.rb +13 -13
  574. data/lib/datadog/tracing/sync_writer.rb +5 -5
  575. data/lib/datadog/tracing/trace_digest.rb +88 -2
  576. data/lib/datadog/tracing/trace_operation.rb +60 -15
  577. data/lib/datadog/tracing/trace_segment.rb +13 -8
  578. data/lib/datadog/tracing/tracer.rb +49 -21
  579. data/lib/datadog/tracing/utils.rb +50 -0
  580. data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
  581. data/lib/datadog/tracing/workers.rb +3 -3
  582. data/lib/datadog/tracing/writer.rb +12 -5
  583. data/lib/datadog/tracing.rb +8 -8
  584. data/lib/ddtrace/auto_instrument.rb +9 -2
  585. data/lib/ddtrace/transport/ext.rb +7 -1
  586. data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
  587. data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
  588. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
  589. data/lib/ddtrace/transport/http/api/map.rb +1 -1
  590. data/lib/ddtrace/transport/http/api.rb +4 -4
  591. data/lib/ddtrace/transport/http/builder.rb +5 -5
  592. data/lib/ddtrace/transport/http/client.rb +2 -2
  593. data/lib/ddtrace/transport/http/response.rb +1 -1
  594. data/lib/ddtrace/transport/http/statistics.rb +1 -1
  595. data/lib/ddtrace/transport/http/traces.rb +5 -5
  596. data/lib/ddtrace/transport/http.rb +12 -9
  597. data/lib/ddtrace/transport/io/client.rb +2 -2
  598. data/lib/ddtrace/transport/io/response.rb +1 -1
  599. data/lib/ddtrace/transport/io/traces.rb +3 -3
  600. data/lib/ddtrace/transport/io.rb +3 -3
  601. data/lib/ddtrace/transport/statistics.rb +2 -2
  602. data/lib/ddtrace/transport/trace_formatter.rb +14 -10
  603. data/lib/ddtrace/transport/traces.rb +8 -6
  604. data/lib/ddtrace/version.rb +1 -1
  605. data/lib/ddtrace.rb +6 -6
  606. metadata +127 -48
  607. data/.editorconfig +0 -22
  608. data/.gitignore +0 -58
  609. data/CONTRIBUTING.md +0 -81
  610. data/ddtrace.gemspec +0 -68
  611. data/docs/0.x-trace.png +0 -0
  612. data/docs/1.0-trace.png +0 -0
  613. data/docs/AutoInstrumentation.md +0 -36
  614. data/docs/Deprecation.md +0 -8
  615. data/docs/DevelopmentGuide.md +0 -259
  616. data/docs/GettingStarted.md +0 -2688
  617. data/docs/ProfilingDevelopment.md +0 -110
  618. data/docs/PublicApi.md +0 -14
  619. data/docs/UpgradeGuide.md +0 -736
  620. data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +0 -13
  621. data/lib/datadog/profiling/recorder.rb +0 -117
  622. data/lib/datadog/profiling/transport/client.rb +0 -16
  623. data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -107
  624. data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
  625. data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
  626. data/lib/datadog/profiling/transport/http/api.rb +0 -45
  627. data/lib/datadog/profiling/transport/http/builder.rb +0 -30
  628. data/lib/datadog/profiling/transport/http/client.rb +0 -35
  629. data/lib/datadog/profiling/transport/http/response.rb +0 -23
  630. data/lib/datadog/profiling/transport/http.rb +0 -112
  631. data/lib/datadog/profiling/transport/io/client.rb +0 -29
  632. data/lib/datadog/profiling/transport/io/response.rb +0 -18
  633. data/lib/datadog/profiling/transport/io.rb +0 -32
  634. data/lib/datadog/profiling/transport/parcel.rb +0 -19
  635. data/lib/datadog/profiling/transport/request.rb +0 -17
  636. data/lib/datadog/profiling/transport/response.rb +0 -10
  637. data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
  638. data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
  639. data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
  640. data/lib/datadog/tracing/distributed/parser.rb +0 -70
  641. data/lib/datadog/tracing/propagation/grpc.rb +0 -88
@@ -0,0 +1,40 @@
1
+ # typed: false
2
+
3
+ require 'etc'
4
+
5
+ require_relative 'identity'
6
+
7
+ module Datadog
8
+ module Core
9
+ module Environment
10
+ # For gathering information about the platform
11
+ module Platform
12
+ module_function
13
+
14
+ # @return [String] name of host; `uname -n`
15
+ def hostname
16
+ Identity.lang_version >= '2.2' ? Etc.uname[:nodename] : nil
17
+ end
18
+
19
+ # @return [String] name of kernel; `uname -s`
20
+ def kernel_name
21
+ Identity.lang_version >= '2.2' ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
22
+ end
23
+
24
+ # @return [String] kernel release; `uname -r`
25
+ def kernel_release
26
+ if Identity.lang_engine == 'jruby'
27
+ Etc.uname[:version] # Java's `os.version` maps to `uname -r`
28
+ elsif Identity.lang_version >= '2.2'
29
+ Etc.uname[:release]
30
+ end
31
+ end
32
+
33
+ # @return [String] kernel version; `uname -v`
34
+ def kernel_version
35
+ Etc.uname[:version] if Identity.lang_engine != 'jruby' && Identity.lang_version >= '2.2'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,7 +1,7 @@
1
1
  # typed: false
2
2
 
3
3
  require 'socket'
4
- require 'datadog/core/utils/forking'
4
+ require_relative '../utils/forking'
5
5
 
6
6
  module Datadog
7
7
  module Core
@@ -9,18 +9,45 @@ module Datadog
9
9
  module VariableHelpers
10
10
  extend self
11
11
 
12
- def env_to_bool(var, default = nil)
13
- var = decode_array(var)
12
+ # Reads an environment variable as a Boolean.
13
+ #
14
+ # @param [String] var environment variable
15
+ # @param [Array<String>] var list of environment variables
16
+ # @param [Boolean] default the default value if the keys in `var` are not present in the environment
17
+ # @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
18
+ # the first key in `var` is not used.
19
+ # @return [Boolean] if the environment value is the string `true`
20
+ # @return [default] if the environment value is not found
21
+ def env_to_bool(var, default = nil, deprecation_warning: true)
22
+ var = decode_array(var, deprecation_warning)
14
23
  var && ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
15
24
  end
16
25
 
17
- def env_to_int(var, default = nil)
18
- var = decode_array(var)
26
+ # Reads an environment variable as an Integer.
27
+ #
28
+ # @param [String] var environment variable
29
+ # @param [Array<String>] var list of environment variables
30
+ # @param [Integer] default the default value if the keys in `var` are not present in the environment
31
+ # @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
32
+ # the first key in `var` is not used.
33
+ # @return [Integer] if the environment value is a valid Integer
34
+ # @return [default] if the environment value is not found
35
+ def env_to_int(var, default = nil, deprecation_warning: true)
36
+ var = decode_array(var, deprecation_warning)
19
37
  var && ENV.key?(var) ? ENV[var].to_i : default
20
38
  end
21
39
 
22
- def env_to_float(var, default = nil)
23
- var = decode_array(var)
40
+ # Reads an environment variable as a Float.
41
+ #
42
+ # @param [String] var environment variable
43
+ # @param [Array<String>] var list of environment variables
44
+ # @param [Float] default the default value if the keys in `var` are not present in the environment
45
+ # @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
46
+ # the first key in `var` is not used.
47
+ # @return [Float] if the environment value is a valid Float
48
+ # @return [default] if the environment value is not found
49
+ def env_to_float(var, default = nil, deprecation_warning: true)
50
+ var = decode_array(var, deprecation_warning)
24
51
  var && ENV.key?(var) ? ENV[var].to_f : default
25
52
  end
26
53
 
@@ -33,8 +60,16 @@ module Datadog
33
60
  # either trailing or leading are trimmed.
34
61
  #
35
62
  # Empty entries, after trimmed, are also removed from the result.
36
- def env_to_list(var, default = [], comma_separated_only:)
37
- var = decode_array(var)
63
+ #
64
+ # @param [String] var environment variable
65
+ # @param [Array<String>] var list of environment variables
66
+ # @param [Array<Object>] default the default value if the keys in `var` are not present in the environment
67
+ # @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
68
+ # the first key in `var` is not used.
69
+ # @return [Array<Object>] if the environment value is a valid list
70
+ # @return [default] if the environment value is not found
71
+ def env_to_list(var, default = [], comma_separated_only:, deprecation_warning: true)
72
+ var = decode_array(var, deprecation_warning)
38
73
  if var && ENV.key?(var)
39
74
  value = ENV[var]
40
75
 
@@ -59,8 +94,21 @@ module Datadog
59
94
 
60
95
  private
61
96
 
62
- def decode_array(var)
63
- var.is_a?(Array) ? var.find { |env_var| ENV.key?(env_var) } : var
97
+ def decode_array(var, deprecation_warning)
98
+ if var.is_a?(Array)
99
+ var.find.with_index do |env_var, i|
100
+ found = ENV.key?(env_var)
101
+
102
+ # Check if we are using a non-preferred environment variable
103
+ if deprecation_warning && found && i != 0
104
+ Datadog::Core.log_deprecation { "#{env_var} environment variable is deprecated, use #{var.first} instead." }
105
+ end
106
+
107
+ found
108
+ end
109
+ else
110
+ var
111
+ end
64
112
  end
65
113
  end
66
114
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # typed: false
4
4
 
5
- require 'datadog/core/utils'
5
+ require_relative 'utils'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration'
3
+ require_relative 'configuration'
4
4
 
5
5
  # Global namespace that includes all Datadog functionality.
6
6
  # @public_api
@@ -0,0 +1,41 @@
1
+ module Datadog
2
+ module Core
3
+ # A some-what abstract class representing a collection of headers.
4
+ #
5
+ # Use the `HeaderCollection.from_hash` function to create a header collection from a `Hash`.
6
+ # Another option is to use `HashHeaderCollection` directly.
7
+ class HeaderCollection
8
+ # Gets a single value of the header with the given name, case insensitive.
9
+ #
10
+ # @param [String] header_name Name of the header to get the value of.
11
+ # @returns [String, nil] A single value of the header, or nil if the header with
12
+ # the given name is missing from the collection.
13
+ def get(header_name)
14
+ nil
15
+ end
16
+
17
+ # Create a header collection that retrieves headers from the given Hash.
18
+ #
19
+ # This can be useful for testing or other trivial use cases.
20
+ #
21
+ # @param [Hash] hash Hash with the headers.
22
+ def self.from_hash(hash)
23
+ HashHeaderCollection.new(hash)
24
+ end
25
+ end
26
+
27
+ # A header collection implementation that looks up headers in a Hash.
28
+ class HashHeaderCollection < HeaderCollection
29
+ def initialize(hash)
30
+ super()
31
+ @hash = {}.tap do |res|
32
+ hash.each_pair { |key, value| res[key.downcase] = value }
33
+ end
34
+ end
35
+
36
+ def get(header_name)
37
+ @hash[header_name.downcase]
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,13 +1,14 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/utils/time'
4
- require 'datadog/core/utils/only_once'
3
+ require_relative '../utils/time'
4
+ require_relative '../utils/only_once'
5
+ require_relative '../configuration/ext'
5
6
 
6
- require 'datadog/core/metrics/ext'
7
- require 'datadog/core/metrics/options'
8
- require 'datadog/core/metrics/helpers'
9
- require 'datadog/core/metrics/logging'
10
- require 'datadog/core/metrics/metric'
7
+ require_relative 'ext'
8
+ require_relative 'options'
9
+ require_relative 'helpers'
10
+ require_relative 'logging'
11
+ require_relative 'metric'
11
12
 
12
13
  module Datadog
13
14
  module Core
@@ -50,11 +51,11 @@ module Datadog
50
51
  end
51
52
 
52
53
  def default_hostname
53
- ENV.fetch(Ext::ENV_DEFAULT_HOST, Ext::DEFAULT_HOST)
54
+ ENV.fetch(Configuration::Ext::Transport::ENV_DEFAULT_HOST, Ext::DEFAULT_HOST)
54
55
  end
55
56
 
56
57
  def default_port
57
- ENV.fetch(Ext::ENV_DEFAULT_PORT, Ext::DEFAULT_PORT).to_i
58
+ ENV.fetch(Configuration::Ext::Metrics::ENV_DEFAULT_PORT, Ext::DEFAULT_PORT).to_i
58
59
  end
59
60
 
60
61
  def default_statsd_client
@@ -7,8 +7,6 @@ module Datadog
7
7
  module Ext
8
8
  DEFAULT_HOST = '127.0.0.1'.freeze
9
9
  DEFAULT_PORT = 8125
10
- ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
11
- ENV_DEFAULT_PORT = 'DD_METRIC_AGENT_PORT'.freeze
12
10
 
13
11
  TAG_LANG = 'language'.freeze
14
12
  TAG_LANG_INTERPRETER = 'language-interpreter'.freeze
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/metrics/ext'
4
- require 'datadog/core/environment/ext'
5
- require 'datadog/core/environment/identity'
3
+ require_relative 'ext'
4
+ require_relative '../environment/ext'
5
+ require_relative '../environment/identity'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -7,7 +7,7 @@ module Datadog
7
7
  module Ext
8
8
  TAG_ID = 'runtime-id'.freeze
9
9
  TAG_LANG = 'language'.freeze
10
- TAG_PID = 'system.pid'.freeze
10
+ TAG_PROCESS_ID = 'process_id'.freeze
11
11
 
12
12
  # Metrics
13
13
  # @public_api
@@ -1,12 +1,12 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/runtime/ext'
3
+ require_relative 'ext'
4
4
 
5
- require 'datadog/core/metrics/client'
6
- require 'datadog/core/environment/class_count'
7
- require 'datadog/core/environment/gc'
8
- require 'datadog/core/environment/thread_count'
9
- require 'datadog/core/environment/vm_cache'
5
+ require_relative '../metrics/client'
6
+ require_relative '../environment/class_count'
7
+ require_relative '../environment/gc'
8
+ require_relative '../environment/thread_count'
9
+ require_relative '../environment/vm_cache'
10
10
 
11
11
  module Datadog
12
12
  module Core
@@ -0,0 +1,79 @@
1
+ # typed: true
2
+
3
+ require_relative 'emitter'
4
+ require_relative 'heartbeat'
5
+ require_relative '../utils/forking'
6
+
7
+ module Datadog
8
+ module Core
9
+ module Telemetry
10
+ # Telemetry entrypoint, coordinates sending telemetry events at various points in app lifecyle
11
+ class Client
12
+ attr_reader \
13
+ :emitter,
14
+ :enabled,
15
+ :unsupported,
16
+ :worker
17
+
18
+ include Core::Utils::Forking
19
+
20
+ # @param enabled [Boolean] Determines whether telemetry events should be sent to the API
21
+ def initialize(enabled: true)
22
+ @enabled = enabled
23
+ @emitter = Emitter.new
24
+ @stopped = false
25
+ @unsupported = false
26
+ @worker = Telemetry::Heartbeat.new(enabled: @enabled) do
27
+ heartbeat!
28
+ end
29
+ end
30
+
31
+ def disable!
32
+ @enabled = false
33
+ @worker.enabled = false
34
+ end
35
+
36
+ def started!
37
+ return if !@enabled || forked?
38
+
39
+ res = @emitter.request(:'app-started')
40
+
41
+ if res.not_found? # Telemetry is only supported by agent versions 7.34 and up
42
+ Datadog.logger.debug('Agent does not support telemetry; disabling future telemetry events.')
43
+ disable!
44
+ @unsupported = true # Prevent telemetry from getting re-enabled
45
+ end
46
+
47
+ res
48
+ end
49
+
50
+ def emit_closing!
51
+ return if !@enabled || forked?
52
+
53
+ @emitter.request(:'app-closing')
54
+ end
55
+
56
+ def stop!
57
+ return if @stopped
58
+
59
+ @worker.stop(true, 0)
60
+ @stopped = true
61
+ end
62
+
63
+ def integrations_change!
64
+ return if !@enabled || forked?
65
+
66
+ @emitter.request(:'app-integrations-change')
67
+ end
68
+
69
+ private
70
+
71
+ def heartbeat!
72
+ return if !@enabled || forked?
73
+
74
+ @emitter.request(:'app-heartbeat')
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,233 @@
1
+ # frozen_string_literal: true
2
+
3
+ # typed: true
4
+
5
+ require 'etc'
6
+
7
+ require_relative '../configuration/agent_settings_resolver'
8
+ require_relative '../environment/ext'
9
+ require_relative '../environment/platform'
10
+ require_relative 'v1/application'
11
+ require_relative 'v1/dependency'
12
+ require_relative 'v1/host'
13
+ require_relative 'v1/integration'
14
+ require_relative 'v1/product'
15
+ require_relative '../../../ddtrace/transport/ext'
16
+
17
+ module Datadog
18
+ module Core
19
+ module Telemetry
20
+ # Module defining methods for collecting metadata for telemetry
21
+ module Collector
22
+ include Datadog::Core::Configuration
23
+
24
+ # Forms a hash of configuration key value pairs to be sent in the additional payload
25
+ def additional_payload
26
+ additional_payload_variables
27
+ end
28
+
29
+ # Forms a telemetry application object
30
+ def application
31
+ Telemetry::V1::Application.new(
32
+ env: env,
33
+ language_name: Datadog::Core::Environment::Ext::LANG,
34
+ language_version: Datadog::Core::Environment::Ext::LANG_VERSION,
35
+ products: products,
36
+ runtime_name: Datadog::Core::Environment::Ext::RUBY_ENGINE,
37
+ runtime_version: Datadog::Core::Environment::Ext::ENGINE_VERSION,
38
+ service_name: service_name,
39
+ service_version: service_version,
40
+ tracer_version: library_version
41
+ )
42
+ end
43
+
44
+ # Forms a hash of standard key value pairs to be sent in the app-started event configuration
45
+ def configurations
46
+ configurations = {
47
+ DD_AGENT_HOST: Datadog.configuration.agent.host,
48
+ DD_AGENT_TRANSPORT: agent_transport,
49
+ DD_TRACE_SAMPLE_RATE: format_configuration_value(Datadog.configuration.tracing.sampling.default_rate),
50
+ }
51
+ compact_hash(configurations)
52
+ end
53
+
54
+ # Forms a telemetry app-started dependencies object
55
+ def dependencies
56
+ Gem.loaded_specs.collect do |name, loaded_gem|
57
+ Datadog::Core::Telemetry::V1::Dependency.new(
58
+ name: name, version: loaded_gem.version.to_s, hash: loaded_gem.hash.to_s
59
+ )
60
+ end
61
+ end
62
+
63
+ # Forms a telemetry host object
64
+ def host
65
+ Telemetry::V1::Host.new(
66
+ container_id: Core::Environment::Container.container_id,
67
+ hostname: Core::Environment::Platform.hostname,
68
+ kernel_name: Core::Environment::Platform.kernel_name,
69
+ kernel_release: Core::Environment::Platform.kernel_release,
70
+ kernel_version: Core::Environment::Platform.kernel_version
71
+ )
72
+ end
73
+
74
+ # Forms a telemetry app-started integrations object
75
+ def integrations
76
+ Datadog.registry.map do |integration|
77
+ is_instrumented = instrumented?(integration)
78
+ is_enabled = is_instrumented && patched?(integration)
79
+ Telemetry::V1::Integration.new(
80
+ name: integration.name.to_s,
81
+ enabled: is_enabled,
82
+ version: integration_version(integration),
83
+ compatible: integration_compatible?(integration),
84
+ error: (patch_error(integration) if is_instrumented && !is_enabled),
85
+ auto_enabled: is_enabled ? integration_auto_instrument?(integration) : nil
86
+ )
87
+ end
88
+ end
89
+
90
+ # Returns the runtime ID of the current process
91
+ def runtime_id
92
+ Datadog::Core::Environment::Identity.id
93
+ end
94
+
95
+ # Returns the current as a UNIX timestamp in seconds
96
+ def tracer_time
97
+ Time.now.to_i
98
+ end
99
+
100
+ private
101
+
102
+ TARGET_OPTIONS = [
103
+ 'ci.enabled',
104
+ 'logger.level',
105
+ 'profiling.advanced.code_provenance_enabled',
106
+ 'profiling.advanced.endpoint.collection.enabled',
107
+ 'profiling.enabled',
108
+ 'runtime_metrics.enabled',
109
+ 'tracing.analytics.enabled',
110
+ 'tracing.distributed_tracing.propagation_inject_style',
111
+ 'tracing.distributed_tracing.propagation_extract_style',
112
+ 'tracing.enabled',
113
+ 'tracing.log_injection',
114
+ 'tracing.partial_flush.enabled',
115
+ 'tracing.partial_flush.min_spans_threshold',
116
+ 'tracing.priority_sampling',
117
+ 'tracing.report_hostname',
118
+ 'tracing.sampling.default_rate',
119
+ 'tracing.sampling.rate_limit'
120
+ ].freeze
121
+
122
+ def additional_payload_variables
123
+ # Whitelist of configuration options to send in additional payload object
124
+ configuration = Datadog.configuration
125
+ options = TARGET_OPTIONS.each_with_object({}) do |option, hash|
126
+ split_option = option.split('.')
127
+ hash[option] = format_configuration_value(configuration.dig(*split_option))
128
+ end
129
+
130
+ # Add some more custom additional payload values here
131
+ options['tracing.auto_instrument.enabled'] = !defined?(Datadog::AutoInstrument::LOADED).nil?
132
+ options['tracing.writer_options.buffer_size'] =
133
+ format_configuration_value(configuration.tracing.writer_options[:buffer_size])
134
+ options['tracing.writer_options.flush_interval'] =
135
+ format_configuration_value(configuration.tracing.writer_options[:flush_interval])
136
+ options['logger.instance'] = configuration.logger.instance.class.to_s
137
+ options['appsec.enabled'] = configuration.dig('appsec', 'enabled') if configuration.respond_to?('appsec')
138
+ options['tracing.opentelemetry.enabled'] = !defined?(Datadog::OpenTelemetry::LOADED).nil?
139
+ compact_hash(options)
140
+ end
141
+
142
+ def format_configuration_value(value)
143
+ # TODO: Add float if telemetry starts accepting it
144
+ case value
145
+ when Integer, String, true, false, nil
146
+ value
147
+ else
148
+ value.to_s
149
+ end
150
+ end
151
+
152
+ # Manual implementation of hash.compact used because it is unsupported by older Ruby versions (<2.4)
153
+ def compact_hash(hash)
154
+ hash.delete_if { |_k, v| v.nil? }
155
+ end
156
+
157
+ def env
158
+ Datadog.configuration.env
159
+ end
160
+
161
+ def service_name
162
+ Datadog.configuration.service
163
+ end
164
+
165
+ def service_version
166
+ Datadog.configuration.version
167
+ end
168
+
169
+ def library_version
170
+ Core::Environment::Identity.tracer_version
171
+ end
172
+
173
+ def products
174
+ Telemetry::V1::Product.new(profiler: profiler, appsec: appsec)
175
+ end
176
+
177
+ def profiler
178
+ { version: library_version }
179
+ end
180
+
181
+ def appsec
182
+ { version: library_version }
183
+ end
184
+
185
+ def agent_transport
186
+ adapter = Core::Configuration::AgentSettingsResolver.call(Datadog.configuration).adapter
187
+ if adapter == Datadog::Transport::Ext::UnixSocket::ADAPTER
188
+ 'UDS'
189
+ else
190
+ 'TCP'
191
+ end
192
+ end
193
+
194
+ def instrumented_integrations
195
+ Datadog.configuration.tracing.instrumented_integrations
196
+ end
197
+
198
+ def instrumented?(integration)
199
+ instrumented_integrations.include?(integration.name)
200
+ end
201
+
202
+ def patched?(integration)
203
+ !!integration.klass.patcher.patch_successful
204
+ end
205
+
206
+ def integration_auto_instrument?(integration)
207
+ integration.klass.auto_instrument?
208
+ end
209
+
210
+ def integration_compatible?(integration)
211
+ integration.klass.class.compatible?
212
+ end
213
+
214
+ def integration_version(integration)
215
+ integration.klass.class.version ? integration.klass.class.version.to_s : nil
216
+ end
217
+
218
+ def patch_error(integration)
219
+ patch_error_result = integration.klass.patcher.patch_error_result
220
+ if patch_error_result.nil? # if no error occurred during patching, but integration is still not instrumented
221
+ desc = "Available?: #{integration.klass.class.available?}"
222
+ desc += ", Loaded? #{integration.klass.class.loaded?}"
223
+ desc += ", Compatible? #{integration.klass.class.compatible?}"
224
+ desc += ", Patchable? #{integration.klass.class.patchable?}"
225
+ desc
226
+ else
227
+ patch_error_result.to_s
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end
@@ -0,0 +1,48 @@
1
+ # typed: true
2
+
3
+ require_relative 'event'
4
+ require_relative 'http/transport'
5
+ require_relative '../utils/sequence'
6
+ require_relative '../utils/forking'
7
+
8
+ module Datadog
9
+ module Core
10
+ module Telemetry
11
+ # Class that emits telemetry events
12
+ class Emitter
13
+ attr_reader :http_transport
14
+
15
+ extend Core::Utils::Forking
16
+
17
+ # @param sequence [Datadog::Core::Utils::Sequence] Sequence object that stores and increments a counter
18
+ # @param http_transport [Datadog::Core::Telemetry::Http::Transport] Transport object that can be used to send
19
+ # telemetry requests via the agent
20
+ def initialize(http_transport: Datadog::Core::Telemetry::Http::Transport.new)
21
+ @http_transport = http_transport
22
+ end
23
+
24
+ # Retrieves and emits a TelemetryRequest object based on the request type specified
25
+ # @param request_type [String] the type of telemetry request to collect data for
26
+ def request(request_type)
27
+ begin
28
+ request = Datadog::Core::Telemetry::Event.new.telemetry_request(
29
+ request_type: request_type,
30
+ seq_id: self.class.sequence.next
31
+ ).to_h
32
+ @http_transport.request(request_type: request_type.to_s, payload: request.to_json)
33
+ rescue StandardError => e
34
+ Datadog.logger.debug("Unable to send telemetry request for event `#{request_type}`: #{e}")
35
+ Telemetry::Http::InternalErrorResponse.new(e)
36
+ end
37
+ end
38
+
39
+ # Initializes a Sequence object to track seq_id if not already initialized; else returns stored
40
+ # Sequence object
41
+ def self.sequence
42
+ after_fork! { @sequence = Datadog::Core::Utils::Sequence.new(1) }
43
+ @sequence ||= Datadog::Core::Utils::Sequence.new(1)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end