datadog 2.9.0 → 2.11.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 +72 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +2 -2
- data/ext/datadog_profiling_native_extension/collectors_stack.c +3 -3
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +46 -6
- data/ext/datadog_profiling_native_extension/extconf.rb +4 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +51 -93
- data/ext/datadog_profiling_native_extension/heap_recorder.h +1 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +56 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +7 -0
- data/ext/datadog_profiling_native_extension/profiling.c +7 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +9 -22
- data/ext/datadog_profiling_native_extension/stack_recorder.h +1 -1
- data/ext/libdatadog_api/crashtracker.c +4 -4
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler.rb +27 -0
- data/lib/datadog/appsec/component.rb +14 -8
- data/lib/datadog/appsec/configuration/settings.rb +73 -11
- data/lib/datadog/appsec/context.rb +28 -8
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/devise/configuration.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/event.rb +4 -7
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +16 -21
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +8 -15
- data/lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/devise/tracking.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +43 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +11 -14
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +65 -70
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +11 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +20 -24
- data/lib/datadog/appsec/contrib/rails/patcher.rb +3 -16
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +38 -47
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +3 -29
- data/lib/datadog/appsec/ext.rb +6 -1
- data/lib/datadog/appsec/metrics/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +19 -24
- data/lib/datadog/appsec/processor.rb +4 -3
- data/lib/datadog/appsec/remote.rb +4 -0
- data/lib/datadog/appsec/response.rb +18 -80
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec.rb +16 -5
- data/lib/datadog/core/configuration/components.rb +7 -1
- data/lib/datadog/core/configuration/ext.rb +1 -1
- data/lib/datadog/core/configuration/option_definition.rb +2 -0
- data/lib/datadog/core/configuration/settings.rb +22 -6
- data/lib/datadog/core/encoding.rb +16 -0
- data/lib/datadog/core/environment/agent_info.rb +77 -0
- data/lib/datadog/core/remote/transport/http/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/config.rb +0 -18
- data/lib/datadog/core/remote/transport/http/negotiation.rb +1 -18
- data/lib/datadog/core/remote/transport/http.rb +7 -12
- data/lib/datadog/core/remote/transport/negotiation.rb +13 -1
- data/lib/datadog/core/telemetry/event.rb +5 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/spec.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +37 -17
- data/lib/datadog/core/transport/response.rb +4 -0
- data/lib/datadog/di/code_tracker.rb +15 -8
- data/lib/datadog/di/component.rb +3 -0
- data/lib/datadog/di/configuration/settings.rb +14 -0
- data/lib/datadog/di/contrib.rb +2 -0
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/probe.rb +3 -6
- data/lib/datadog/di/probe_manager.rb +5 -2
- data/lib/datadog/di/probe_notification_builder.rb +6 -0
- data/lib/datadog/di/probe_notifier_worker.rb +15 -4
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +29 -8
- data/lib/datadog/di/utils.rb +91 -0
- data/lib/datadog/di.rb +3 -0
- data/lib/datadog/profiling/component.rb +2 -8
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/tracing/configuration/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/transport/http/api.rb +11 -2
- data/lib/datadog/tracing/transport/http/traces.rb +0 -3
- data/lib/datadog/tracing/transport/http.rb +12 -7
- data/lib/datadog/tracing/transport/serializable_trace.rb +8 -4
- data/lib/datadog/tracing/transport/traces.rb +25 -8
- data/lib/datadog/version.rb +1 -1
- metadata +51 -42
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
@@ -8,8 +8,8 @@ require_relative '../../core/transport/ext'
|
|
8
8
|
require_relative '../../core/transport/http/adapters/net'
|
9
9
|
require_relative '../../core/transport/http/adapters/test'
|
10
10
|
require_relative '../../core/transport/http/adapters/unix_socket'
|
11
|
+
require_relative '../../core/transport/http/builder'
|
11
12
|
require_relative 'http/api'
|
12
|
-
require_relative 'http/builder'
|
13
13
|
require_relative '../../../datadog/version'
|
14
14
|
|
15
15
|
module Datadog
|
@@ -30,8 +30,10 @@ module Datadog
|
|
30
30
|
module_function
|
31
31
|
|
32
32
|
# Builds a new Transport::HTTP::Client
|
33
|
-
def new(&block)
|
34
|
-
Builder.new(
|
33
|
+
def new(klass, &block)
|
34
|
+
Core::Transport::HTTP::Builder.new(
|
35
|
+
api_instance_class: API::Instance, &block
|
36
|
+
).to_transport(klass)
|
35
37
|
end
|
36
38
|
|
37
39
|
# Builds a new Transport::HTTP::Client with default settings
|
@@ -40,7 +42,7 @@ module Datadog
|
|
40
42
|
agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
|
41
43
|
**options
|
42
44
|
)
|
43
|
-
new do |transport|
|
45
|
+
new(Transport::Traces::Transport) do |transport|
|
44
46
|
transport.adapter(agent_settings)
|
45
47
|
transport.headers default_headers
|
46
48
|
|
@@ -86,12 +88,15 @@ module Datadog
|
|
86
88
|
end
|
87
89
|
|
88
90
|
# Add adapters to registry
|
89
|
-
Builder::REGISTRY.set(
|
91
|
+
Core::Transport::HTTP::Builder::REGISTRY.set(
|
90
92
|
Datadog::Core::Transport::HTTP::Adapters::Net,
|
91
93
|
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
92
94
|
)
|
93
|
-
|
94
|
-
|
95
|
+
Core::Transport::HTTP::Builder::REGISTRY.set(
|
96
|
+
Datadog::Core::Transport::HTTP::Adapters::Test,
|
97
|
+
Datadog::Core::Transport::Ext::Test::ADAPTER
|
98
|
+
)
|
99
|
+
Core::Transport::HTTP::Builder::REGISTRY.set(
|
95
100
|
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
96
101
|
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
97
102
|
)
|
@@ -14,7 +14,7 @@ module Datadog
|
|
14
14
|
|
15
15
|
# @param trace [Datadog::Trace] the trace to serialize
|
16
16
|
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
17
|
-
def initialize(trace, native_events_supported
|
17
|
+
def initialize(trace, native_events_supported:)
|
18
18
|
@trace = trace
|
19
19
|
@native_events_supported = native_events_supported
|
20
20
|
end
|
@@ -29,13 +29,17 @@ module Datadog
|
|
29
29
|
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
30
30
|
def to_msgpack(packer = nil)
|
31
31
|
# As of 1.3.3, JRuby implementation doesn't pass an existing packer
|
32
|
-
trace.spans.map
|
32
|
+
trace.spans.map do |s|
|
33
|
+
SerializableSpan.new(s, native_events_supported: @native_events_supported)
|
34
|
+
end.to_msgpack(packer)
|
33
35
|
end
|
34
36
|
|
35
37
|
# JSON serializer interface.
|
36
38
|
# Used by older version of the transport.
|
37
39
|
def to_json(*args)
|
38
|
-
trace.spans.map
|
40
|
+
trace.spans.map do |s|
|
41
|
+
SerializableSpan.new(s, native_events_supported: @native_events_supported).to_hash
|
42
|
+
end.to_json(*args)
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -46,7 +50,7 @@ module Datadog
|
|
46
50
|
|
47
51
|
# @param span [Datadog::Span] the span to serialize
|
48
52
|
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
49
|
-
def initialize(span, native_events_supported)
|
53
|
+
def initialize(span, native_events_supported:)
|
50
54
|
@span = span
|
51
55
|
@trace_id = Tracing::Utils::TraceId.to_low_order(span.trace_id)
|
52
56
|
@native_events_supported = native_events_supported
|
@@ -50,8 +50,9 @@ module Datadog
|
|
50
50
|
#
|
51
51
|
# @param encoder [Datadog::Core::Encoding::Encoder]
|
52
52
|
# @param max_size [String] maximum acceptable payload size
|
53
|
-
def initialize(encoder, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
|
53
|
+
def initialize(encoder, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
|
54
54
|
@encoder = encoder
|
55
|
+
@native_events_supported = native_events_supported
|
55
56
|
@max_size = max_size
|
56
57
|
end
|
57
58
|
|
@@ -77,7 +78,7 @@ module Datadog
|
|
77
78
|
private
|
78
79
|
|
79
80
|
def encode_one(trace)
|
80
|
-
encoded = Encoder.encode_trace(encoder, trace)
|
81
|
+
encoded = Encoder.encode_trace(encoder, trace, native_events_supported: @native_events_supported)
|
81
82
|
|
82
83
|
if encoded.size > max_size
|
83
84
|
# This single trace is too large, we can't flush it
|
@@ -95,17 +96,18 @@ module Datadog
|
|
95
96
|
module Encoder
|
96
97
|
module_function
|
97
98
|
|
98
|
-
def encode_trace(encoder, trace)
|
99
|
+
def encode_trace(encoder, trace, native_events_supported:)
|
99
100
|
# Format the trace for transport
|
100
101
|
TraceFormatter.format!(trace)
|
101
102
|
|
102
103
|
# Make the trace serializable
|
103
|
-
serializable_trace = SerializableTrace.new(trace)
|
104
|
-
|
105
|
-
Datadog.logger.debug { "Flushing trace: #{JSON.dump(serializable_trace)}" }
|
104
|
+
serializable_trace = SerializableTrace.new(trace, native_events_supported: native_events_supported)
|
106
105
|
|
107
106
|
# Encode the trace
|
108
|
-
encoder.encode(serializable_trace)
|
107
|
+
encoder.encode(serializable_trace).tap do |encoded|
|
108
|
+
# Print the actual serialized trace, since the encoder can change make non-trivial changes
|
109
|
+
Datadog.logger.debug { "Flushing trace: #{encoder.decode(encoded)}" }
|
110
|
+
end
|
109
111
|
end
|
110
112
|
end
|
111
113
|
|
@@ -126,7 +128,10 @@ module Datadog
|
|
126
128
|
|
127
129
|
def send_traces(traces)
|
128
130
|
encoder = current_api.encoder
|
129
|
-
chunker = Datadog::Tracing::Transport::Traces::Chunker.new(
|
131
|
+
chunker = Datadog::Tracing::Transport::Traces::Chunker.new(
|
132
|
+
encoder,
|
133
|
+
native_events_supported: native_events_supported?
|
134
|
+
)
|
130
135
|
|
131
136
|
responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
|
132
137
|
request = Request.new(EncodedParcel.new(encoded_traces, trace_count))
|
@@ -188,6 +193,18 @@ module Datadog
|
|
188
193
|
@client = HTTP::Client.new(current_api)
|
189
194
|
end
|
190
195
|
|
196
|
+
# Queries the agent for native span events serialization support.
|
197
|
+
# This changes how the serialization of span events performed.
|
198
|
+
def native_events_supported?
|
199
|
+
return @native_events_supported if defined?(@native_events_supported)
|
200
|
+
|
201
|
+
if (res = Datadog.send(:components).agent_info.fetch)
|
202
|
+
@native_events_supported = res.span_events == true
|
203
|
+
else
|
204
|
+
false
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
191
208
|
# Raised when configured with an unknown API version
|
192
209
|
class UnknownApiVersionError < StandardError
|
193
210
|
attr_reader :version
|
data/lib/datadog/version.rb
CHANGED
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.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -30,48 +30,56 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 3.3.7
|
33
|
+
version: '3.4'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '3.
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 3.3.7
|
40
|
+
version: '3.4'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: libddwaf
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.18.0.0.
|
47
|
+
version: 1.18.0.0.1
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version: 1.18.0.0.
|
54
|
+
version: 1.18.0.0.1
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: libdatadog
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
61
|
+
version: 16.0.1.1.0
|
68
62
|
type: :runtime
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
66
|
- - "~>"
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
68
|
+
version: 16.0.1.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: logger
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
75
83
|
description: |
|
76
84
|
datadog is Datadog's client library for Ruby. It includes a suite of tools
|
77
85
|
which provide visibility into the performance and security of Ruby applications,
|
@@ -82,7 +90,6 @@ executables:
|
|
82
90
|
- ddprofrb
|
83
91
|
extensions:
|
84
92
|
- ext/datadog_profiling_native_extension/extconf.rb
|
85
|
-
- ext/datadog_profiling_loader/extconf.rb
|
86
93
|
- ext/libdatadog_api/extconf.rb
|
87
94
|
extra_rdoc_files: []
|
88
95
|
files:
|
@@ -94,8 +101,6 @@ files:
|
|
94
101
|
- NOTICE
|
95
102
|
- README.md
|
96
103
|
- bin/ddprofrb
|
97
|
-
- ext/datadog_profiling_loader/datadog_profiling_loader.c
|
98
|
-
- ext/datadog_profiling_loader/extconf.rb
|
99
104
|
- ext/datadog_profiling_native_extension/NativeExtensionDesign.md
|
100
105
|
- ext/datadog_profiling_native_extension/clock_id.h
|
101
106
|
- ext/datadog_profiling_native_extension/clock_id_from_pthread.c
|
@@ -146,6 +151,7 @@ files:
|
|
146
151
|
- ext/libdatadog_extconf_helpers.rb
|
147
152
|
- lib/datadog.rb
|
148
153
|
- lib/datadog/appsec.rb
|
154
|
+
- lib/datadog/appsec/actions_handler.rb
|
149
155
|
- lib/datadog/appsec/assets.rb
|
150
156
|
- lib/datadog/appsec/assets/blocked.html
|
151
157
|
- lib/datadog/appsec/assets/blocked.json
|
@@ -164,6 +170,7 @@ files:
|
|
164
170
|
- lib/datadog/appsec/contrib/active_record/integration.rb
|
165
171
|
- lib/datadog/appsec/contrib/active_record/patcher.rb
|
166
172
|
- lib/datadog/appsec/contrib/auto_instrument.rb
|
173
|
+
- lib/datadog/appsec/contrib/devise/configuration.rb
|
167
174
|
- lib/datadog/appsec/contrib/devise/event.rb
|
168
175
|
- lib/datadog/appsec/contrib/devise/ext.rb
|
169
176
|
- lib/datadog/appsec/contrib/devise/integration.rb
|
@@ -173,23 +180,26 @@ files:
|
|
173
180
|
- lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb
|
174
181
|
- lib/datadog/appsec/contrib/devise/resource.rb
|
175
182
|
- lib/datadog/appsec/contrib/devise/tracking.rb
|
183
|
+
- lib/datadog/appsec/contrib/excon/integration.rb
|
184
|
+
- lib/datadog/appsec/contrib/excon/patcher.rb
|
185
|
+
- lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb
|
186
|
+
- lib/datadog/appsec/contrib/faraday/connection_patch.rb
|
187
|
+
- lib/datadog/appsec/contrib/faraday/integration.rb
|
188
|
+
- lib/datadog/appsec/contrib/faraday/patcher.rb
|
189
|
+
- lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb
|
190
|
+
- lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb
|
176
191
|
- lib/datadog/appsec/contrib/graphql/appsec_trace.rb
|
177
192
|
- lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb
|
178
193
|
- lib/datadog/appsec/contrib/graphql/gateway/watcher.rb
|
179
194
|
- lib/datadog/appsec/contrib/graphql/integration.rb
|
180
195
|
- lib/datadog/appsec/contrib/graphql/patcher.rb
|
181
|
-
- lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb
|
182
196
|
- lib/datadog/appsec/contrib/integration.rb
|
183
|
-
- lib/datadog/appsec/contrib/patcher.rb
|
184
197
|
- lib/datadog/appsec/contrib/rack/ext.rb
|
185
198
|
- lib/datadog/appsec/contrib/rack/gateway/request.rb
|
186
199
|
- lib/datadog/appsec/contrib/rack/gateway/response.rb
|
187
200
|
- lib/datadog/appsec/contrib/rack/gateway/watcher.rb
|
188
201
|
- lib/datadog/appsec/contrib/rack/integration.rb
|
189
202
|
- lib/datadog/appsec/contrib/rack/patcher.rb
|
190
|
-
- lib/datadog/appsec/contrib/rack/reactive/request.rb
|
191
|
-
- lib/datadog/appsec/contrib/rack/reactive/request_body.rb
|
192
|
-
- lib/datadog/appsec/contrib/rack/reactive/response.rb
|
193
203
|
- lib/datadog/appsec/contrib/rack/request_body_middleware.rb
|
194
204
|
- lib/datadog/appsec/contrib/rack/request_middleware.rb
|
195
205
|
- lib/datadog/appsec/contrib/rails/ext.rb
|
@@ -198,17 +208,14 @@ files:
|
|
198
208
|
- lib/datadog/appsec/contrib/rails/gateway/watcher.rb
|
199
209
|
- lib/datadog/appsec/contrib/rails/integration.rb
|
200
210
|
- lib/datadog/appsec/contrib/rails/patcher.rb
|
201
|
-
- lib/datadog/appsec/contrib/rails/reactive/action.rb
|
202
211
|
- lib/datadog/appsec/contrib/rails/request.rb
|
203
212
|
- lib/datadog/appsec/contrib/rails/request_middleware.rb
|
204
|
-
- lib/datadog/appsec/contrib/sinatra/ext.rb
|
205
213
|
- lib/datadog/appsec/contrib/sinatra/framework.rb
|
206
214
|
- lib/datadog/appsec/contrib/sinatra/gateway/request.rb
|
207
215
|
- lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb
|
208
216
|
- lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb
|
209
217
|
- lib/datadog/appsec/contrib/sinatra/integration.rb
|
210
218
|
- lib/datadog/appsec/contrib/sinatra/patcher.rb
|
211
|
-
- lib/datadog/appsec/contrib/sinatra/reactive/routed.rb
|
212
219
|
- lib/datadog/appsec/contrib/sinatra/request_middleware.rb
|
213
220
|
- lib/datadog/appsec/event.rb
|
214
221
|
- lib/datadog/appsec/ext.rb
|
@@ -216,20 +223,22 @@ files:
|
|
216
223
|
- lib/datadog/appsec/instrumentation.rb
|
217
224
|
- lib/datadog/appsec/instrumentation/gateway.rb
|
218
225
|
- lib/datadog/appsec/instrumentation/gateway/argument.rb
|
226
|
+
- lib/datadog/appsec/metrics.rb
|
227
|
+
- lib/datadog/appsec/metrics/collector.rb
|
228
|
+
- lib/datadog/appsec/metrics/exporter.rb
|
229
|
+
- lib/datadog/appsec/metrics/telemetry.rb
|
219
230
|
- lib/datadog/appsec/monitor.rb
|
220
231
|
- lib/datadog/appsec/monitor/gateway/watcher.rb
|
221
|
-
- lib/datadog/appsec/monitor/reactive/set_user.rb
|
222
232
|
- lib/datadog/appsec/processor.rb
|
223
|
-
- lib/datadog/appsec/processor/context.rb
|
224
233
|
- lib/datadog/appsec/processor/rule_loader.rb
|
225
234
|
- lib/datadog/appsec/processor/rule_merger.rb
|
226
235
|
- lib/datadog/appsec/rate_limiter.rb
|
227
|
-
- lib/datadog/appsec/reactive/address_hash.rb
|
228
|
-
- lib/datadog/appsec/reactive/engine.rb
|
229
|
-
- lib/datadog/appsec/reactive/subscriber.rb
|
230
236
|
- lib/datadog/appsec/remote.rb
|
231
237
|
- lib/datadog/appsec/response.rb
|
232
238
|
- lib/datadog/appsec/sample_rate.rb
|
239
|
+
- lib/datadog/appsec/security_engine.rb
|
240
|
+
- lib/datadog/appsec/security_engine/result.rb
|
241
|
+
- lib/datadog/appsec/security_engine/runner.rb
|
233
242
|
- lib/datadog/appsec/utils.rb
|
234
243
|
- lib/datadog/appsec/utils/http.rb
|
235
244
|
- lib/datadog/appsec/utils/http/media_range.rb
|
@@ -258,6 +267,7 @@ files:
|
|
258
267
|
- lib/datadog/core/diagnostics/environment_logger.rb
|
259
268
|
- lib/datadog/core/diagnostics/health.rb
|
260
269
|
- lib/datadog/core/encoding.rb
|
270
|
+
- lib/datadog/core/environment/agent_info.rb
|
261
271
|
- lib/datadog/core/environment/cgroup.rb
|
262
272
|
- lib/datadog/core/environment/class_count.rb
|
263
273
|
- lib/datadog/core/environment/container.rb
|
@@ -304,9 +314,6 @@ files:
|
|
304
314
|
- lib/datadog/core/remote/transport/config.rb
|
305
315
|
- lib/datadog/core/remote/transport/http.rb
|
306
316
|
- lib/datadog/core/remote/transport/http/api.rb
|
307
|
-
- lib/datadog/core/remote/transport/http/api/instance.rb
|
308
|
-
- lib/datadog/core/remote/transport/http/api/spec.rb
|
309
|
-
- lib/datadog/core/remote/transport/http/builder.rb
|
310
317
|
- lib/datadog/core/remote/transport/http/client.rb
|
311
318
|
- lib/datadog/core/remote/transport/http/config.rb
|
312
319
|
- lib/datadog/core/remote/transport/http/negotiation.rb
|
@@ -338,7 +345,10 @@ files:
|
|
338
345
|
- lib/datadog/core/transport/http/adapters/unix_socket.rb
|
339
346
|
- lib/datadog/core/transport/http/api/endpoint.rb
|
340
347
|
- lib/datadog/core/transport/http/api/fallbacks.rb
|
348
|
+
- lib/datadog/core/transport/http/api/instance.rb
|
341
349
|
- lib/datadog/core/transport/http/api/map.rb
|
350
|
+
- lib/datadog/core/transport/http/api/spec.rb
|
351
|
+
- lib/datadog/core/transport/http/builder.rb
|
342
352
|
- lib/datadog/core/transport/http/env.rb
|
343
353
|
- lib/datadog/core/transport/http/response.rb
|
344
354
|
- lib/datadog/core/transport/parcel.rb
|
@@ -383,6 +393,7 @@ files:
|
|
383
393
|
- lib/datadog/di/error.rb
|
384
394
|
- lib/datadog/di/extensions.rb
|
385
395
|
- lib/datadog/di/instrumenter.rb
|
396
|
+
- lib/datadog/di/logger.rb
|
386
397
|
- lib/datadog/di/preload.rb
|
387
398
|
- lib/datadog/di/probe.rb
|
388
399
|
- lib/datadog/di/probe_builder.rb
|
@@ -599,6 +610,7 @@ files:
|
|
599
610
|
- lib/datadog/tracing/contrib/grape/instrumentation.rb
|
600
611
|
- lib/datadog/tracing/contrib/grape/integration.rb
|
601
612
|
- lib/datadog/tracing/contrib/grape/patcher.rb
|
613
|
+
- lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb
|
602
614
|
- lib/datadog/tracing/contrib/graphql/configuration/settings.rb
|
603
615
|
- lib/datadog/tracing/contrib/graphql/ext.rb
|
604
616
|
- lib/datadog/tracing/contrib/graphql/integration.rb
|
@@ -886,9 +898,6 @@ files:
|
|
886
898
|
- lib/datadog/tracing/tracer.rb
|
887
899
|
- lib/datadog/tracing/transport/http.rb
|
888
900
|
- lib/datadog/tracing/transport/http/api.rb
|
889
|
-
- lib/datadog/tracing/transport/http/api/instance.rb
|
890
|
-
- lib/datadog/tracing/transport/http/api/spec.rb
|
891
|
-
- lib/datadog/tracing/transport/http/builder.rb
|
892
901
|
- lib/datadog/tracing/transport/http/client.rb
|
893
902
|
- lib/datadog/tracing/transport/http/statistics.rb
|
894
903
|
- lib/datadog/tracing/transport/http/traces.rb
|
@@ -911,9 +920,9 @@ licenses:
|
|
911
920
|
- Apache-2.0
|
912
921
|
metadata:
|
913
922
|
allowed_push_host: https://rubygems.org
|
914
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
915
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
916
|
-
post_install_message:
|
923
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.11.0/CHANGELOG.md
|
924
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.11.0
|
925
|
+
post_install_message:
|
917
926
|
rdoc_options: []
|
918
927
|
require_paths:
|
919
928
|
- lib
|
@@ -931,8 +940,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
931
940
|
- !ruby/object:Gem::Version
|
932
941
|
version: 2.0.0
|
933
942
|
requirements: []
|
934
|
-
rubygems_version: 3.5.
|
935
|
-
signing_key:
|
943
|
+
rubygems_version: 3.5.22
|
944
|
+
signing_key:
|
936
945
|
specification_version: 4
|
937
946
|
summary: Datadog tracing code for your Ruby applications
|
938
947
|
test_files: []
|
@@ -1,142 +0,0 @@
|
|
1
|
-
#include <stdbool.h>
|
2
|
-
#include <dlfcn.h>
|
3
|
-
#include <ruby.h>
|
4
|
-
|
5
|
-
// Why this exists:
|
6
|
-
//
|
7
|
-
// The Datadog::Profiling::Loader exists because when Ruby loads a native extension (using `require`), it uses
|
8
|
-
// `dlopen(..., RTLD_LAZY | RTLD_GLOBAL)` (https://github.com/ruby/ruby/blob/67950a4c0a884bdb78d9beb4405ebf7459229b21/dln.c#L362).
|
9
|
-
// This means that every symbol exposed directly or indirectly by that native extension becomes visible to every other
|
10
|
-
// extension in the Ruby process. This can cause issues, see https://github.com/rubyjs/mini_racer/pull/179.
|
11
|
-
//
|
12
|
-
// Instead of `RTLD_LAZY | RTLD_GLOBAL`, we want to call `dlopen` with `RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND` when
|
13
|
-
// loading the profiling native extension, to avoid leaking any unintended symbols (`RTLD_LOCAL`) and avoid picking
|
14
|
-
// up other's symbols (`RTLD_DEEPBIND`).
|
15
|
-
//
|
16
|
-
// But Ruby's extension loading mechanism is not configurable -- there's no way to tell it to use different flags when
|
17
|
-
// calling `dlopen`. To get around this, this file (datadog_profiling_loader.c) introduces another extension
|
18
|
-
// (profiling loader) which has only a single responsibility: mimic Ruby's extension loading mechanism, but when calling
|
19
|
-
// `dlopen` use a different set of flags.
|
20
|
-
// This idea was shamelessly stolen from @lloeki's work in https://github.com/rubyjs/mini_racer/pull/179, big thanks!
|
21
|
-
//
|
22
|
-
// Extra note: Currently (May 2022), that we know of, the profiling native extension only exposes one potentially
|
23
|
-
// problematic symbol: `rust_eh_personality` (coming from libdatadog).
|
24
|
-
// Future versions of Rust have been patched not to expose this
|
25
|
-
// (see https://github.com/rust-lang/rust/pull/95604#issuecomment-1108563434) so we may want to revisit the need
|
26
|
-
// for this loader in the future, and perhaps delete it if we no longer require its services :)
|
27
|
-
|
28
|
-
#ifndef RTLD_DEEPBIND
|
29
|
-
#define RTLD_DEEPBIND 0
|
30
|
-
#endif
|
31
|
-
|
32
|
-
// Used to mark function arguments that are deliberately left unused
|
33
|
-
#ifdef __GNUC__
|
34
|
-
#define DDTRACE_UNUSED __attribute__((unused))
|
35
|
-
#else
|
36
|
-
#define DDTRACE_UNUSED
|
37
|
-
#endif
|
38
|
-
|
39
|
-
static VALUE ok_symbol = Qnil; // :ok in Ruby
|
40
|
-
static VALUE error_symbol = Qnil; // :error in Ruby
|
41
|
-
|
42
|
-
static VALUE _native_load(DDTRACE_UNUSED VALUE self, VALUE ruby_path, VALUE ruby_init_name);
|
43
|
-
static bool failed_to_load(void *handle, VALUE *failure_details);
|
44
|
-
static bool incompatible_library(void *handle, VALUE *failure_details);
|
45
|
-
static bool failed_to_initialize(void *handle, char *init_name, VALUE *failure_details);
|
46
|
-
static void set_failure_from_dlerror(VALUE *failure_details);
|
47
|
-
static void unload_failed_library(void *handle);
|
48
|
-
|
49
|
-
#define DDTRACE_EXPORT __attribute__ ((visibility ("default")))
|
50
|
-
|
51
|
-
void DDTRACE_EXPORT Init_datadog_profiling_loader(void) {
|
52
|
-
VALUE datadog_module = rb_define_module("Datadog");
|
53
|
-
VALUE profiling_module = rb_define_module_under(datadog_module, "Profiling");
|
54
|
-
VALUE loader_module = rb_define_module_under(profiling_module, "Loader");
|
55
|
-
rb_define_singleton_method(loader_module, "_native_load", _native_load, 2);
|
56
|
-
|
57
|
-
ok_symbol = ID2SYM(rb_intern_const("ok"));
|
58
|
-
error_symbol = ID2SYM(rb_intern_const("error"));
|
59
|
-
}
|
60
|
-
|
61
|
-
static VALUE _native_load(DDTRACE_UNUSED VALUE self, VALUE ruby_path, VALUE ruby_init_name) {
|
62
|
-
Check_Type(ruby_path, T_STRING);
|
63
|
-
Check_Type(ruby_init_name, T_STRING);
|
64
|
-
|
65
|
-
char *path = StringValueCStr(ruby_path);
|
66
|
-
char *init_name = StringValueCStr(ruby_init_name);
|
67
|
-
|
68
|
-
int dlopen_flags = RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND;
|
69
|
-
|
70
|
-
#if defined(__has_feature)
|
71
|
-
#if __has_feature(address_sanitizer)
|
72
|
-
dlopen_flags &= ~RTLD_DEEPBIND; // Not supported by ASAN
|
73
|
-
#endif
|
74
|
-
#endif
|
75
|
-
|
76
|
-
void *handle = dlopen(path, dlopen_flags);
|
77
|
-
|
78
|
-
VALUE failure_details = Qnil;
|
79
|
-
|
80
|
-
if (
|
81
|
-
failed_to_load(handle, &failure_details) ||
|
82
|
-
incompatible_library(handle, &failure_details) ||
|
83
|
-
failed_to_initialize(handle, init_name, &failure_details)
|
84
|
-
) {
|
85
|
-
return rb_ary_new_from_args(2, error_symbol, failure_details);
|
86
|
-
}
|
87
|
-
|
88
|
-
return rb_ary_new_from_args(2, ok_symbol, Qnil);
|
89
|
-
}
|
90
|
-
|
91
|
-
static bool failed_to_load(void *handle, VALUE *failure_details) {
|
92
|
-
if (handle == NULL) {
|
93
|
-
set_failure_from_dlerror(failure_details);
|
94
|
-
return true;
|
95
|
-
} else {
|
96
|
-
return false;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
static bool incompatible_library(void *handle, VALUE *failure_details) {
|
101
|
-
// The library being loaded may be linked to a different libruby than the current executing Ruby.
|
102
|
-
// We check if this is the case by checking if a well-known symbol resolves to a common address.
|
103
|
-
|
104
|
-
void *xmalloc_from_library = dlsym(handle, "ruby_xmalloc");
|
105
|
-
|
106
|
-
if (xmalloc_from_library == NULL) {
|
107
|
-
// This happens when ruby is built without a `libruby.so` by using `--disable-shared` at compilation time.
|
108
|
-
// In this situation, no conflict between libruby version is possible.
|
109
|
-
return false;
|
110
|
-
}
|
111
|
-
|
112
|
-
if (xmalloc_from_library != &ruby_xmalloc) {
|
113
|
-
*failure_details = rb_str_new_cstr("library was compiled and linked to a different Ruby version");
|
114
|
-
unload_failed_library(handle);
|
115
|
-
return true;
|
116
|
-
} else {
|
117
|
-
return false;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
static bool failed_to_initialize(void *handle, char *init_name, VALUE *failure_details) {
|
122
|
-
void (*initialization_function)(void) = dlsym(handle, init_name);
|
123
|
-
|
124
|
-
if (initialization_function == NULL) {
|
125
|
-
set_failure_from_dlerror(failure_details);
|
126
|
-
unload_failed_library(handle);
|
127
|
-
return true;
|
128
|
-
} else {
|
129
|
-
(*initialization_function)();
|
130
|
-
return false;
|
131
|
-
}
|
132
|
-
}
|
133
|
-
|
134
|
-
static void set_failure_from_dlerror(VALUE *failure_details) {
|
135
|
-
char *failure = dlerror();
|
136
|
-
*failure_details = failure == NULL ? Qnil : rb_str_new_cstr(failure);
|
137
|
-
}
|
138
|
-
|
139
|
-
static void unload_failed_library(void *handle) {
|
140
|
-
// Note: According to the Ruby VM sources, this may fail with a segfault on really old versions of macOS (< 10.11)
|
141
|
-
dlclose(handle);
|
142
|
-
}
|
@@ -1,60 +0,0 @@
|
|
1
|
-
# rubocop:disable Style/StderrPuts
|
2
|
-
|
3
|
-
if RUBY_ENGINE != "ruby" || Gem.win_platform?
|
4
|
-
$stderr.puts(
|
5
|
-
"WARN: Skipping build of Datadog profiling loader. See Datadog profiling native extension note for details."
|
6
|
-
)
|
7
|
-
|
8
|
-
File.write("Makefile", "all install clean: # dummy makefile that does nothing")
|
9
|
-
exit
|
10
|
-
end
|
11
|
-
|
12
|
-
require "mkmf"
|
13
|
-
|
14
|
-
# Because we can't control what compiler versions our customers use, shipping with -Werror by default is a no-go.
|
15
|
-
# But we can enable it in CI, so that we quickly spot any new warnings that just got introduced.
|
16
|
-
append_cflags "-Werror" if ENV["DATADOG_GEM_CI"] == "true"
|
17
|
-
|
18
|
-
# Older gcc releases may not default to C99 and we need to ask for this. This is also used:
|
19
|
-
# * by upstream Ruby -- search for gnu99 in the codebase
|
20
|
-
# * by msgpack, another datadog gem dependency
|
21
|
-
# (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
|
22
|
-
append_cflags "-std=gnu99"
|
23
|
-
|
24
|
-
# Gets really noisy when we include the MJIT header, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
|
25
|
-
append_cflags "-Wno-unused-function"
|
26
|
-
|
27
|
-
# Allow defining variables at any point in a function
|
28
|
-
append_cflags "-Wno-declaration-after-statement"
|
29
|
-
|
30
|
-
# If we forget to include a Ruby header, the function call may still appear to work, but then
|
31
|
-
# cause a segfault later. Let's ensure that never happens.
|
32
|
-
append_cflags "-Werror-implicit-function-declaration"
|
33
|
-
|
34
|
-
# Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
|
35
|
-
append_cflags "-Wunused-parameter"
|
36
|
-
|
37
|
-
# The native extension is not intended to expose any symbols/functions for other native libraries to use;
|
38
|
-
# the sole exception being `Init_datadog_profiling_loader` which needs to be visible for Ruby to call it when
|
39
|
-
# it `dlopen`s the library.
|
40
|
-
#
|
41
|
-
# By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
|
42
|
-
# For more details see https://gcc.gnu.org/wiki/Visibility
|
43
|
-
append_cflags "-fvisibility=hidden"
|
44
|
-
|
45
|
-
# Avoid legacy C definitions
|
46
|
-
append_cflags "-Wold-style-definition"
|
47
|
-
|
48
|
-
# Enable all other compiler warnings
|
49
|
-
append_cflags "-Wall"
|
50
|
-
append_cflags "-Wextra"
|
51
|
-
|
52
|
-
# Tag the native extension library with the Ruby version and Ruby platform.
|
53
|
-
# This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
|
54
|
-
# the wrong library is never loaded.
|
55
|
-
# When requiring, we need to use the exact same string, including the version and the platform.
|
56
|
-
EXTENSION_NAME = "datadog_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
|
57
|
-
|
58
|
-
create_makefile(EXTENSION_NAME)
|
59
|
-
|
60
|
-
# rubocop:enable Style/StderrPuts
|