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
@@ -12,10 +12,11 @@ module Datadog
|
|
12
12
|
class Client
|
13
13
|
include Datadog::Tracing::Transport::HTTP::Statistics
|
14
14
|
|
15
|
-
attr_reader :api
|
15
|
+
attr_reader :api, :logger
|
16
16
|
|
17
|
-
def initialize(api)
|
17
|
+
def initialize(api, logger: Datadog.logger)
|
18
18
|
@api = api
|
19
|
+
@logger = logger
|
19
20
|
end
|
20
21
|
|
21
22
|
def send_request(request, &block)
|
@@ -36,10 +37,10 @@ module Datadog
|
|
36
37
|
|
37
38
|
# Log error
|
38
39
|
if stats.consecutive_errors > 0
|
39
|
-
|
40
|
+
logger.debug(message)
|
40
41
|
else
|
41
42
|
# Not to report telemetry logs
|
42
|
-
|
43
|
+
logger.error(message)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Update statistics
|
@@ -6,6 +6,8 @@ require_relative '../traces'
|
|
6
6
|
require_relative 'client'
|
7
7
|
require_relative '../../../core/transport/http/response'
|
8
8
|
require_relative '../../../core/transport/http/api/endpoint'
|
9
|
+
require_relative '../../../core/transport/http/api/spec'
|
10
|
+
require_relative '../../../core/transport/http/api/instance'
|
9
11
|
|
10
12
|
module Datadog
|
11
13
|
module Tracing
|
@@ -35,16 +37,12 @@ module Datadog
|
|
35
37
|
end
|
36
38
|
|
37
39
|
module API
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
def traces=(endpoint)
|
43
|
-
@traces = endpoint
|
44
|
-
end
|
40
|
+
# HTTP API Spec
|
41
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
42
|
+
attr_accessor :traces
|
45
43
|
|
46
44
|
def send_traces(env, &block)
|
47
|
-
raise
|
45
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('traces', self) if traces.nil?
|
48
46
|
|
49
47
|
traces.call(env, &block)
|
50
48
|
end
|
@@ -52,47 +50,21 @@ module Datadog
|
|
52
50
|
def encoder
|
53
51
|
traces.encoder
|
54
52
|
end
|
55
|
-
|
56
|
-
# Raised when traces sent but no traces endpoint is defined
|
57
|
-
class NoTraceEndpointDefinedError < StandardError
|
58
|
-
attr_reader :spec
|
59
|
-
|
60
|
-
def initialize(spec)
|
61
|
-
super
|
62
|
-
|
63
|
-
@spec = spec
|
64
|
-
end
|
65
|
-
|
66
|
-
def message
|
67
|
-
'No trace endpoint is defined for API specification!'
|
68
|
-
end
|
69
|
-
end
|
70
53
|
end
|
71
54
|
|
72
|
-
#
|
73
|
-
|
55
|
+
# HTTP API Instance
|
56
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
74
57
|
def send_traces(env)
|
75
|
-
|
58
|
+
unless spec.is_a?(Traces::API::Spec)
|
59
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
60
|
+
'traces', self
|
61
|
+
)
|
62
|
+
end
|
76
63
|
|
77
64
|
spec.send_traces(env) do |request_env|
|
78
65
|
call(request_env)
|
79
66
|
end
|
80
67
|
end
|
81
|
-
|
82
|
-
# Raised when traces sent to API that does not support traces
|
83
|
-
class TracesNotSupportedError < StandardError
|
84
|
-
attr_reader :spec
|
85
|
-
|
86
|
-
def initialize(spec)
|
87
|
-
super
|
88
|
-
|
89
|
-
@spec = spec
|
90
|
-
end
|
91
|
-
|
92
|
-
def message
|
93
|
-
'Traces not supported for this API!'
|
94
|
-
end
|
95
|
-
end
|
96
68
|
end
|
97
69
|
|
98
70
|
# Endpoint for submitting trace data
|
@@ -14,62 +14,29 @@ module Datadog
|
|
14
14
|
module HTTP
|
15
15
|
module_function
|
16
16
|
|
17
|
-
# Builds a new Transport::HTTP::Client
|
18
|
-
def new(klass, &block)
|
19
|
-
Core::Transport::HTTP.build(
|
20
|
-
api_instance_class: API::Instance, &block
|
21
|
-
).to_transport(klass)
|
22
|
-
end
|
23
|
-
|
24
17
|
# Builds a new Transport::HTTP::Client with default settings
|
25
18
|
# Pass a block to override any settings.
|
26
19
|
def default(
|
27
20
|
agent_settings:,
|
28
|
-
|
21
|
+
logger: Datadog.logger,
|
22
|
+
api_version: nil,
|
23
|
+
headers: nil
|
29
24
|
)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
Core::Transport::HTTP.build(
|
26
|
+
api_instance_class: Traces::API::Instance,
|
27
|
+
agent_settings: agent_settings,
|
28
|
+
logger: logger,
|
29
|
+
api_version: api_version,
|
30
|
+
headers: headers
|
31
|
+
) do |transport|
|
34
32
|
apis = API.defaults
|
35
33
|
|
36
34
|
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
37
35
|
transport.api API::V3, apis[API::V3]
|
38
36
|
|
39
|
-
# Apply any settings given by options
|
40
|
-
unless options.empty?
|
41
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
42
|
-
transport.headers options[:headers] if options.key?(:headers)
|
43
|
-
end
|
44
|
-
|
45
37
|
# Call block to apply any customization, if provided
|
46
38
|
yield(transport) if block_given?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def default_headers
|
51
|
-
{
|
52
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
53
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
54
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
55
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
56
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
57
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
58
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
59
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
60
|
-
}.tap do |headers|
|
61
|
-
# Add container ID, if present.
|
62
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
63
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
64
|
-
# Pretend that stats computation are already done by the client
|
65
|
-
if Datadog.configuration.appsec.standalone.enabled
|
66
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def default_adapter
|
72
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
39
|
+
end.to_transport(Transport::Traces::Transport)
|
73
40
|
end
|
74
41
|
end
|
75
42
|
end
|
@@ -59,6 +59,7 @@ module Datadog
|
|
59
59
|
tag_high_order_trace_id!
|
60
60
|
tag_sampling_priority!
|
61
61
|
tag_profiling_enabled!
|
62
|
+
tag_apm_tracing_disabled!
|
62
63
|
|
63
64
|
if first_span
|
64
65
|
tag_git_repository_url!
|
@@ -196,6 +197,12 @@ module Datadog
|
|
196
197
|
)
|
197
198
|
end
|
198
199
|
|
200
|
+
def tag_apm_tracing_disabled!
|
201
|
+
return if trace.apm_tracing_enabled
|
202
|
+
|
203
|
+
root_span.set_tag(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0)
|
204
|
+
end
|
205
|
+
|
199
206
|
def tag_git_repository_url!
|
200
207
|
return if git_repository_url.nil?
|
201
208
|
|
@@ -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(
|
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
|
-
|
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
|
-
|
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
|
@@ -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)
|
data/lib/datadog/tracing.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/datadog/version.rb
CHANGED
data/lib/datadog.rb
CHANGED
@@ -9,5 +9,5 @@ require_relative 'datadog/profiling'
|
|
9
9
|
require_relative 'datadog/appsec'
|
10
10
|
# Line probes will not work on Ruby < 2.6 because of lack of :script_compiled
|
11
11
|
# trace point. Only load DI on supported Ruby versions.
|
12
|
-
require_relative 'datadog/di' if RUBY_VERSION >= '2.6'
|
12
|
+
require_relative 'datadog/di' if RUBY_VERSION >= '2.6' && RUBY_ENGINE != 'jruby'
|
13
13
|
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.
|
4
|
+
version: 2.14.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-
|
11
|
+
date: 2025-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.21.0.0.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.21.0.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: libdatadog
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,6 +152,8 @@ files:
|
|
152
152
|
- lib/datadog.rb
|
153
153
|
- lib/datadog/appsec.rb
|
154
154
|
- lib/datadog/appsec/actions_handler.rb
|
155
|
+
- lib/datadog/appsec/actions_handler/serializable_backtrace.rb
|
156
|
+
- lib/datadog/appsec/anonymizer.rb
|
155
157
|
- lib/datadog/appsec/assets.rb
|
156
158
|
- lib/datadog/appsec/assets/blocked.html
|
157
159
|
- lib/datadog/appsec/assets/blocked.json
|
@@ -171,15 +173,14 @@ files:
|
|
171
173
|
- lib/datadog/appsec/contrib/active_record/patcher.rb
|
172
174
|
- lib/datadog/appsec/contrib/auto_instrument.rb
|
173
175
|
- lib/datadog/appsec/contrib/devise/configuration.rb
|
174
|
-
- lib/datadog/appsec/contrib/devise/
|
176
|
+
- lib/datadog/appsec/contrib/devise/data_extractor.rb
|
175
177
|
- lib/datadog/appsec/contrib/devise/ext.rb
|
176
178
|
- lib/datadog/appsec/contrib/devise/integration.rb
|
177
179
|
- lib/datadog/appsec/contrib/devise/patcher.rb
|
178
|
-
- lib/datadog/appsec/contrib/devise/
|
179
|
-
- lib/datadog/appsec/contrib/devise/
|
180
|
-
- lib/datadog/appsec/contrib/devise/
|
181
|
-
- lib/datadog/appsec/contrib/devise/
|
182
|
-
- lib/datadog/appsec/contrib/devise/tracking.rb
|
180
|
+
- lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb
|
181
|
+
- lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb
|
182
|
+
- lib/datadog/appsec/contrib/devise/patches/skip_signin_tracking_patch.rb
|
183
|
+
- lib/datadog/appsec/contrib/devise/tracking_middleware.rb
|
183
184
|
- lib/datadog/appsec/contrib/excon/integration.rb
|
184
185
|
- lib/datadog/appsec/contrib/excon/patcher.rb
|
185
186
|
- lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb
|
@@ -247,7 +248,6 @@ files:
|
|
247
248
|
- lib/datadog/appsec/utils/http.rb
|
248
249
|
- lib/datadog/appsec/utils/http/media_range.rb
|
249
250
|
- lib/datadog/appsec/utils/http/media_type.rb
|
250
|
-
- lib/datadog/appsec/utils/trace_operation.rb
|
251
251
|
- lib/datadog/auto_instrument.rb
|
252
252
|
- lib/datadog/auto_instrument_base.rb
|
253
253
|
- lib/datadog/core.rb
|
@@ -421,6 +421,8 @@ files:
|
|
421
421
|
- lib/datadog/kit/enable_core_dumps.rb
|
422
422
|
- lib/datadog/kit/identity.rb
|
423
423
|
- lib/datadog/opentelemetry.rb
|
424
|
+
- lib/datadog/opentelemetry/api/baggage.rb
|
425
|
+
- lib/datadog/opentelemetry/api/baggage.rbs
|
424
426
|
- lib/datadog/opentelemetry/api/context.rb
|
425
427
|
- lib/datadog/opentelemetry/api/trace/span.rb
|
426
428
|
- lib/datadog/opentelemetry/sdk/configurator.rb
|
@@ -688,6 +690,13 @@ files:
|
|
688
690
|
- lib/datadog/tracing/contrib/kafka/ext.rb
|
689
691
|
- lib/datadog/tracing/contrib/kafka/integration.rb
|
690
692
|
- lib/datadog/tracing/contrib/kafka/patcher.rb
|
693
|
+
- lib/datadog/tracing/contrib/karafka.rb
|
694
|
+
- lib/datadog/tracing/contrib/karafka/configuration/settings.rb
|
695
|
+
- lib/datadog/tracing/contrib/karafka/distributed/propagation.rb
|
696
|
+
- lib/datadog/tracing/contrib/karafka/ext.rb
|
697
|
+
- lib/datadog/tracing/contrib/karafka/integration.rb
|
698
|
+
- lib/datadog/tracing/contrib/karafka/monitor.rb
|
699
|
+
- lib/datadog/tracing/contrib/karafka/patcher.rb
|
691
700
|
- lib/datadog/tracing/contrib/lograge/configuration/settings.rb
|
692
701
|
- lib/datadog/tracing/contrib/lograge/ext.rb
|
693
702
|
- lib/datadog/tracing/contrib/lograge/instrumentation.rb
|
@@ -864,12 +873,14 @@ files:
|
|
864
873
|
- lib/datadog/tracing/diagnostics/health.rb
|
865
874
|
- lib/datadog/tracing/distributed/b3_multi.rb
|
866
875
|
- lib/datadog/tracing/distributed/b3_single.rb
|
876
|
+
- lib/datadog/tracing/distributed/baggage.rb
|
867
877
|
- lib/datadog/tracing/distributed/datadog.rb
|
868
878
|
- lib/datadog/tracing/distributed/datadog_tags_codec.rb
|
869
879
|
- lib/datadog/tracing/distributed/fetcher.rb
|
870
880
|
- lib/datadog/tracing/distributed/helpers.rb
|
871
881
|
- lib/datadog/tracing/distributed/none.rb
|
872
882
|
- lib/datadog/tracing/distributed/propagation.rb
|
883
|
+
- lib/datadog/tracing/distributed/propagation_policy.rb
|
873
884
|
- lib/datadog/tracing/distributed/trace_context.rb
|
874
885
|
- lib/datadog/tracing/event.rb
|
875
886
|
- lib/datadog/tracing/flush.rb
|
@@ -933,8 +944,8 @@ licenses:
|
|
933
944
|
- Apache-2.0
|
934
945
|
metadata:
|
935
946
|
allowed_push_host: https://rubygems.org
|
936
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
937
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
947
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.14.0/CHANGELOG.md
|
948
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.14.0
|
938
949
|
post_install_message:
|
939
950
|
rdoc_options: []
|
940
951
|
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
|