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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +14 -13
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +22 -1
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/configuration/settings.rb +62 -10
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +79 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +21 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +0 -1
- data/lib/datadog/appsec/contrib/devise/patcher.rb +36 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +93 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +14 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +10 -3
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +0 -2
- data/lib/datadog/appsec/event.rb +1 -1
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +4 -2
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +8 -3
- data/lib/datadog/appsec/security_engine/runner.rb +2 -2
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/core/configuration/components.rb +2 -1
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/options.rb +2 -2
- data/lib/datadog/core/configuration/settings.rb +53 -30
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/metrics/client.rb +1 -1
- data/lib/datadog/core/remote/client.rb +1 -1
- data/lib/datadog/core/remote/component.rb +3 -6
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +4 -3
- data/lib/datadog/core/remote/transport/http/config.rb +6 -32
- data/lib/datadog/core/remote/transport/http/negotiation.rb +6 -32
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +8 -1
- data/lib/datadog/core/telemetry/http/adapters/net.rb +1 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +5 -3
- data/lib/datadog/core/transport/http.rb +39 -2
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/probe_notifier_worker.rb +16 -16
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -33
- data/lib/datadog/di/transport/http/input.rb +7 -33
- data/lib/datadog/di/transport/http.rb +14 -56
- data/lib/datadog/di/transport/input.rb +4 -3
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling.rb +5 -2
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -11
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +46 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +2 -0
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span_operation.rb +2 -1
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +29 -17
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +38 -2
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +1 -1
- metadata +24 -13
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- 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
|