datadog 2.12.2 → 2.14.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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -1
  3. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +14 -13
  4. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  5. data/lib/datadog/appsec/actions_handler.rb +22 -1
  6. data/lib/datadog/appsec/anonymizer.rb +16 -0
  7. data/lib/datadog/appsec/configuration/settings.rb +62 -10
  8. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  9. data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
  10. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +79 -0
  11. data/lib/datadog/appsec/contrib/devise/ext.rb +21 -0
  12. data/lib/datadog/appsec/contrib/devise/integration.rb +0 -1
  13. data/lib/datadog/appsec/contrib/devise/patcher.rb +36 -23
  14. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  15. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  16. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
  17. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +93 -0
  18. data/lib/datadog/appsec/contrib/rack/ext.rb +14 -0
  19. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +10 -3
  20. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +0 -2
  21. data/lib/datadog/appsec/event.rb +1 -1
  22. data/lib/datadog/appsec/ext.rb +4 -2
  23. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +4 -2
  24. data/lib/datadog/appsec/monitor/gateway/watcher.rb +8 -3
  25. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  26. data/lib/datadog/appsec/utils.rb +0 -2
  27. data/lib/datadog/core/configuration/components.rb +2 -1
  28. data/lib/datadog/core/configuration/ext.rb +4 -0
  29. data/lib/datadog/core/configuration/options.rb +2 -2
  30. data/lib/datadog/core/configuration/settings.rb +53 -30
  31. data/lib/datadog/core/environment/agent_info.rb +4 -3
  32. data/lib/datadog/core/metrics/client.rb +1 -1
  33. data/lib/datadog/core/remote/client.rb +1 -1
  34. data/lib/datadog/core/remote/component.rb +3 -6
  35. data/lib/datadog/core/remote/configuration/repository.rb +2 -1
  36. data/lib/datadog/core/remote/negotiation.rb +9 -9
  37. data/lib/datadog/core/remote/transport/config.rb +4 -3
  38. data/lib/datadog/core/remote/transport/http/client.rb +4 -3
  39. data/lib/datadog/core/remote/transport/http/config.rb +6 -32
  40. data/lib/datadog/core/remote/transport/http/negotiation.rb +6 -32
  41. data/lib/datadog/core/remote/transport/http.rb +22 -57
  42. data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
  43. data/lib/datadog/core/runtime/metrics.rb +8 -1
  44. data/lib/datadog/core/telemetry/http/adapters/net.rb +1 -1
  45. data/lib/datadog/core/transport/http/api/instance.rb +17 -0
  46. data/lib/datadog/core/transport/http/api/spec.rb +17 -0
  47. data/lib/datadog/core/transport/http/builder.rb +5 -3
  48. data/lib/datadog/core/transport/http.rb +39 -2
  49. data/lib/datadog/di/component.rb +0 -2
  50. data/lib/datadog/di/probe_notifier_worker.rb +16 -16
  51. data/lib/datadog/di/transport/diagnostics.rb +4 -3
  52. data/lib/datadog/di/transport/http/api.rb +2 -12
  53. data/lib/datadog/di/transport/http/client.rb +4 -3
  54. data/lib/datadog/di/transport/http/diagnostics.rb +7 -33
  55. data/lib/datadog/di/transport/http/input.rb +7 -33
  56. data/lib/datadog/di/transport/http.rb +14 -56
  57. data/lib/datadog/di/transport/input.rb +4 -3
  58. data/lib/datadog/di/utils.rb +5 -0
  59. data/lib/datadog/kit/appsec/events.rb +12 -0
  60. data/lib/datadog/kit/identity.rb +5 -1
  61. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  62. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  63. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  64. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  65. data/lib/datadog/opentelemetry.rb +2 -1
  66. data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
  67. data/lib/datadog/profiling.rb +5 -2
  68. data/lib/datadog/tracing/component.rb +15 -12
  69. data/lib/datadog/tracing/configuration/ext.rb +7 -1
  70. data/lib/datadog/tracing/configuration/settings.rb +18 -2
  71. data/lib/datadog/tracing/context_provider.rb +1 -1
  72. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  73. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  74. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  75. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  76. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  77. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  78. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  79. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  80. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  81. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
  82. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -11
  83. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +6 -10
  84. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  85. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +46 -0
  86. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  87. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  88. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  89. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  90. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  91. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  92. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  93. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  94. data/lib/datadog/tracing/contrib.rb +1 -0
  95. data/lib/datadog/tracing/correlation.rb +9 -2
  96. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  97. data/lib/datadog/tracing/distributed/datadog.rb +2 -0
  98. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  99. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  100. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  101. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  102. data/lib/datadog/tracing/span_operation.rb +2 -1
  103. data/lib/datadog/tracing/sync_writer.rb +1 -2
  104. data/lib/datadog/tracing/trace_digest.rb +9 -2
  105. data/lib/datadog/tracing/trace_operation.rb +29 -17
  106. data/lib/datadog/tracing/trace_segment.rb +6 -4
  107. data/lib/datadog/tracing/tracer.rb +38 -2
  108. data/lib/datadog/tracing/transport/http/api.rb +2 -10
  109. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  110. data/lib/datadog/tracing/transport/http/traces.rb +13 -41
  111. data/lib/datadog/tracing/transport/http.rb +11 -44
  112. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  113. data/lib/datadog/tracing/transport/traces.rb +26 -9
  114. data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
  115. data/lib/datadog/tracing/writer.rb +2 -6
  116. data/lib/datadog/tracing.rb +16 -3
  117. data/lib/datadog/version.rb +2 -2
  118. data/lib/datadog.rb +1 -1
  119. metadata +24 -13
  120. data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
  121. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
  122. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
  123. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  124. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  125. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
@@ -1,47 +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 registration controller
14
- module RegistrationControllerPatch
15
- def create
16
- return super unless AppSec.enabled?
17
- return super unless Configuration.auto_user_instrumentation_enabled?
18
- return super unless AppSec.active_context
19
-
20
- super do |resource|
21
- if resource.persisted?
22
- devise_resource = Resource.new(resource)
23
- event_information = Event.new(devise_resource, Configuration.auto_user_instrumentation_mode)
24
-
25
- if event_information.user_id
26
- Datadog.logger.debug { 'AppSec: User signup event' }
27
- else
28
- Datadog.logger.warn { "AppSec: User signup event, but can't extract user ID. Tracking empty event" }
29
- end
30
-
31
- Tracking.track_signup(
32
- AppSec.active_context.trace,
33
- AppSec.active_context.span,
34
- user_id: event_information.user_id,
35
- **event_information.to_h
36
- )
37
- end
38
-
39
- yield resource if block_given?
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Devise
7
- # Class to encpasulate extracting information from a Devise resource
8
- # Normally a devise resource would be an Active::Record instance
9
- class Resource
10
- def initialize(resource)
11
- @resource = resource
12
- end
13
-
14
- def id
15
- extract(:id) || extract(:uuid)
16
- end
17
-
18
- def email
19
- extract(:email)
20
- end
21
-
22
- def username
23
- extract(:username)
24
- end
25
-
26
- private
27
-
28
- def extract(method)
29
- @resource.send(method) if @resource.respond_to?(method)
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../kit/identity'
4
-
5
- module Datadog
6
- module AppSec
7
- module Contrib
8
- module Devise
9
- # Internal module to track user events
10
- module Tracking
11
- LOGIN_SUCCESS_EVENT = 'users.login.success'
12
- LOGIN_FAILURE_EVENT = 'users.login.failure'
13
- SIGNUP_EVENT = 'users.signup'
14
-
15
- def self.track_login_success(trace, span, user_id:, **others)
16
- return if trace.nil? || span.nil?
17
-
18
- track(LOGIN_SUCCESS_EVENT, trace, span, **others)
19
-
20
- Kit::Identity.set_user(trace, span, id: user_id.to_s, **others) if user_id
21
- end
22
-
23
- def self.track_login_failure(trace, span, user_id:, user_exists:, **others)
24
- return if trace.nil? || span.nil?
25
-
26
- track(LOGIN_FAILURE_EVENT, trace, span, **others)
27
-
28
- span.set_tag('appsec.events.users.login.failure.usr.id', user_id) if user_id
29
- span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists)
30
- end
31
-
32
- def self.track_signup(trace, span, user_id:, **others)
33
- return if trace.nil? || span.nil?
34
-
35
- track(SIGNUP_EVENT, trace, span, **others)
36
- Kit::Identity.set_user(trace, id: user_id.to_s, **others) if user_id
37
- end
38
-
39
- def self.track(event, trace, span, **others)
40
- return if trace.nil? || span.nil?
41
-
42
- span.set_tag("appsec.events.#{event}.track", 'true')
43
- span.set_tag("_dd.appsec.events.#{event}.auto.mode", Configuration.track_user_events_mode)
44
-
45
- others.each do |k, v|
46
- raise ArgumentError, 'key cannot be :track' if k.to_sym == :track
47
-
48
- span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
49
- end
50
-
51
- trace.keep!
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Utils
6
- # Utility class to to AppSec-specific trace operations
7
- class TraceOperation
8
- def self.appsec_standalone_reject?(trace)
9
- Datadog.configuration.appsec.standalone.enabled &&
10
- (trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
11
- end
12
- end
13
- end
14
- end
15
- end