datadog 2.12.1 → 2.17.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 (302) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +154 -2
  3. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +16 -14
  4. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  5. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  6. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  7. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  8. data/ext/datadog_profiling_native_extension/extconf.rb +3 -0
  9. data/ext/datadog_profiling_native_extension/heap_recorder.c +8 -1
  10. data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
  11. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +8 -0
  12. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  13. data/ext/datadog_profiling_native_extension/stack_recorder.c +23 -23
  14. data/ext/libdatadog_api/crashtracker.c +11 -12
  15. data/ext/libdatadog_api/crashtracker.h +5 -0
  16. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  17. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  18. data/ext/libdatadog_api/init.c +15 -0
  19. data/ext/libdatadog_api/library_config.c +122 -0
  20. data/ext/libdatadog_api/library_config.h +19 -0
  21. data/ext/libdatadog_api/macos_development.md +3 -3
  22. data/ext/libdatadog_api/process_discovery.c +117 -0
  23. data/ext/libdatadog_api/process_discovery.h +5 -0
  24. data/ext/libdatadog_extconf_helpers.rb +1 -1
  25. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  26. data/lib/datadog/appsec/actions_handler.rb +24 -2
  27. data/lib/datadog/appsec/anonymizer.rb +16 -0
  28. data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
  29. data/lib/datadog/appsec/api_security.rb +9 -0
  30. data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
  31. data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
  32. data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
  33. data/lib/datadog/appsec/autoload.rb +1 -1
  34. data/lib/datadog/appsec/component.rb +29 -20
  35. data/lib/datadog/appsec/compressed_json.rb +40 -0
  36. data/lib/datadog/appsec/configuration/settings.rb +93 -28
  37. data/lib/datadog/appsec/context.rb +1 -1
  38. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
  39. data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
  40. data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
  41. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  42. data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
  43. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  44. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  45. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  46. data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
  47. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  48. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  49. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
  50. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  51. data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
  52. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
  53. data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
  54. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
  55. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
  56. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  57. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  58. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
  59. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  60. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +19 -18
  61. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
  62. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  63. data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
  64. data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
  65. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
  66. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
  67. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  68. data/lib/datadog/appsec/event.rb +96 -135
  69. data/lib/datadog/appsec/ext.rb +4 -2
  70. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
  71. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  72. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  73. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  74. data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
  75. data/lib/datadog/appsec/processor/rule_loader.rb +26 -28
  76. data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
  77. data/lib/datadog/appsec/processor.rb +1 -1
  78. data/lib/datadog/appsec/remote.rb +23 -11
  79. data/lib/datadog/appsec/response.rb +6 -6
  80. data/lib/datadog/appsec/security_engine/runner.rb +3 -3
  81. data/lib/datadog/appsec/security_event.rb +39 -0
  82. data/lib/datadog/appsec/utils.rb +0 -2
  83. data/lib/datadog/appsec.rb +1 -1
  84. data/lib/datadog/core/buffer/random.rb +18 -2
  85. data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -5
  86. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  87. data/lib/datadog/core/configuration/components.rb +50 -31
  88. data/lib/datadog/core/configuration/components_state.rb +23 -0
  89. data/lib/datadog/core/configuration/ext.rb +4 -0
  90. data/lib/datadog/core/configuration/option.rb +79 -43
  91. data/lib/datadog/core/configuration/option_definition.rb +4 -4
  92. data/lib/datadog/core/configuration/options.rb +3 -3
  93. data/lib/datadog/core/configuration/settings.rb +68 -35
  94. data/lib/datadog/core/configuration/stable_config.rb +23 -0
  95. data/lib/datadog/core/configuration.rb +40 -16
  96. data/lib/datadog/core/crashtracking/component.rb +3 -10
  97. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  98. data/lib/datadog/core/encoding.rb +1 -1
  99. data/lib/datadog/core/environment/agent_info.rb +4 -3
  100. data/lib/datadog/core/environment/cgroup.rb +10 -12
  101. data/lib/datadog/core/environment/container.rb +38 -40
  102. data/lib/datadog/core/environment/ext.rb +6 -6
  103. data/lib/datadog/core/environment/git.rb +1 -0
  104. data/lib/datadog/core/environment/identity.rb +3 -3
  105. data/lib/datadog/core/environment/platform.rb +3 -3
  106. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  107. data/lib/datadog/core/error.rb +11 -9
  108. data/lib/datadog/core/logger.rb +2 -2
  109. data/lib/datadog/core/metrics/client.rb +20 -21
  110. data/lib/datadog/core/metrics/logging.rb +5 -5
  111. data/lib/datadog/core/process_discovery.rb +32 -0
  112. data/lib/datadog/core/rate_limiter.rb +4 -2
  113. data/lib/datadog/core/remote/client.rb +40 -32
  114. data/lib/datadog/core/remote/component.rb +6 -9
  115. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  116. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  117. data/lib/datadog/core/remote/configuration/repository.rb +2 -1
  118. data/lib/datadog/core/remote/negotiation.rb +9 -9
  119. data/lib/datadog/core/remote/transport/config.rb +4 -3
  120. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  121. data/lib/datadog/core/remote/transport/http/config.rb +27 -37
  122. data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
  123. data/lib/datadog/core/remote/transport/http.rb +22 -57
  124. data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
  125. data/lib/datadog/core/runtime/metrics.rb +12 -5
  126. data/lib/datadog/core/telemetry/component.rb +78 -53
  127. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  128. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
  129. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  130. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  131. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  132. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  133. data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
  134. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  135. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  136. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  137. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  138. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  139. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  140. data/lib/datadog/core/telemetry/event.rb +17 -472
  141. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  142. data/lib/datadog/core/telemetry/logger.rb +1 -1
  143. data/lib/datadog/core/telemetry/metric.rb +8 -8
  144. data/lib/datadog/core/telemetry/request.rb +4 -4
  145. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  146. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  147. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  148. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  149. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  150. data/lib/datadog/core/telemetry/worker.rb +90 -24
  151. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  152. data/lib/datadog/core/transport/http/api/instance.rb +17 -0
  153. data/lib/datadog/core/transport/http/api/spec.rb +17 -0
  154. data/lib/datadog/core/transport/http/builder.rb +18 -16
  155. data/lib/datadog/core/transport/http.rb +39 -2
  156. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  157. data/lib/datadog/core/utils/duration.rb +32 -32
  158. data/lib/datadog/core/utils/forking.rb +2 -2
  159. data/lib/datadog/core/utils/network.rb +6 -6
  160. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  161. data/lib/datadog/core/utils/time.rb +20 -0
  162. data/lib/datadog/core/utils/truncation.rb +21 -0
  163. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  164. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  165. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  166. data/lib/datadog/core/worker.rb +1 -1
  167. data/lib/datadog/core/workers/async.rb +29 -12
  168. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  169. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  170. data/lib/datadog/core.rb +8 -0
  171. data/lib/datadog/di/boot.rb +34 -0
  172. data/lib/datadog/di/component.rb +0 -2
  173. data/lib/datadog/di/probe_notification_builder.rb +1 -1
  174. data/lib/datadog/di/probe_notifier_worker.rb +16 -16
  175. data/lib/datadog/di/remote.rb +2 -0
  176. data/lib/datadog/di/transport/diagnostics.rb +4 -3
  177. data/lib/datadog/di/transport/http/api.rb +2 -12
  178. data/lib/datadog/di/transport/http/client.rb +4 -3
  179. data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
  180. data/lib/datadog/di/transport/http/input.rb +7 -34
  181. data/lib/datadog/di/transport/http.rb +14 -62
  182. data/lib/datadog/di/transport/input.rb +4 -3
  183. data/lib/datadog/di/utils.rb +5 -0
  184. data/lib/datadog/di.rb +5 -32
  185. data/lib/datadog/error_tracking/collector.rb +87 -0
  186. data/lib/datadog/error_tracking/component.rb +167 -0
  187. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  188. data/lib/datadog/error_tracking/configuration.rb +11 -0
  189. data/lib/datadog/error_tracking/ext.rb +18 -0
  190. data/lib/datadog/error_tracking/extensions.rb +16 -0
  191. data/lib/datadog/error_tracking/filters.rb +77 -0
  192. data/lib/datadog/error_tracking.rb +18 -0
  193. data/lib/datadog/kit/appsec/events.rb +12 -0
  194. data/lib/datadog/kit/identity.rb +5 -1
  195. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  196. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  197. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  198. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  199. data/lib/datadog/opentelemetry.rb +2 -1
  200. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
  201. data/lib/datadog/profiling/collectors/info.rb +3 -0
  202. data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
  203. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  204. data/lib/datadog/profiling/exporter.rb +3 -4
  205. data/lib/datadog/profiling/ext.rb +0 -2
  206. data/lib/datadog/profiling/flush.rb +5 -8
  207. data/lib/datadog/profiling/http_transport.rb +5 -59
  208. data/lib/datadog/profiling/scheduler.rb +8 -1
  209. data/lib/datadog/profiling/stack_recorder.rb +4 -4
  210. data/lib/datadog/profiling/tag_builder.rb +1 -5
  211. data/lib/datadog/profiling.rb +6 -2
  212. data/lib/datadog/tracing/analytics.rb +1 -1
  213. data/lib/datadog/tracing/component.rb +15 -12
  214. data/lib/datadog/tracing/configuration/ext.rb +7 -1
  215. data/lib/datadog/tracing/configuration/settings.rb +18 -2
  216. data/lib/datadog/tracing/context_provider.rb +1 -1
  217. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  218. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +4 -1
  219. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
  220. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  221. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
  222. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
  223. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
  224. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  225. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  226. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  227. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  228. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  229. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  230. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  231. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  232. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  233. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
  234. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
  235. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
  236. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  237. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  238. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  239. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  240. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  241. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  242. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  243. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
  244. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  245. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
  246. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  247. data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
  248. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
  249. data/lib/datadog/tracing/contrib/patcher.rb +5 -2
  250. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  251. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  252. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  253. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  254. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
  255. data/lib/datadog/tracing/contrib/support.rb +28 -0
  256. data/lib/datadog/tracing/contrib.rb +1 -0
  257. data/lib/datadog/tracing/correlation.rb +9 -2
  258. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  259. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  260. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  261. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  262. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  263. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  264. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  265. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  266. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  267. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  268. data/lib/datadog/tracing/metadata.rb +2 -0
  269. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  270. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  271. data/lib/datadog/tracing/span.rb +10 -1
  272. data/lib/datadog/tracing/span_event.rb +1 -1
  273. data/lib/datadog/tracing/span_operation.rb +46 -16
  274. data/lib/datadog/tracing/sync_writer.rb +1 -2
  275. data/lib/datadog/tracing/trace_digest.rb +9 -2
  276. data/lib/datadog/tracing/trace_operation.rb +44 -24
  277. data/lib/datadog/tracing/trace_segment.rb +6 -4
  278. data/lib/datadog/tracing/tracer.rb +45 -5
  279. data/lib/datadog/tracing/transport/http/api.rb +2 -10
  280. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  281. data/lib/datadog/tracing/transport/http/traces.rb +13 -41
  282. data/lib/datadog/tracing/transport/http.rb +11 -44
  283. data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
  284. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  285. data/lib/datadog/tracing/transport/traces.rb +26 -9
  286. data/lib/datadog/tracing/utils.rb +1 -1
  287. data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
  288. data/lib/datadog/tracing/writer.rb +2 -6
  289. data/lib/datadog/tracing.rb +16 -3
  290. data/lib/datadog/version.rb +2 -2
  291. data/lib/datadog.rb +2 -3
  292. metadata +80 -19
  293. data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
  294. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
  295. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
  296. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  297. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  298. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  299. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  300. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  301. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  302. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -43,15 +43,17 @@ module Datadog
43
43
  # We set the value to a conservative 5 MiB, in case network speed is slow.
44
44
  DEFAULT_MAX_PAYLOAD_SIZE = 5 * 1024 * 1024
45
45
 
46
- attr_reader :encoder, :max_size
46
+ attr_reader :encoder, :max_size, :logger
47
47
 
48
48
  #
49
49
  # Single traces larger than +max_size+ will be discarded.
50
50
  #
51
51
  # @param encoder [Datadog::Core::Encoding::Encoder]
52
+ # @param logger [Datadog::Core::Logger]
52
53
  # @param max_size [String] maximum acceptable payload size
53
- def initialize(encoder, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
54
+ def initialize(encoder, logger:, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
54
55
  @encoder = encoder
56
+ @logger = logger
55
57
  @native_events_supported = native_events_supported
56
58
  @max_size = max_size
57
59
  end
@@ -78,11 +80,16 @@ module Datadog
78
80
  private
79
81
 
80
82
  def encode_one(trace)
81
- encoded = Encoder.encode_trace(encoder, trace, native_events_supported: @native_events_supported)
83
+ encoded = Encoder.encode_trace(
84
+ encoder,
85
+ trace,
86
+ logger: logger,
87
+ native_events_supported: @native_events_supported
88
+ )
82
89
 
83
90
  if encoded.size > max_size
84
91
  # This single trace is too large, we can't flush it
85
- Datadog.logger.debug { "Dropping trace. Payload too large: '#{trace.inspect}'" }
92
+ logger.debug { "Dropping trace. Payload too large: '#{trace.inspect}'" }
86
93
  Datadog.health_metrics.transport_trace_too_large(1)
87
94
 
88
95
  return nil
@@ -96,7 +103,7 @@ module Datadog
96
103
  module Encoder
97
104
  module_function
98
105
 
99
- def encode_trace(encoder, trace, native_events_supported:)
106
+ def encode_trace(encoder, trace, logger:, native_events_supported:)
100
107
  # Format the trace for transport
101
108
  TraceFormatter.format!(trace)
102
109
 
@@ -106,7 +113,7 @@ module Datadog
106
113
  # Encode the trace
107
114
  encoder.encode(serializable_trace).tap do |encoded|
108
115
  # Print the actual serialized trace, since the encoder can change make non-trivial changes
109
- Datadog.logger.debug { "Flushing trace: #{encoder.decode(encoded)}" }
116
+ logger.debug { "Flushing trace: #{encoder.decode(encoded)}" }
110
117
  end
111
118
  end
112
119
  end
@@ -117,11 +124,12 @@ module Datadog
117
124
  # batches of traces into smaller chunks and handles
118
125
  # API version downgrade handshake.
119
126
  class Transport
120
- attr_reader :client, :apis, :default_api, :current_api_id
127
+ attr_reader :client, :apis, :default_api, :current_api_id, :logger
121
128
 
122
- def initialize(apis, default_api)
129
+ def initialize(apis, default_api, logger: Datadog.logger)
123
130
  @apis = apis
124
131
  @default_api = default_api
132
+ @logger = logger
125
133
 
126
134
  change_api!(default_api)
127
135
  end
@@ -130,6 +138,7 @@ module Datadog
130
138
  encoder = current_api.encoder
131
139
  chunker = Datadog::Tracing::Transport::Traces::Chunker.new(
132
140
  encoder,
141
+ logger: logger,
133
142
  native_events_supported: native_events_supported?
134
143
  )
135
144
 
@@ -190,7 +199,7 @@ module Datadog
190
199
  raise UnknownApiVersionError, api_id unless apis.key?(api_id)
191
200
 
192
201
  @current_api_id = api_id
193
- @client = HTTP::Client.new(current_api)
202
+ @client = HTTP::Client.new(current_api, logger: logger)
194
203
  end
195
204
 
196
205
  # Queries the agent for native span events serialization support.
@@ -198,6 +207,14 @@ module Datadog
198
207
  def native_events_supported?
199
208
  return @native_events_supported if defined?(@native_events_supported)
200
209
 
210
+ # Check for an explicit override
211
+ option = Datadog.configuration.tracing.native_span_events
212
+ unless option.nil?
213
+ @native_events_supported = option
214
+ return option
215
+ end
216
+
217
+ # Otherwise, check for agent support, to ensure a configuration-less setup.
201
218
  if (res = Datadog.send(:components).agent_info.fetch)
202
219
  @native_events_supported = res.span_events == true
203
220
  else
@@ -24,7 +24,7 @@ module Datadog
24
24
 
25
25
  # While we only generate 63-bit integers due to limitations in other languages, we support
26
26
  # parsing 64-bit integers for distributed tracing since an upstream system may generate one
27
- EXTERNAL_MAX_ID = 1 << 64
27
+ EXTERNAL_MAX_ID = (1 << 64) - 1
28
28
 
29
29
  # We use a custom random number generator because we want no interference
30
30
  # with the default one. Using the default prng, we could break code that
@@ -26,14 +26,10 @@ module Datadog
26
26
  @logger = options[:logger] || Datadog.logger
27
27
 
28
28
  transport_options = options.fetch(:transport_options, {})
29
-
30
- if options.key?(:agent_settings)
31
- @agent_settings = options[:agent_settings]
32
- transport_options = transport_options.merge(agent_settings: @agent_settings)
33
- end
29
+ @agent_settings = options[:agent_settings]
34
30
 
35
31
  @transport = options.fetch(:transport) do
36
- Datadog::Tracing::Transport::HTTP.default(**transport_options)
32
+ Datadog::Tracing::Transport::HTTP.default(agent_settings: agent_settings, logger: logger, **transport_options)
37
33
  end
38
34
  end
39
35
  # rubocop:enable Lint/MissingSuper
@@ -26,15 +26,11 @@ module Datadog
26
26
  @buff_size = options.fetch(:buffer_size, Workers::AsyncTransport::DEFAULT_BUFFER_MAX_SIZE)
27
27
  @flush_interval = options.fetch(:flush_interval, Workers::AsyncTransport::DEFAULT_FLUSH_INTERVAL)
28
28
  transport_options = options.fetch(:transport_options, {})
29
-
30
- if options.key?(:agent_settings)
31
- @agent_settings = options[:agent_settings]
32
- transport_options = transport_options.merge(agent_settings: @agent_settings)
33
- end
29
+ @agent_settings = options[:agent_settings]
34
30
 
35
31
  # transport and buffers
36
32
  @transport = options.fetch(:transport) do
37
- Transport::HTTP.default(**transport_options)
33
+ Transport::HTTP.default(agent_settings: agent_settings, logger: logger, **transport_options)
38
34
  end
39
35
 
40
36
  @shutdown_timeout = options.fetch(:shutdown_timeout, Workers::AsyncTransport::DEFAULT_SHUTDOWN_TIMEOUT)
@@ -26,7 +26,6 @@ module Datadog
26
26
  id: nil,
27
27
  &block
28
28
  )
29
-
30
29
  tracer.trace(
31
30
  name,
32
31
  continue_from: continue_from,
@@ -82,7 +81,7 @@ module Datadog
82
81
  # @public_api
83
82
  def keep!
84
83
  trace = active_trace
85
- active_trace.keep! if trace
84
+ trace.keep! if trace
86
85
  end
87
86
 
88
87
  # (see Datadog::Tracing::TraceSegment#reject!)
@@ -90,7 +89,7 @@ module Datadog
90
89
  # @public_api
91
90
  def reject!
92
91
  trace = active_trace
93
- active_trace.reject! if trace
92
+ trace.reject! if trace
94
93
  end
95
94
 
96
95
  # (see Datadog::Tracing::Tracer#active_correlation)
@@ -127,6 +126,20 @@ module Datadog
127
126
  correlation.to_log_format
128
127
  end
129
128
 
129
+ # Returns the baggage for the current trace.
130
+ #
131
+ # If there is no active trace, a new one is created.
132
+ #
133
+ # @return [Datadog::Tracing::Distributed::Baggage] The baggage for the current trace.
134
+ # @public_api
135
+ def baggage
136
+ # Baggage should not be dependent on there being an active trace.
137
+ # So we create a new TraceOperation if there isn't one.
138
+ active_trace = self.active_trace || tracer.continue_trace!(nil)
139
+ active_trace.baggage ||= {}
140
+ active_trace.baggage
141
+ end
142
+
130
143
  # Gracefully shuts down the tracer.
131
144
  #
132
145
  # The public tracing API will still respond to method calls as usual
@@ -3,8 +3,8 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 12
7
- PATCH = 1
6
+ MINOR = 17
7
+ PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
10
10
  # PRE and BUILD above are modified for dev gems during gem build GHA workflow
data/lib/datadog.rb CHANGED
@@ -7,7 +7,6 @@ require_relative 'datadog/tracing/contrib'
7
7
  # Load other products (must follow tracing)
8
8
  require_relative 'datadog/profiling'
9
9
  require_relative 'datadog/appsec'
10
- # Line probes will not work on Ruby < 2.6 because of lack of :script_compiled
11
- # trace point. Only load DI on supported Ruby versions.
12
- require_relative 'datadog/di' if RUBY_VERSION >= '2.6'
10
+ require_relative 'datadog/di'
11
+ require_relative 'datadog/error_tracking'
13
12
  require_relative 'datadog/kit'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.1
4
+ version: 2.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-06 00:00:00.000000000 Z
11
+ date: 2025-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -31,6 +31,9 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.4'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.4.1
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,34 +41,37 @@ dependencies:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
43
  version: '3.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.4.1
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: libddwaf
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: 1.18.0.0.1
53
+ version: 1.22.0.0.2
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: 1.18.0.0.1
60
+ version: 1.22.0.0.2
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: libdatadog
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: 16.0.1.1.0
67
+ version: 18.1.0.1.0
62
68
  type: :runtime
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: 16.0.1.1.0
74
+ version: 18.1.0.1.0
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: logger
71
77
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +126,8 @@ files:
120
126
  - ext/datadog_profiling_native_extension/collectors_thread_context.h
121
127
  - ext/datadog_profiling_native_extension/datadog_ruby_common.c
122
128
  - ext/datadog_profiling_native_extension/datadog_ruby_common.h
129
+ - ext/datadog_profiling_native_extension/encoded_profile.c
130
+ - ext/datadog_profiling_native_extension/encoded_profile.h
123
131
  - ext/datadog_profiling_native_extension/extconf.rb
124
132
  - ext/datadog_profiling_native_extension/gvl_profiling_helper.c
125
133
  - ext/datadog_profiling_native_extension/gvl_profiling_helper.h
@@ -144,14 +152,24 @@ files:
144
152
  - ext/datadog_profiling_native_extension/unsafe_api_calls_check.c
145
153
  - ext/datadog_profiling_native_extension/unsafe_api_calls_check.h
146
154
  - ext/libdatadog_api/crashtracker.c
155
+ - ext/libdatadog_api/crashtracker.h
147
156
  - ext/libdatadog_api/datadog_ruby_common.c
148
157
  - ext/libdatadog_api/datadog_ruby_common.h
149
158
  - ext/libdatadog_api/extconf.rb
159
+ - ext/libdatadog_api/init.c
160
+ - ext/libdatadog_api/library_config.c
161
+ - ext/libdatadog_api/library_config.h
150
162
  - ext/libdatadog_api/macos_development.md
163
+ - ext/libdatadog_api/process_discovery.c
164
+ - ext/libdatadog_api/process_discovery.h
151
165
  - ext/libdatadog_extconf_helpers.rb
152
166
  - lib/datadog.rb
153
167
  - lib/datadog/appsec.rb
154
168
  - lib/datadog/appsec/actions_handler.rb
169
+ - lib/datadog/appsec/actions_handler/serializable_backtrace.rb
170
+ - lib/datadog/appsec/anonymizer.rb
171
+ - lib/datadog/appsec/api_security.rb
172
+ - lib/datadog/appsec/api_security/lru_cache.rb
155
173
  - lib/datadog/appsec/assets.rb
156
174
  - lib/datadog/appsec/assets/blocked.html
157
175
  - lib/datadog/appsec/assets/blocked.json
@@ -163,6 +181,7 @@ files:
163
181
  - lib/datadog/appsec/assets/waf_rules/strict.json
164
182
  - lib/datadog/appsec/autoload.rb
165
183
  - lib/datadog/appsec/component.rb
184
+ - lib/datadog/appsec/compressed_json.rb
166
185
  - lib/datadog/appsec/configuration.rb
167
186
  - lib/datadog/appsec/configuration/settings.rb
168
187
  - lib/datadog/appsec/context.rb
@@ -171,15 +190,14 @@ files:
171
190
  - lib/datadog/appsec/contrib/active_record/patcher.rb
172
191
  - lib/datadog/appsec/contrib/auto_instrument.rb
173
192
  - lib/datadog/appsec/contrib/devise/configuration.rb
174
- - lib/datadog/appsec/contrib/devise/event.rb
193
+ - lib/datadog/appsec/contrib/devise/data_extractor.rb
175
194
  - lib/datadog/appsec/contrib/devise/ext.rb
176
195
  - lib/datadog/appsec/contrib/devise/integration.rb
177
196
  - lib/datadog/appsec/contrib/devise/patcher.rb
178
- - lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb
179
- - lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb
180
- - lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb
181
- - lib/datadog/appsec/contrib/devise/resource.rb
182
- - lib/datadog/appsec/contrib/devise/tracking.rb
197
+ - lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb
198
+ - lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb
199
+ - lib/datadog/appsec/contrib/devise/patches/skip_signin_tracking_patch.rb
200
+ - lib/datadog/appsec/contrib/devise/tracking_middleware.rb
183
201
  - lib/datadog/appsec/contrib/excon/integration.rb
184
202
  - lib/datadog/appsec/contrib/excon/patcher.rb
185
203
  - lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb
@@ -226,6 +244,7 @@ files:
226
244
  - lib/datadog/appsec/instrumentation.rb
227
245
  - lib/datadog/appsec/instrumentation/gateway.rb
228
246
  - lib/datadog/appsec/instrumentation/gateway/argument.rb
247
+ - lib/datadog/appsec/instrumentation/gateway/middleware.rb
229
248
  - lib/datadog/appsec/metrics.rb
230
249
  - lib/datadog/appsec/metrics/collector.rb
231
250
  - lib/datadog/appsec/metrics/exporter.rb
@@ -242,11 +261,11 @@ files:
242
261
  - lib/datadog/appsec/security_engine.rb
243
262
  - lib/datadog/appsec/security_engine/result.rb
244
263
  - lib/datadog/appsec/security_engine/runner.rb
264
+ - lib/datadog/appsec/security_event.rb
245
265
  - lib/datadog/appsec/utils.rb
246
266
  - lib/datadog/appsec/utils/http.rb
247
267
  - lib/datadog/appsec/utils/http/media_range.rb
248
268
  - lib/datadog/appsec/utils/http/media_type.rb
249
- - lib/datadog/appsec/utils/trace_operation.rb
250
269
  - lib/datadog/auto_instrument.rb
251
270
  - lib/datadog/auto_instrument_base.rb
252
271
  - lib/datadog/core.rb
@@ -256,13 +275,16 @@ files:
256
275
  - lib/datadog/core/chunker.rb
257
276
  - lib/datadog/core/configuration.rb
258
277
  - lib/datadog/core/configuration/agent_settings_resolver.rb
278
+ - lib/datadog/core/configuration/agentless_settings_resolver.rb
259
279
  - lib/datadog/core/configuration/base.rb
260
280
  - lib/datadog/core/configuration/components.rb
281
+ - lib/datadog/core/configuration/components_state.rb
261
282
  - lib/datadog/core/configuration/ext.rb
262
283
  - lib/datadog/core/configuration/option.rb
263
284
  - lib/datadog/core/configuration/option_definition.rb
264
285
  - lib/datadog/core/configuration/options.rb
265
286
  - lib/datadog/core/configuration/settings.rb
287
+ - lib/datadog/core/configuration/stable_config.rb
266
288
  - lib/datadog/core/contrib/rails/utils.rb
267
289
  - lib/datadog/core/crashtracking/component.rb
268
290
  - lib/datadog/core/crashtracking/tag_builder.rb
@@ -298,6 +320,7 @@ files:
298
320
  - lib/datadog/core/metrics/metric.rb
299
321
  - lib/datadog/core/metrics/options.rb
300
322
  - lib/datadog/core/pin.rb
323
+ - lib/datadog/core/process_discovery.rb
301
324
  - lib/datadog/core/rate_limiter.rb
302
325
  - lib/datadog/core/remote.rb
303
326
  - lib/datadog/core/remote/client.rb
@@ -328,18 +351,31 @@ files:
328
351
  - lib/datadog/core/telemetry/component.rb
329
352
  - lib/datadog/core/telemetry/emitter.rb
330
353
  - lib/datadog/core/telemetry/event.rb
354
+ - lib/datadog/core/telemetry/event/app_client_configuration_change.rb
355
+ - lib/datadog/core/telemetry/event/app_closing.rb
356
+ - lib/datadog/core/telemetry/event/app_dependencies_loaded.rb
357
+ - lib/datadog/core/telemetry/event/app_heartbeat.rb
358
+ - lib/datadog/core/telemetry/event/app_integrations_change.rb
359
+ - lib/datadog/core/telemetry/event/app_started.rb
360
+ - lib/datadog/core/telemetry/event/base.rb
361
+ - lib/datadog/core/telemetry/event/distributions.rb
362
+ - lib/datadog/core/telemetry/event/generate_metrics.rb
363
+ - lib/datadog/core/telemetry/event/log.rb
364
+ - lib/datadog/core/telemetry/event/message_batch.rb
365
+ - lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb
331
366
  - lib/datadog/core/telemetry/ext.rb
332
367
  - lib/datadog/core/telemetry/http/adapters/net.rb
333
- - lib/datadog/core/telemetry/http/env.rb
334
- - lib/datadog/core/telemetry/http/ext.rb
335
- - lib/datadog/core/telemetry/http/response.rb
336
- - lib/datadog/core/telemetry/http/transport.rb
337
368
  - lib/datadog/core/telemetry/logger.rb
338
369
  - lib/datadog/core/telemetry/logging.rb
339
370
  - lib/datadog/core/telemetry/metric.rb
340
371
  - lib/datadog/core/telemetry/metrics_collection.rb
341
372
  - lib/datadog/core/telemetry/metrics_manager.rb
342
373
  - lib/datadog/core/telemetry/request.rb
374
+ - lib/datadog/core/telemetry/transport/http.rb
375
+ - lib/datadog/core/telemetry/transport/http/api.rb
376
+ - lib/datadog/core/telemetry/transport/http/client.rb
377
+ - lib/datadog/core/telemetry/transport/http/telemetry.rb
378
+ - lib/datadog/core/telemetry/transport/telemetry.rb
343
379
  - lib/datadog/core/telemetry/worker.rb
344
380
  - lib/datadog/core/transport/ext.rb
345
381
  - lib/datadog/core/transport/http.rb
@@ -370,6 +406,7 @@ files:
370
406
  - lib/datadog/core/utils/safe_dup.rb
371
407
  - lib/datadog/core/utils/sequence.rb
372
408
  - lib/datadog/core/utils/time.rb
409
+ - lib/datadog/core/utils/truncation.rb
373
410
  - lib/datadog/core/utils/url.rb
374
411
  - lib/datadog/core/vendor/multipart-post/LICENSE
375
412
  - lib/datadog/core/vendor/multipart-post/multipart.rb
@@ -387,6 +424,7 @@ files:
387
424
  - lib/datadog/core/workers/runtime_metrics.rb
388
425
  - lib/datadog/di.rb
389
426
  - lib/datadog/di/base.rb
427
+ - lib/datadog/di/boot.rb
390
428
  - lib/datadog/di/code_tracker.rb
391
429
  - lib/datadog/di/component.rb
392
430
  - lib/datadog/di/configuration.rb
@@ -415,11 +453,21 @@ files:
415
453
  - lib/datadog/di/transport/http/input.rb
416
454
  - lib/datadog/di/transport/input.rb
417
455
  - lib/datadog/di/utils.rb
456
+ - lib/datadog/error_tracking.rb
457
+ - lib/datadog/error_tracking/collector.rb
458
+ - lib/datadog/error_tracking/component.rb
459
+ - lib/datadog/error_tracking/configuration.rb
460
+ - lib/datadog/error_tracking/configuration/settings.rb
461
+ - lib/datadog/error_tracking/ext.rb
462
+ - lib/datadog/error_tracking/extensions.rb
463
+ - lib/datadog/error_tracking/filters.rb
418
464
  - lib/datadog/kit.rb
419
465
  - lib/datadog/kit/appsec/events.rb
420
466
  - lib/datadog/kit/enable_core_dumps.rb
421
467
  - lib/datadog/kit/identity.rb
422
468
  - lib/datadog/opentelemetry.rb
469
+ - lib/datadog/opentelemetry/api/baggage.rb
470
+ - lib/datadog/opentelemetry/api/baggage.rbs
423
471
  - lib/datadog/opentelemetry/api/context.rb
424
472
  - lib/datadog/opentelemetry/api/trace/span.rb
425
473
  - lib/datadog/opentelemetry/sdk/configurator.rb
@@ -437,6 +485,7 @@ files:
437
485
  - lib/datadog/profiling/collectors/stack.rb
438
486
  - lib/datadog/profiling/collectors/thread_context.rb
439
487
  - lib/datadog/profiling/component.rb
488
+ - lib/datadog/profiling/encoded_profile.rb
440
489
  - lib/datadog/profiling/exporter.rb
441
490
  - lib/datadog/profiling/ext.rb
442
491
  - lib/datadog/profiling/ext/dir_monkey_patches.rb
@@ -687,6 +736,13 @@ files:
687
736
  - lib/datadog/tracing/contrib/kafka/ext.rb
688
737
  - lib/datadog/tracing/contrib/kafka/integration.rb
689
738
  - lib/datadog/tracing/contrib/kafka/patcher.rb
739
+ - lib/datadog/tracing/contrib/karafka.rb
740
+ - lib/datadog/tracing/contrib/karafka/configuration/settings.rb
741
+ - lib/datadog/tracing/contrib/karafka/distributed/propagation.rb
742
+ - lib/datadog/tracing/contrib/karafka/ext.rb
743
+ - lib/datadog/tracing/contrib/karafka/integration.rb
744
+ - lib/datadog/tracing/contrib/karafka/monitor.rb
745
+ - lib/datadog/tracing/contrib/karafka/patcher.rb
690
746
  - lib/datadog/tracing/contrib/lograge/configuration/settings.rb
691
747
  - lib/datadog/tracing/contrib/lograge/ext.rb
692
748
  - lib/datadog/tracing/contrib/lograge/instrumentation.rb
@@ -849,6 +905,7 @@ files:
849
905
  - lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb
850
906
  - lib/datadog/tracing/contrib/sucker_punch/integration.rb
851
907
  - lib/datadog/tracing/contrib/sucker_punch/patcher.rb
908
+ - lib/datadog/tracing/contrib/support.rb
852
909
  - lib/datadog/tracing/contrib/trilogy/configuration/settings.rb
853
910
  - lib/datadog/tracing/contrib/trilogy/ext.rb
854
911
  - lib/datadog/tracing/contrib/trilogy/instrumentation.rb
@@ -863,12 +920,14 @@ files:
863
920
  - lib/datadog/tracing/diagnostics/health.rb
864
921
  - lib/datadog/tracing/distributed/b3_multi.rb
865
922
  - lib/datadog/tracing/distributed/b3_single.rb
923
+ - lib/datadog/tracing/distributed/baggage.rb
866
924
  - lib/datadog/tracing/distributed/datadog.rb
867
925
  - lib/datadog/tracing/distributed/datadog_tags_codec.rb
868
926
  - lib/datadog/tracing/distributed/fetcher.rb
869
927
  - lib/datadog/tracing/distributed/helpers.rb
870
928
  - lib/datadog/tracing/distributed/none.rb
871
929
  - lib/datadog/tracing/distributed/propagation.rb
930
+ - lib/datadog/tracing/distributed/propagation_policy.rb
872
931
  - lib/datadog/tracing/distributed/trace_context.rb
873
932
  - lib/datadog/tracing/event.rb
874
933
  - lib/datadog/tracing/flush.rb
@@ -876,6 +935,8 @@ files:
876
935
  - lib/datadog/tracing/metadata/analytics.rb
877
936
  - lib/datadog/tracing/metadata/errors.rb
878
937
  - lib/datadog/tracing/metadata/ext.rb
938
+ - lib/datadog/tracing/metadata/metastruct.rb
939
+ - lib/datadog/tracing/metadata/metastruct_tagging.rb
879
940
  - lib/datadog/tracing/metadata/tagging.rb
880
941
  - lib/datadog/tracing/pipeline.rb
881
942
  - lib/datadog/tracing/pipeline/span_filter.rb
@@ -930,8 +991,8 @@ licenses:
930
991
  - Apache-2.0
931
992
  metadata:
932
993
  allowed_push_host: https://rubygems.org
933
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.12.1/CHANGELOG.md
934
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.12.1
994
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.17.0/CHANGELOG.md
995
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.17.0
935
996
  post_install_message:
936
997
  rdoc_options: []
937
998
  require_paths:
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Devise
7
- # Class to extract event information from the resource
8
- class Event
9
- UUID_REGEX = /^\h{8}-\h{4}-\h{4}-\h{4}-\h{12}$/.freeze
10
-
11
- attr_reader :user_id
12
-
13
- def initialize(resource, mode)
14
- @resource = resource
15
- @mode = mode
16
- @user_id = nil
17
- @email = nil
18
- @username = nil
19
-
20
- extract if @resource
21
- end
22
-
23
- def to_h
24
- return @event if defined?(@event)
25
-
26
- @event = {}
27
- @event[:email] = @email if @email
28
- @event[:username] = @username if @username
29
- @event
30
- end
31
-
32
- private
33
-
34
- def extract
35
- @user_id = @resource.id
36
-
37
- case @mode
38
- when AppSec::Configuration::Settings::IDENTIFICATION_AUTO_USER_INSTRUMENTATION_MODE
39
- @email = @resource.email
40
- @username = @resource.username
41
- when AppSec::Configuration::Settings::ANONYMIZATION_AUTO_USER_INSTRUMENTATION_MODE
42
- @user_id = nil unless @user_id && @user_id.to_s =~ UUID_REGEX
43
- else
44
- Datadog.logger.warn(
45
- "Invalid auto_user_instrumentation.mode: `#{@mode}`. " \
46
- "Supported modes are: #{AppSec::Configuration::Settings::AUTO_USER_INSTRUMENTATION_MODES.join(' | ')}."
47
- )
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../configuration'
4
- require_relative '../tracking'
5
- require_relative '../resource'
6
- require_relative '../event'
7
-
8
- module Datadog
9
- module AppSec
10
- module Contrib
11
- module Devise
12
- module Patcher
13
- # Hook in devise validate method
14
- module AuthenticatablePatch
15
- # rubocop:disable Metrics/MethodLength
16
- def validate(resource, &block)
17
- result = super
18
-
19
- return result unless AppSec.enabled?
20
- return result if @_datadog_appsec_skip_track_login_event
21
- return result unless Configuration.auto_user_instrumentation_enabled?
22
- return result unless AppSec.active_context
23
-
24
- devise_resource = resource ? Resource.new(resource) : nil
25
- event_information = Event.new(devise_resource, Configuration.auto_user_instrumentation_mode)
26
-
27
- if result
28
- if event_information.user_id
29
- Datadog.logger.debug { 'AppSec: User successful login event' }
30
- else
31
- Datadog.logger.debug do
32
- "AppSec: User successful login event, but can't extract user ID. Tracking empty event"
33
- end
34
- end
35
-
36
- Tracking.track_login_success(
37
- AppSec.active_context.trace,
38
- AppSec.active_context.span,
39
- user_id: event_information.user_id,
40
- **event_information.to_h
41
- )
42
-
43
- return result
44
- end
45
-
46
- user_exists = nil
47
-
48
- if resource
49
- user_exists = true
50
- Datadog.logger.debug { 'AppSec: User failed login event, but user exists' }
51
- else
52
- user_exists = false
53
- Datadog.logger.debug { 'AppSec: User failed login event and user does not exist' }
54
- end
55
-
56
- Tracking.track_login_failure(
57
- AppSec.active_context.trace,
58
- AppSec.active_context.span,
59
- user_id: event_information.user_id,
60
- user_exists: user_exists,
61
- **event_information.to_h
62
- )
63
-
64
- result
65
- end
66
- # rubocop:enable Metrics/MethodLength
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end