datadog 2.7.1 → 2.18.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 (441) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +353 -1
  3. data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +78 -102
  5. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
  8. data/ext/datadog_profiling_native_extension/collectors_stack.c +235 -57
  9. data/ext/datadog_profiling_native_extension/collectors_stack.h +21 -5
  10. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +376 -156
  11. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  12. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  13. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  14. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  15. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  16. data/ext/datadog_profiling_native_extension/extconf.rb +14 -8
  17. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
  18. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
  19. data/ext/datadog_profiling_native_extension/heap_recorder.c +295 -532
  20. data/ext/datadog_profiling_native_extension/heap_recorder.h +6 -8
  21. data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
  22. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  23. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  24. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +69 -1
  25. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +16 -4
  26. data/ext/datadog_profiling_native_extension/profiling.c +19 -8
  27. data/ext/datadog_profiling_native_extension/ruby_helpers.c +9 -21
  28. data/ext/datadog_profiling_native_extension/ruby_helpers.h +2 -10
  29. data/ext/datadog_profiling_native_extension/stack_recorder.c +231 -181
  30. data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
  31. data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
  32. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
  33. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
  34. data/ext/libdatadog_api/crashtracker.c +17 -15
  35. data/ext/libdatadog_api/crashtracker.h +5 -0
  36. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  37. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  38. data/ext/libdatadog_api/extconf.rb +2 -2
  39. data/ext/libdatadog_api/init.c +15 -0
  40. data/ext/libdatadog_api/library_config.c +164 -0
  41. data/ext/libdatadog_api/library_config.h +25 -0
  42. data/ext/libdatadog_api/macos_development.md +3 -3
  43. data/ext/libdatadog_api/process_discovery.c +112 -0
  44. data/ext/libdatadog_api/process_discovery.h +5 -0
  45. data/ext/libdatadog_extconf_helpers.rb +2 -2
  46. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  47. data/lib/datadog/appsec/actions_handler.rb +49 -0
  48. data/lib/datadog/appsec/anonymizer.rb +16 -0
  49. data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
  50. data/lib/datadog/appsec/api_security/route_extractor.rb +65 -0
  51. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  52. data/lib/datadog/appsec/api_security.rb +23 -0
  53. data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
  54. data/lib/datadog/appsec/assets/waf_rules/recommended.json +623 -253
  55. data/lib/datadog/appsec/assets/waf_rules/strict.json +69 -107
  56. data/lib/datadog/appsec/autoload.rb +1 -1
  57. data/lib/datadog/appsec/component.rb +49 -65
  58. data/lib/datadog/appsec/compressed_json.rb +40 -0
  59. data/lib/datadog/appsec/configuration/settings.rb +212 -27
  60. data/lib/datadog/appsec/context.rb +74 -0
  61. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
  62. data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
  63. data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
  64. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  65. data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
  66. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  67. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  68. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  69. data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
  70. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  71. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  72. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
  73. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  74. data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
  75. data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
  76. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
  77. data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
  78. data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
  79. data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
  80. data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
  81. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
  82. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
  83. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
  84. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  85. data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
  86. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  87. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
  88. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
  89. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  90. data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
  91. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
  92. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +73 -78
  93. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
  94. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  95. data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
  96. data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
  97. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
  98. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
  99. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
  100. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  101. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
  102. data/lib/datadog/appsec/event.rb +96 -135
  103. data/lib/datadog/appsec/ext.rb +12 -3
  104. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
  105. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  106. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  107. data/lib/datadog/appsec/metrics/collector.rb +38 -0
  108. data/lib/datadog/appsec/metrics/exporter.rb +35 -0
  109. data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
  110. data/lib/datadog/appsec/metrics.rb +13 -0
  111. data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
  112. data/lib/datadog/appsec/processor/rule_loader.rb +30 -36
  113. data/lib/datadog/appsec/remote.rb +31 -57
  114. data/lib/datadog/appsec/response.rb +19 -85
  115. data/lib/datadog/appsec/security_engine/engine.rb +194 -0
  116. data/lib/datadog/appsec/security_engine/result.rb +67 -0
  117. data/lib/datadog/appsec/security_engine/runner.rb +87 -0
  118. data/lib/datadog/appsec/security_engine.rb +9 -0
  119. data/lib/datadog/appsec/security_event.rb +39 -0
  120. data/lib/datadog/appsec/utils.rb +0 -2
  121. data/lib/datadog/appsec.rb +22 -12
  122. data/lib/datadog/auto_instrument.rb +3 -0
  123. data/lib/datadog/core/buffer/random.rb +18 -2
  124. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  125. data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -18
  126. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  127. data/lib/datadog/core/configuration/components.rb +74 -32
  128. data/lib/datadog/core/configuration/components_state.rb +23 -0
  129. data/lib/datadog/core/configuration/ext.rb +5 -1
  130. data/lib/datadog/core/configuration/option.rb +81 -45
  131. data/lib/datadog/core/configuration/option_definition.rb +6 -4
  132. data/lib/datadog/core/configuration/options.rb +3 -3
  133. data/lib/datadog/core/configuration/settings.rb +121 -50
  134. data/lib/datadog/core/configuration/stable_config.rb +22 -0
  135. data/lib/datadog/core/configuration.rb +43 -11
  136. data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
  137. data/lib/datadog/core/crashtracking/component.rb +4 -13
  138. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  139. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  140. data/lib/datadog/core/encoding.rb +17 -1
  141. data/lib/datadog/core/environment/agent_info.rb +78 -0
  142. data/lib/datadog/core/environment/cgroup.rb +10 -12
  143. data/lib/datadog/core/environment/container.rb +38 -40
  144. data/lib/datadog/core/environment/ext.rb +6 -6
  145. data/lib/datadog/core/environment/git.rb +1 -0
  146. data/lib/datadog/core/environment/identity.rb +3 -3
  147. data/lib/datadog/core/environment/platform.rb +3 -3
  148. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  149. data/lib/datadog/core/error.rb +11 -9
  150. data/lib/datadog/core/logger.rb +2 -2
  151. data/lib/datadog/core/metrics/client.rb +27 -27
  152. data/lib/datadog/core/metrics/logging.rb +5 -5
  153. data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
  154. data/lib/datadog/core/process_discovery.rb +36 -0
  155. data/lib/datadog/core/rate_limiter.rb +4 -2
  156. data/lib/datadog/core/remote/client/capabilities.rb +6 -0
  157. data/lib/datadog/core/remote/client.rb +107 -92
  158. data/lib/datadog/core/remote/component.rb +18 -19
  159. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  160. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  161. data/lib/datadog/core/remote/configuration/repository.rb +14 -1
  162. data/lib/datadog/core/remote/negotiation.rb +9 -9
  163. data/lib/datadog/core/remote/transport/config.rb +4 -3
  164. data/lib/datadog/core/remote/transport/http/api.rb +13 -18
  165. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  166. data/lib/datadog/core/remote/transport/http/config.rb +27 -55
  167. data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
  168. data/lib/datadog/core/remote/transport/http.rb +25 -94
  169. data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
  170. data/lib/datadog/core/remote/worker.rb +10 -7
  171. data/lib/datadog/core/runtime/metrics.rb +12 -5
  172. data/lib/datadog/core/tag_builder.rb +56 -0
  173. data/lib/datadog/core/telemetry/component.rb +84 -49
  174. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  175. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
  176. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  177. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  178. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  179. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  180. data/lib/datadog/core/telemetry/event/app_started.rb +269 -0
  181. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  182. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  183. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  184. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  185. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  186. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  187. data/lib/datadog/core/telemetry/event.rb +17 -383
  188. data/lib/datadog/core/telemetry/ext.rb +1 -0
  189. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  190. data/lib/datadog/core/telemetry/logger.rb +5 -4
  191. data/lib/datadog/core/telemetry/logging.rb +12 -6
  192. data/lib/datadog/core/telemetry/metric.rb +28 -6
  193. data/lib/datadog/core/telemetry/request.rb +4 -4
  194. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  195. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  196. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  197. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  198. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  199. data/lib/datadog/core/telemetry/worker.rb +128 -25
  200. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  201. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  202. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
  203. data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
  204. data/lib/datadog/core/transport/http/api/spec.rb +36 -0
  205. data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
  206. data/lib/datadog/core/transport/http/env.rb +8 -0
  207. data/lib/datadog/core/transport/http.rb +75 -0
  208. data/lib/datadog/core/transport/response.rb +4 -0
  209. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  210. data/lib/datadog/core/utils/duration.rb +32 -32
  211. data/lib/datadog/core/utils/forking.rb +2 -2
  212. data/lib/datadog/core/utils/network.rb +6 -6
  213. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  214. data/lib/datadog/core/utils/time.rb +20 -0
  215. data/lib/datadog/core/utils/truncation.rb +21 -0
  216. data/lib/datadog/core/utils.rb +7 -0
  217. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  218. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  219. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  220. data/lib/datadog/core/worker.rb +1 -1
  221. data/lib/datadog/core/workers/async.rb +29 -12
  222. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  223. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  224. data/lib/datadog/core.rb +8 -0
  225. data/lib/datadog/di/base.rb +115 -0
  226. data/lib/datadog/di/boot.rb +34 -0
  227. data/lib/datadog/di/code_tracker.rb +26 -15
  228. data/lib/datadog/di/component.rb +23 -14
  229. data/lib/datadog/di/configuration/settings.rb +25 -1
  230. data/lib/datadog/di/contrib/active_record.rb +1 -0
  231. data/lib/datadog/di/contrib/railtie.rb +15 -0
  232. data/lib/datadog/di/contrib.rb +28 -0
  233. data/lib/datadog/di/error.rb +5 -0
  234. data/lib/datadog/di/instrumenter.rb +162 -21
  235. data/lib/datadog/di/logger.rb +30 -0
  236. data/lib/datadog/di/preload.rb +18 -0
  237. data/lib/datadog/di/probe.rb +14 -7
  238. data/lib/datadog/di/probe_builder.rb +1 -0
  239. data/lib/datadog/di/probe_manager.rb +11 -5
  240. data/lib/datadog/di/probe_notification_builder.rb +54 -38
  241. data/lib/datadog/di/probe_notifier_worker.rb +60 -26
  242. data/lib/datadog/di/redactor.rb +0 -1
  243. data/lib/datadog/di/remote.rb +147 -0
  244. data/lib/datadog/di/serializer.rb +19 -8
  245. data/lib/datadog/di/transport/diagnostics.rb +62 -0
  246. data/lib/datadog/di/transport/http/api.rb +42 -0
  247. data/lib/datadog/di/transport/http/client.rb +47 -0
  248. data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
  249. data/lib/datadog/di/transport/http/input.rb +77 -0
  250. data/lib/datadog/di/transport/http.rb +57 -0
  251. data/lib/datadog/di/transport/input.rb +70 -0
  252. data/lib/datadog/di/utils.rb +103 -0
  253. data/lib/datadog/di.rb +14 -76
  254. data/lib/datadog/error_tracking/collector.rb +87 -0
  255. data/lib/datadog/error_tracking/component.rb +167 -0
  256. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  257. data/lib/datadog/error_tracking/configuration.rb +11 -0
  258. data/lib/datadog/error_tracking/ext.rb +18 -0
  259. data/lib/datadog/error_tracking/extensions.rb +16 -0
  260. data/lib/datadog/error_tracking/filters.rb +77 -0
  261. data/lib/datadog/error_tracking.rb +18 -0
  262. data/lib/datadog/kit/appsec/events.rb +15 -3
  263. data/lib/datadog/kit/identity.rb +9 -5
  264. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  265. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  266. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  267. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  268. data/lib/datadog/opentelemetry.rb +2 -1
  269. data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
  270. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -0
  271. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  272. data/lib/datadog/profiling/collectors/info.rb +3 -0
  273. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  274. data/lib/datadog/profiling/component.rb +64 -82
  275. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  276. data/lib/datadog/profiling/exporter.rb +3 -4
  277. data/lib/datadog/profiling/ext.rb +0 -14
  278. data/lib/datadog/profiling/flush.rb +5 -8
  279. data/lib/datadog/profiling/http_transport.rb +8 -87
  280. data/lib/datadog/profiling/load_native_extension.rb +1 -33
  281. data/lib/datadog/profiling/profiler.rb +2 -0
  282. data/lib/datadog/profiling/scheduler.rb +10 -2
  283. data/lib/datadog/profiling/stack_recorder.rb +9 -9
  284. data/lib/datadog/profiling/tag_builder.rb +5 -41
  285. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  286. data/lib/datadog/profiling.rb +6 -2
  287. data/lib/datadog/tracing/analytics.rb +1 -1
  288. data/lib/datadog/tracing/component.rb +16 -12
  289. data/lib/datadog/tracing/configuration/ext.rb +8 -1
  290. data/lib/datadog/tracing/configuration/settings.rb +22 -10
  291. data/lib/datadog/tracing/context_provider.rb +1 -1
  292. data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
  293. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
  294. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
  295. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  296. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  297. data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
  298. data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
  299. data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
  300. data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
  301. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
  302. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
  303. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  304. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
  305. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
  306. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
  307. data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
  308. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
  309. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
  310. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
  311. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
  312. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  313. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
  314. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
  315. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  316. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  317. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  318. data/lib/datadog/tracing/contrib/extensions.rb +29 -3
  319. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  320. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
  321. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
  322. data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
  323. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
  324. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  325. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  326. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  327. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  328. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
  329. data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
  330. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
  331. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
  332. data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
  333. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
  334. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  335. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  336. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  337. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  338. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  339. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  340. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  341. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  342. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
  343. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  344. data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
  345. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
  346. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  347. data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
  348. data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
  349. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
  350. data/lib/datadog/tracing/contrib/patcher.rb +5 -2
  351. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
  352. data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
  353. data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
  354. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
  355. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  356. data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
  357. data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
  358. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
  359. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  360. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  361. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  362. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  363. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  364. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
  365. data/lib/datadog/tracing/contrib/support.rb +28 -0
  366. data/lib/datadog/tracing/contrib.rb +1 -0
  367. data/lib/datadog/tracing/correlation.rb +9 -2
  368. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  369. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  370. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  371. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  372. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  373. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  374. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  375. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  376. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  377. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  378. data/lib/datadog/tracing/metadata.rb +2 -0
  379. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  380. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  381. data/lib/datadog/tracing/span.rb +22 -5
  382. data/lib/datadog/tracing/span_event.rb +124 -4
  383. data/lib/datadog/tracing/span_operation.rb +52 -16
  384. data/lib/datadog/tracing/sync_writer.rb +10 -6
  385. data/lib/datadog/tracing/trace_digest.rb +9 -2
  386. data/lib/datadog/tracing/trace_operation.rb +55 -27
  387. data/lib/datadog/tracing/trace_segment.rb +6 -4
  388. data/lib/datadog/tracing/tracer.rb +66 -14
  389. data/lib/datadog/tracing/transport/http/api.rb +5 -4
  390. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  391. data/lib/datadog/tracing/transport/http/traces.rb +13 -44
  392. data/lib/datadog/tracing/transport/http.rb +13 -70
  393. data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
  394. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  395. data/lib/datadog/tracing/transport/traces.rb +47 -13
  396. data/lib/datadog/tracing/utils.rb +1 -1
  397. data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
  398. data/lib/datadog/tracing/workers.rb +5 -4
  399. data/lib/datadog/tracing/writer.rb +10 -6
  400. data/lib/datadog/tracing.rb +16 -3
  401. data/lib/datadog/version.rb +2 -2
  402. data/lib/datadog.rb +2 -0
  403. metadata +149 -54
  404. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
  405. data/ext/datadog_profiling_loader/extconf.rb +0 -60
  406. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
  407. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
  408. data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
  409. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
  410. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
  411. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  412. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  413. data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
  414. data/lib/datadog/appsec/contrib/patcher.rb +0 -12
  415. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
  416. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
  417. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
  418. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
  419. data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
  420. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
  421. data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
  422. data/lib/datadog/appsec/processor/actions.rb +0 -49
  423. data/lib/datadog/appsec/processor/context.rb +0 -107
  424. data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
  425. data/lib/datadog/appsec/processor.rb +0 -106
  426. data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
  427. data/lib/datadog/appsec/reactive/engine.rb +0 -47
  428. data/lib/datadog/appsec/reactive/operation.rb +0 -68
  429. data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
  430. data/lib/datadog/appsec/scope.rb +0 -58
  431. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  432. data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
  433. data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
  434. data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
  435. data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
  436. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  437. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  438. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  439. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
  440. data/lib/datadog/di/transport.rb +0 -81
  441. data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -37,52 +37,50 @@ module Datadog
37
37
 
38
38
  def descriptor
39
39
  @descriptor ||= Descriptor.new.tap do |descriptor|
40
- begin
41
- Cgroup.descriptors.each do |cgroup_descriptor|
42
- # Parse container data from cgroup descriptor
43
- path = cgroup_descriptor.path
44
- next if path.nil?
45
-
46
- # Split path into parts
47
- parts = path.split('/')
48
- parts.shift # Remove leading empty part
49
-
50
- # Read info from path
51
- next if parts.empty?
52
-
53
- platform = parts[0][PLATFORM_REGEX, :platform]
54
- container_id, task_uid = nil
55
-
56
- case parts.length
57
- when 0..1
58
- next
59
- when 2
60
- container_id = parts[-1][CONTAINER_REGEX, :container] \
61
- || parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
40
+ Cgroup.descriptors.each do |cgroup_descriptor|
41
+ # Parse container data from cgroup descriptor
42
+ path = cgroup_descriptor.path
43
+ next if path.nil?
44
+
45
+ # Split path into parts
46
+ parts = path.split('/')
47
+ parts.shift # Remove leading empty part
48
+
49
+ # Read info from path
50
+ next if parts.empty?
51
+
52
+ platform = parts[0][PLATFORM_REGEX, :platform]
53
+ container_id, task_uid = nil
54
+
55
+ case parts.length
56
+ when 0..1
57
+ next
58
+ when 2
59
+ container_id = parts[-1][CONTAINER_REGEX, :container] \
60
+ || parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
61
+ else
62
+ if (container_id = parts[-1][CONTAINER_REGEX, :container])
63
+ task_uid = parts[-2][POD_REGEX, :pod] || parts[1][POD_REGEX, :pod]
62
64
  else
63
- if (container_id = parts[-1][CONTAINER_REGEX, :container])
64
- task_uid = parts[-2][POD_REGEX, :pod] || parts[1][POD_REGEX, :pod]
65
- else
66
- container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
67
- end
65
+ container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
68
66
  end
67
+ end
69
68
 
70
- # If container ID wasn't found, ignore.
71
- # Path might describe a non-container environment.
72
- next if container_id.nil?
69
+ # If container ID wasn't found, ignore.
70
+ # Path might describe a non-container environment.
71
+ next if container_id.nil?
73
72
 
74
- descriptor.platform = platform
75
- descriptor.container_id = container_id
76
- descriptor.task_uid = task_uid
73
+ descriptor.platform = platform
74
+ descriptor.container_id = container_id
75
+ descriptor.task_uid = task_uid
77
76
 
78
- break
79
- end
80
- rescue StandardError => e
81
- Datadog.logger.error(
82
- "Error while parsing container info. Cause: #{e.class.name} #{e.message} " \
83
- "Location: #{Array(e.backtrace).first}"
84
- )
77
+ break
85
78
  end
79
+ rescue => e
80
+ Datadog.logger.error(
81
+ "Error while parsing container info. Cause: #{e.class.name} #{e.message} " \
82
+ "Location: #{Array(e.backtrace).first}"
83
+ )
86
84
  end
87
85
  end
88
86
  end
@@ -9,11 +9,11 @@ module Datadog
9
9
  module Ext
10
10
  # e.g for CRuby '3.0.1', for JRuby '9.2.19.0', for TruffleRuby '21.1.0'
11
11
  ENGINE_VERSION = if defined?(RUBY_ENGINE_VERSION)
12
- RUBY_ENGINE_VERSION
13
- else
14
- # CRuby < 2.3 doesn't support RUBY_ENGINE_VERSION
15
- RUBY_VERSION
16
- end
12
+ RUBY_ENGINE_VERSION
13
+ else
14
+ # CRuby < 2.3 doesn't support RUBY_ENGINE_VERSION
15
+ RUBY_VERSION
16
+ end
17
17
 
18
18
  ENV_API_KEY = 'DD_API_KEY'
19
19
  ENV_ENVIRONMENT = 'DD_ENV'
@@ -26,7 +26,7 @@ module Datadog
26
26
  FALLBACK_SERVICE_NAME =
27
27
  begin
28
28
  File.basename($PROGRAM_NAME, '.*')
29
- rescue StandardError
29
+ rescue
30
30
  'ruby'
31
31
  end.freeze
32
32
 
@@ -5,6 +5,7 @@ require_relative '../utils/url'
5
5
 
6
6
  module Datadog
7
7
  module Core
8
+ # Environment
8
9
  module Environment
9
10
  # Retrieves git repository information from environment variables
10
11
  module Git
@@ -67,12 +67,12 @@ module Datadog
67
67
 
68
68
  rest.split('.').tap do |segments|
69
69
  if segments.length >= 4
70
- pre = "-#{segments.shift}"
71
- build = "+#{segments.join('.')}"
70
+ pre = "-#{segments.shift}"
71
+ build = "+#{segments.join(".")}"
72
72
  elsif segments.length == 1
73
73
  pre = "-#{segments.shift}"
74
74
  else
75
- build = "+#{segments.join('.')}"
75
+ build = "+#{segments.join(".")}"
76
76
  end
77
77
  end
78
78
 
@@ -13,18 +13,18 @@ module Datadog
13
13
 
14
14
  # @return [String] ISA of host; `uname -m`
15
15
  def architecture
16
- Identity.lang_version >= '2.2' ? Etc.uname[:machine] : Gem::Platform.local.cpu
16
+ (Identity.lang_version >= '2.2') ? Etc.uname[:machine] : Gem::Platform.local.cpu
17
17
  end
18
18
 
19
19
  # @return [String] name of host; `uname -n`
20
20
  def hostname
21
- Identity.lang_version >= '2.2' ? Etc.uname[:nodename] : nil
21
+ (Identity.lang_version >= '2.2') ? Etc.uname[:nodename] : nil
22
22
  end
23
23
 
24
24
  # System name, normally `Linux` or `Darwin` (but 'Mac OS X' on JRuby);
25
25
  # @return [String] name of kernel; `uname -s`.
26
26
  def kernel_name
27
- Identity.lang_version >= '2.2' ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
27
+ (Identity.lang_version >= '2.2') ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
28
28
  end
29
29
 
30
30
  # @return [String] kernel release; `uname -r`
@@ -23,7 +23,7 @@ module Datadog
23
23
  if var && ENV.key?(var)
24
24
  value = ENV[var].to_s.strip
25
25
  value.downcase!
26
- value == 'true' || value == '1' # rubocop:disable Style/MultipleComparison
26
+ value == 'true' || value == '1'
27
27
  else
28
28
  default
29
29
  end
@@ -11,12 +11,17 @@ module Datadog
11
11
  class << self
12
12
  def build_from(value)
13
13
  case value
14
- when Error then value
15
- when Array then new(*value)
14
+ # A Ruby {Exception} is the most common parameter type.
16
15
  when Exception then new(value.class, value.message, full_backtrace(value))
17
- when ContainsMessage then new(value.class, value.message)
16
+ # steep:ignore:start
17
+ # Steep doesn't like an array with up to 3 elements to be passed here: it thinks the array is unbounded.
18
+ when Array then new(*value)
19
+ # Steep can not follow the logic inside the lambda, thus it doesn't know `value` responds to `:message`.
20
+ when ->(v) { v.respond_to?(:message) } then new(value.class, value.message)
21
+ # steep:ignore:end
18
22
  when String then new(nil, value)
19
- else BlankError
23
+ when Error then value
24
+ else Error.new # Blank error
20
25
  end
21
26
  end
22
27
 
@@ -34,7 +39,7 @@ module Datadog
34
39
  # but it's around 3x faster in our benchmark test
35
40
  # at `error_spec.rb`.
36
41
  def full_backtrace(ex)
37
- backtrace = String.new
42
+ backtrace = +''
38
43
  backtrace_for(ex, backtrace)
39
44
 
40
45
  # Avoid circular causes
@@ -75,7 +80,7 @@ module Datadog
75
80
  if trace[1]
76
81
  # Ident stack trace for caller lines, to separate
77
82
  # them from the main error lines.
78
- trace[1..-1].each do |line|
83
+ trace[1..-1]&.each do |line|
79
84
  backtrace << "\n\tfrom "
80
85
  backtrace << line
81
86
  end
@@ -92,9 +97,6 @@ module Datadog
92
97
  @message = Utils.utf8_encode(message)
93
98
  @backtrace = Utils.utf8_encode(backtrace)
94
99
  end
95
-
96
- BlankError = Error.new
97
- ContainsMessage = ->(v) { v.respond_to?(:message) }
98
100
  end
99
101
  end
100
102
  end
@@ -28,7 +28,7 @@ module Datadog
28
28
 
29
29
  if message.nil?
30
30
  if block
31
- super(severity, message, progname) do
31
+ super do
32
32
  "[#{self.progname}] #{where}#{yield}"
33
33
  end
34
34
  else
@@ -39,7 +39,7 @@ module Datadog
39
39
  end
40
40
  end
41
41
 
42
- alias log add
42
+ alias_method :log, :add
43
43
  end
44
44
  end
45
45
  end
@@ -21,9 +21,11 @@ module Datadog
21
21
  extend Options
22
22
  extend Helpers
23
23
 
24
- attr_reader :statsd
24
+ attr_reader :statsd, :logger, :telemetry
25
25
 
26
- def initialize(statsd: nil, enabled: true, **_)
26
+ def initialize(telemetry:, logger: Datadog.logger, statsd: nil, enabled: true, **_)
27
+ @telemetry = telemetry
28
+ @logger = logger
27
29
  @statsd =
28
30
  if supported?
29
31
  statsd || default_statsd_client
@@ -73,10 +75,10 @@ module Datadog
73
75
  #
74
76
  # Versions < 5.0 are always single-threaded, but do not have the kwarg option.
75
77
  options = if dogstatsd_version >= Gem::Version.new('5.2')
76
- { single_thread: true }
77
- else
78
- {}
79
- end
78
+ {single_thread: true}
79
+ else
80
+ {}
81
+ end
80
82
 
81
83
  Datadog::Statsd.new(default_hostname, default_port, **options)
82
84
  end
@@ -97,11 +99,11 @@ module Datadog
97
99
  raise ArgumentError if value.nil?
98
100
 
99
101
  statsd.count(stat, value, metric_options(options))
100
- rescue StandardError => e
101
- Datadog.logger.error(
102
+ rescue => e
103
+ logger.error(
102
104
  "Failed to send count stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
103
105
  )
104
- Telemetry::Logger.report(e, description: 'Failed to send count stat')
106
+ telemetry.report(e, description: 'Failed to send count stat')
105
107
  end
106
108
 
107
109
  def distribution(stat, value = nil, options = nil, &block)
@@ -111,11 +113,11 @@ module Datadog
111
113
  raise ArgumentError if value.nil?
112
114
 
113
115
  statsd.distribution(stat, value, metric_options(options))
114
- rescue StandardError => e
115
- Datadog.logger.error(
116
+ rescue => e
117
+ logger.error(
116
118
  "Failed to send distribution stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
117
119
  )
118
- Telemetry::Logger.report(e, description: 'Failed to send distribution stat')
120
+ telemetry.report(e, description: 'Failed to send distribution stat')
119
121
  end
120
122
 
121
123
  def increment(stat, options = nil)
@@ -124,11 +126,11 @@ module Datadog
124
126
  options = yield if block_given?
125
127
 
126
128
  statsd.increment(stat, metric_options(options))
127
- rescue StandardError => e
128
- Datadog.logger.error(
129
+ rescue => e
130
+ logger.error(
129
131
  "Failed to send increment stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
130
132
  )
131
- Telemetry::Logger.report(e, description: 'Failed to send increment stat')
133
+ telemetry.report(e, description: 'Failed to send increment stat')
132
134
  end
133
135
 
134
136
  def gauge(stat, value = nil, options = nil, &block)
@@ -138,11 +140,11 @@ module Datadog
138
140
  raise ArgumentError if value.nil?
139
141
 
140
142
  statsd.gauge(stat, value, metric_options(options))
141
- rescue StandardError => e
142
- Datadog.logger.error(
143
+ rescue => e
144
+ logger.error(
143
145
  "Failed to send gauge stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
144
146
  )
145
- Telemetry::Logger.report(e, description: 'Failed to send gauge stat')
147
+ telemetry.report(e, description: 'Failed to send gauge stat')
146
148
  end
147
149
 
148
150
  def time(stat, options = nil)
@@ -157,12 +159,12 @@ module Datadog
157
159
  finished = Utils::Time.get_time
158
160
  distribution(stat, ((finished - start) * 1000), options)
159
161
  end
160
- rescue StandardError => e
162
+ rescue => e
161
163
  # TODO: Likely to be redundant, since `distribution` handles its own errors.
162
- Datadog.logger.error(
164
+ logger.error(
163
165
  "Failed to send time stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
164
166
  )
165
- Telemetry::Logger.report(e, description: 'Failed to send time stat')
167
+ telemetry.report(e, description: 'Failed to send time stat')
166
168
  end
167
169
  end
168
170
 
@@ -171,7 +173,7 @@ module Datadog
171
173
  end
172
174
 
173
175
  def close
174
- @statsd.close if @statsd && @statsd.respond_to?(:close)
176
+ @statsd.close if @statsd&.respond_to?(:close)
175
177
  end
176
178
 
177
179
  private
@@ -183,10 +185,8 @@ module Datadog
183
185
  defined?(Datadog::Statsd::VERSION) &&
184
186
  Datadog::Statsd::VERSION &&
185
187
  Gem::Version.new(Datadog::Statsd::VERSION)
186
- ) || (
187
- Gem.loaded_specs['dogstatsd-ruby'] &&
188
- Gem.loaded_specs['dogstatsd-ruby'].version
189
- )
188
+ ) ||
189
+ Gem.loaded_specs['dogstatsd-ruby']&.version
190
190
  end
191
191
 
192
192
  IGNORED_STATSD_ONLY_ONCE = Utils::OnlyOnce.new
@@ -194,7 +194,7 @@ module Datadog
194
194
 
195
195
  def ignored_statsd_warning
196
196
  IGNORED_STATSD_ONLY_ONCE.run do
197
- Datadog.logger.warn(
197
+ logger.warn(
198
198
  'Ignoring user-supplied statsd instance as currently-installed version of dogstastd-ruby is incompatible. ' \
199
199
  "To fix this, ensure that you have `gem 'dogstatsd-ruby', '~> 5.3'` on your Gemfile or gems.rb file."
200
200
  )
@@ -17,25 +17,25 @@ module Datadog
17
17
  l.progname = nil
18
18
  l.formatter = proc do |_severity, datetime, _progname, msg|
19
19
  stat = JSON.parse(msg[3..-1]) # Trim off leading progname...
20
- "#{JSON.dump(timestamp: datetime.to_i, message: 'Metric sent.', metric: stat)}\n"
20
+ "#{JSON.dump(timestamp: datetime.to_i, message: "Metric sent.", metric: stat)}\n"
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
25
  def count(stat, value, options = nil)
26
- logger.info({ stat: stat, type: :count, value: value, options: options }.to_json)
26
+ logger.info({stat: stat, type: :count, value: value, options: options}.to_json)
27
27
  end
28
28
 
29
29
  def distribution(stat, value, options = nil)
30
- logger.info({ stat: stat, type: :distribution, value: value, options: options }.to_json)
30
+ logger.info({stat: stat, type: :distribution, value: value, options: options}.to_json)
31
31
  end
32
32
 
33
33
  def increment(stat, options = nil)
34
- logger.info({ stat: stat, type: :increment, options: options }.to_json)
34
+ logger.info({stat: stat, type: :increment, options: options}.to_json)
35
35
  end
36
36
 
37
37
  def gauge(stat, value, options = nil)
38
- logger.info({ stat: stat, type: :gauge, value: value, options: options }.to_json)
38
+ logger.info({stat: stat, type: :gauge, value: value, options: options}.to_json)
39
39
  end
40
40
  end
41
41
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Core
5
+ class ProcessDiscovery
6
+ class TracerMemfd
7
+ attr_accessor :logger
8
+
9
+ def shutdown!
10
+ ProcessDiscovery._native_close_tracer_memfd(self, logger)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'datadog/core/process_discovery/tracer_memfd'
4
+
5
+ module Datadog
6
+ module Core
7
+ # Class used to store tracer metadata in a native file descriptor.
8
+ class ProcessDiscovery
9
+ def self.get_and_store_metadata(settings, logger)
10
+ if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
11
+ logger.debug("Cannot enable process discovery: #{libdatadog_api_failure}")
12
+ return
13
+ end
14
+ metadata = get_metadata(settings)
15
+ memfd = _native_store_tracer_metadata(logger, **metadata)
16
+ memfd.logger = logger if memfd
17
+ memfd
18
+ end
19
+
20
+ # According to the RFC, runtime_id, service_name, service_env, service_version are optional.
21
+ # In the C method exposed by ddcommon, memfd_create replaces empty strings by None for these fields.
22
+ private_class_method def self.get_metadata(settings)
23
+ {
24
+ schema_version: 1,
25
+ runtime_id: Core::Environment::Identity.id,
26
+ tracer_language: Core::Environment::Identity.lang,
27
+ tracer_version: Core::Environment::Identity.gem_datadog_version_semver2,
28
+ hostname: Core::Environment::Socket.hostname,
29
+ service_name: settings.service || '',
30
+ service_env: settings.env || '',
31
+ service_version: settings.version || ''
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -13,13 +13,15 @@ module Datadog
13
13
  # to be side-effect free.
14
14
  #
15
15
  # @return [Boolean] whether a resource conforms with the current limit
16
- def allow?(size = 1); end
16
+ def allow?(size = 1)
17
+ end
17
18
 
18
19
  # The effective rate limiting ratio based on
19
20
  # recent calls to `allow?`.
20
21
  #
21
22
  # @return [Float] recent allowance ratio
22
- def effective_rate; end
23
+ def effective_rate
24
+ end
23
25
  end
24
26
 
25
27
  # Implementation of the Token Bucket metering algorithm
@@ -32,6 +32,12 @@ module Datadog
32
32
  register_receivers(Datadog::AppSec::Remote.receivers(@telemetry))
33
33
  end
34
34
 
35
+ if settings.respond_to?(:dynamic_instrumentation) && settings.dynamic_instrumentation.enabled
36
+ register_capabilities(Datadog::DI::Remote.capabilities)
37
+ register_products(Datadog::DI::Remote.products)
38
+ register_receivers(Datadog::DI::Remote.receivers(@telemetry))
39
+ end
40
+
35
41
  register_capabilities(Datadog::Tracing::Remote.capabilities)
36
42
  register_products(Datadog::Tracing::Remote.products)
37
43
  register_receivers(Datadog::Tracing::Remote.receivers(@telemetry))