datadog 2.8.0 → 2.10.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 +62 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +7 -7
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +221 -127
- data/ext/datadog_profiling_native_extension/heap_recorder.c +50 -92
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +4 -4
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +3 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +3 -1
- data/ext/datadog_profiling_native_extension/profiling.c +10 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +63 -76
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +3 -0
- data/lib/datadog/appsec/actions_handler.rb +27 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/component.rb +14 -8
- data/lib/datadog/appsec/configuration/settings.rb +9 -0
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +12 -8
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +6 -6
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +4 -4
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +20 -30
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +6 -6
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +67 -96
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +11 -11
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +6 -6
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +7 -7
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +43 -60
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -33
- data/lib/datadog/appsec/contrib/rails/patcher.rb +4 -14
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +7 -7
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -65
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -28
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +6 -6
- data/lib/datadog/appsec/event.rb +6 -6
- data/lib/datadog/appsec/ext.rb +8 -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 +23 -32
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +6 -6
- data/lib/datadog/appsec/processor/rule_loader.rb +0 -3
- data/lib/datadog/appsec/processor.rb +4 -3
- 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 +17 -8
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +39 -11
- data/lib/datadog/core/configuration/components.rb +4 -2
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +1 -3
- data/lib/datadog/core/telemetry/event.rb +87 -3
- data/lib/datadog/core/telemetry/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +22 -0
- data/lib/datadog/core/telemetry/worker.rb +33 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/code_tracker.rb +7 -4
- data/lib/datadog/di/component.rb +19 -11
- data/lib/datadog/di/configuration/settings.rb +11 -1
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +26 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +39 -18
- data/lib/datadog/di/{init.rb → preload.rb} +2 -4
- data/lib/datadog/di/probe_manager.rb +4 -4
- data/lib/datadog/di/probe_notification_builder.rb +22 -2
- data/lib/datadog/di/probe_notifier_worker.rb +5 -6
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +30 -9
- data/lib/datadog/di/transport.rb +2 -4
- data/lib/datadog/di.rb +5 -108
- data/lib/datadog/kit/appsec/events.rb +3 -3
- data/lib/datadog/kit/identity.rb +4 -4
- data/lib/datadog/profiling/component.rb +55 -53
- data/lib/datadog/profiling/http_transport.rb +1 -26
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +3 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +3 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/extensions.rb +15 -3
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/span.rb +12 -4
- data/lib/datadog/tracing/span_event.rb +123 -3
- data/lib/datadog/tracing/span_operation.rb +6 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +24 -6
- data/lib/datadog/version.rb +1 -1
- metadata +40 -17
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
@@ -12,8 +12,11 @@ module Datadog
|
|
12
12
|
attr_reader \
|
13
13
|
:trace
|
14
14
|
|
15
|
-
|
15
|
+
# @param trace [Datadog::Trace] the trace to serialize
|
16
|
+
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
17
|
+
def initialize(trace, native_events_supported = false)
|
16
18
|
@trace = trace
|
19
|
+
@native_events_supported = native_events_supported
|
17
20
|
end
|
18
21
|
|
19
22
|
# MessagePack serializer interface. Making this object
|
@@ -26,13 +29,13 @@ module Datadog
|
|
26
29
|
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
27
30
|
def to_msgpack(packer = nil)
|
28
31
|
# As of 1.3.3, JRuby implementation doesn't pass an existing packer
|
29
|
-
trace.spans.map { |s| SerializableSpan.new(s) }.to_msgpack(packer)
|
32
|
+
trace.spans.map { |s| SerializableSpan.new(s, @native_events_supported) }.to_msgpack(packer)
|
30
33
|
end
|
31
34
|
|
32
35
|
# JSON serializer interface.
|
33
36
|
# Used by older version of the transport.
|
34
37
|
def to_json(*args)
|
35
|
-
trace.spans.map { |s| SerializableSpan.new(s).to_hash }.to_json(*args)
|
38
|
+
trace.spans.map { |s| SerializableSpan.new(s, @native_events_supported).to_hash }.to_json(*args)
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
@@ -41,9 +44,12 @@ module Datadog
|
|
41
44
|
attr_reader \
|
42
45
|
:span
|
43
46
|
|
44
|
-
|
47
|
+
# @param span [Datadog::Span] the span to serialize
|
48
|
+
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
49
|
+
def initialize(span, native_events_supported)
|
45
50
|
@span = span
|
46
51
|
@trace_id = Tracing::Utils::TraceId.to_low_order(span.trace_id)
|
52
|
+
@native_events_supported = native_events_supported
|
47
53
|
end
|
48
54
|
|
49
55
|
# MessagePack serializer interface. Making this object
|
@@ -55,11 +61,14 @@ module Datadog
|
|
55
61
|
#
|
56
62
|
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
57
63
|
# rubocop:disable Metrics/AbcSize
|
64
|
+
# rubocop:disable Metrics/MethodLength
|
58
65
|
def to_msgpack(packer = nil)
|
59
66
|
packer ||= MessagePack::Packer.new
|
60
67
|
|
61
68
|
number_of_elements_to_write = 11
|
62
69
|
|
70
|
+
number_of_elements_to_write += 1 if span.events.any? && @native_events_supported
|
71
|
+
|
63
72
|
if span.stopped?
|
64
73
|
packer.write_map_header(number_of_elements_to_write + 2) # Set header with how many elements in the map
|
65
74
|
|
@@ -72,8 +81,16 @@ module Datadog
|
|
72
81
|
packer.write_map_header(number_of_elements_to_write) # Set header with how many elements in the map
|
73
82
|
end
|
74
83
|
|
75
|
-
|
76
|
-
|
84
|
+
if span.events.any?
|
85
|
+
if @native_events_supported
|
86
|
+
# Use top-level field for native events
|
87
|
+
packer.write('span_events')
|
88
|
+
packer.write(span.events.map(&:to_native_format))
|
89
|
+
else
|
90
|
+
# Serialize span events as meta tags
|
91
|
+
span.set_tag('events', span.events.map(&:to_hash).to_json)
|
92
|
+
end
|
93
|
+
end
|
77
94
|
|
78
95
|
# DEV: We use strings as keys here, instead of symbols, as
|
79
96
|
# DEV: MessagePack will ultimately convert them to strings.
|
@@ -103,6 +120,7 @@ module Datadog
|
|
103
120
|
packer
|
104
121
|
end
|
105
122
|
# rubocop:enable Metrics/AbcSize
|
123
|
+
# rubocop:enable Metrics/MethodLength
|
106
124
|
|
107
125
|
# JSON serializer interface.
|
108
126
|
# Used by older version of the transport.
|
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.10.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:
|
11
|
+
date: 2025-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: libddwaf
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 14.3.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'
|
69
83
|
description: |
|
70
84
|
datadog is Datadog's client library for Ruby. It includes a suite of tools
|
71
85
|
which provide visibility into the performance and security of Ruby applications,
|
@@ -130,6 +144,8 @@ files:
|
|
130
144
|
- ext/datadog_profiling_native_extension/stack_recorder.h
|
131
145
|
- ext/datadog_profiling_native_extension/time_helpers.c
|
132
146
|
- ext/datadog_profiling_native_extension/time_helpers.h
|
147
|
+
- ext/datadog_profiling_native_extension/unsafe_api_calls_check.c
|
148
|
+
- ext/datadog_profiling_native_extension/unsafe_api_calls_check.h
|
133
149
|
- ext/libdatadog_api/crashtracker.c
|
134
150
|
- ext/libdatadog_api/datadog_ruby_common.c
|
135
151
|
- ext/libdatadog_api/datadog_ruby_common.h
|
@@ -138,6 +154,7 @@ files:
|
|
138
154
|
- ext/libdatadog_extconf_helpers.rb
|
139
155
|
- lib/datadog.rb
|
140
156
|
- lib/datadog/appsec.rb
|
157
|
+
- lib/datadog/appsec/actions_handler.rb
|
141
158
|
- lib/datadog/appsec/assets.rb
|
142
159
|
- lib/datadog/appsec/assets/blocked.html
|
143
160
|
- lib/datadog/appsec/assets/blocked.json
|
@@ -151,6 +168,7 @@ files:
|
|
151
168
|
- lib/datadog/appsec/component.rb
|
152
169
|
- lib/datadog/appsec/configuration.rb
|
153
170
|
- lib/datadog/appsec/configuration/settings.rb
|
171
|
+
- lib/datadog/appsec/context.rb
|
154
172
|
- lib/datadog/appsec/contrib/active_record/instrumentation.rb
|
155
173
|
- lib/datadog/appsec/contrib/active_record/integration.rb
|
156
174
|
- lib/datadog/appsec/contrib/active_record/patcher.rb
|
@@ -192,7 +210,6 @@ files:
|
|
192
210
|
- lib/datadog/appsec/contrib/rails/reactive/action.rb
|
193
211
|
- lib/datadog/appsec/contrib/rails/request.rb
|
194
212
|
- lib/datadog/appsec/contrib/rails/request_middleware.rb
|
195
|
-
- lib/datadog/appsec/contrib/sinatra/ext.rb
|
196
213
|
- lib/datadog/appsec/contrib/sinatra/framework.rb
|
197
214
|
- lib/datadog/appsec/contrib/sinatra/gateway/request.rb
|
198
215
|
- lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb
|
@@ -207,22 +224,26 @@ files:
|
|
207
224
|
- lib/datadog/appsec/instrumentation.rb
|
208
225
|
- lib/datadog/appsec/instrumentation/gateway.rb
|
209
226
|
- lib/datadog/appsec/instrumentation/gateway/argument.rb
|
227
|
+
- lib/datadog/appsec/metrics.rb
|
228
|
+
- lib/datadog/appsec/metrics/collector.rb
|
229
|
+
- lib/datadog/appsec/metrics/exporter.rb
|
230
|
+
- lib/datadog/appsec/metrics/telemetry.rb
|
210
231
|
- lib/datadog/appsec/monitor.rb
|
211
232
|
- lib/datadog/appsec/monitor/gateway/watcher.rb
|
212
233
|
- lib/datadog/appsec/monitor/reactive/set_user.rb
|
213
234
|
- lib/datadog/appsec/processor.rb
|
214
|
-
- lib/datadog/appsec/processor/context.rb
|
215
235
|
- lib/datadog/appsec/processor/rule_loader.rb
|
216
236
|
- lib/datadog/appsec/processor/rule_merger.rb
|
217
237
|
- lib/datadog/appsec/rate_limiter.rb
|
218
238
|
- lib/datadog/appsec/reactive/address_hash.rb
|
219
239
|
- lib/datadog/appsec/reactive/engine.rb
|
220
|
-
- lib/datadog/appsec/reactive/operation.rb
|
221
240
|
- lib/datadog/appsec/reactive/subscriber.rb
|
222
241
|
- lib/datadog/appsec/remote.rb
|
223
242
|
- lib/datadog/appsec/response.rb
|
224
243
|
- lib/datadog/appsec/sample_rate.rb
|
225
|
-
- lib/datadog/appsec/
|
244
|
+
- lib/datadog/appsec/security_engine.rb
|
245
|
+
- lib/datadog/appsec/security_engine/result.rb
|
246
|
+
- lib/datadog/appsec/security_engine/runner.rb
|
226
247
|
- lib/datadog/appsec/utils.rb
|
227
248
|
- lib/datadog/appsec/utils/http.rb
|
228
249
|
- lib/datadog/appsec/utils/http/media_range.rb
|
@@ -244,7 +265,7 @@ files:
|
|
244
265
|
- lib/datadog/core/configuration/option_definition.rb
|
245
266
|
- lib/datadog/core/configuration/options.rb
|
246
267
|
- lib/datadog/core/configuration/settings.rb
|
247
|
-
- lib/datadog/core/
|
268
|
+
- lib/datadog/core/contrib/rails/utils.rb
|
248
269
|
- lib/datadog/core/crashtracking/component.rb
|
249
270
|
- lib/datadog/core/crashtracking/tag_builder.rb
|
250
271
|
- lib/datadog/core/deprecations.rb
|
@@ -365,15 +386,18 @@ files:
|
|
365
386
|
- lib/datadog/core/workers/queue.rb
|
366
387
|
- lib/datadog/core/workers/runtime_metrics.rb
|
367
388
|
- lib/datadog/di.rb
|
389
|
+
- lib/datadog/di/base.rb
|
368
390
|
- lib/datadog/di/code_tracker.rb
|
369
391
|
- lib/datadog/di/component.rb
|
370
392
|
- lib/datadog/di/configuration.rb
|
371
393
|
- lib/datadog/di/configuration/settings.rb
|
394
|
+
- lib/datadog/di/contrib.rb
|
372
395
|
- lib/datadog/di/contrib/active_record.rb
|
396
|
+
- lib/datadog/di/contrib/railtie.rb
|
373
397
|
- lib/datadog/di/error.rb
|
374
398
|
- lib/datadog/di/extensions.rb
|
375
|
-
- lib/datadog/di/init.rb
|
376
399
|
- lib/datadog/di/instrumenter.rb
|
400
|
+
- lib/datadog/di/preload.rb
|
377
401
|
- lib/datadog/di/probe.rb
|
378
402
|
- lib/datadog/di/probe_builder.rb
|
379
403
|
- lib/datadog/di/probe_manager.rb
|
@@ -726,7 +750,6 @@ files:
|
|
726
750
|
- lib/datadog/tracing/contrib/rails/patcher.rb
|
727
751
|
- lib/datadog/tracing/contrib/rails/railtie.rb
|
728
752
|
- lib/datadog/tracing/contrib/rails/runner.rb
|
729
|
-
- lib/datadog/tracing/contrib/rails/utils.rb
|
730
753
|
- lib/datadog/tracing/contrib/rake/configuration/settings.rb
|
731
754
|
- lib/datadog/tracing/contrib/rake/ext.rb
|
732
755
|
- lib/datadog/tracing/contrib/rake/instrumentation.rb
|
@@ -902,9 +925,9 @@ licenses:
|
|
902
925
|
- Apache-2.0
|
903
926
|
metadata:
|
904
927
|
allowed_push_host: https://rubygems.org
|
905
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
906
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
907
|
-
post_install_message:
|
928
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.10.0/CHANGELOG.md
|
929
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.10.0
|
930
|
+
post_install_message:
|
908
931
|
rdoc_options: []
|
909
932
|
require_paths:
|
910
933
|
- lib
|
@@ -922,8 +945,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
922
945
|
- !ruby/object:Gem::Version
|
923
946
|
version: 2.0.0
|
924
947
|
requirements: []
|
925
|
-
rubygems_version: 3.
|
926
|
-
signing_key:
|
948
|
+
rubygems_version: 3.5.22
|
949
|
+
signing_key:
|
927
950
|
specification_version: 4
|
928
951
|
summary: Datadog tracing code for your Ruby applications
|
929
952
|
test_files: []
|
@@ -1,107 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
class Processor
|
6
|
-
# Context manages a sequence of runs
|
7
|
-
class Context
|
8
|
-
LIBDDWAF_SUCCESSFUL_EXECUTION_CODES = [:ok, :match].freeze
|
9
|
-
|
10
|
-
attr_reader :time_ns, :time_ext_ns, :timeouts, :events
|
11
|
-
|
12
|
-
def initialize(handle, telemetry:)
|
13
|
-
@context = WAF::Context.new(handle)
|
14
|
-
@telemetry = telemetry
|
15
|
-
|
16
|
-
@time_ns = 0.0
|
17
|
-
@time_ext_ns = 0.0
|
18
|
-
@timeouts = 0
|
19
|
-
@events = []
|
20
|
-
@run_mutex = Mutex.new
|
21
|
-
|
22
|
-
@libddwaf_debug_tag = "libddwaf:#{WAF::VERSION::STRING} method:ddwaf_run"
|
23
|
-
end
|
24
|
-
|
25
|
-
def run(persistent_data, ephemeral_data, timeout = WAF::LibDDWAF::DDWAF_RUN_TIMEOUT)
|
26
|
-
@run_mutex.lock
|
27
|
-
|
28
|
-
start_ns = Core::Utils::Time.get_time(:nanosecond)
|
29
|
-
|
30
|
-
persistent_data.reject! do |_, v|
|
31
|
-
next false if v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
32
|
-
|
33
|
-
v.nil? ? true : v.empty?
|
34
|
-
end
|
35
|
-
|
36
|
-
ephemeral_data.reject! do |_, v|
|
37
|
-
next false if v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
38
|
-
|
39
|
-
v.nil? ? true : v.empty?
|
40
|
-
end
|
41
|
-
|
42
|
-
_code, result = try_run(persistent_data, ephemeral_data, timeout)
|
43
|
-
|
44
|
-
stop_ns = Core::Utils::Time.get_time(:nanosecond)
|
45
|
-
|
46
|
-
# these updates are not thread safe and should be protected
|
47
|
-
@time_ns += result.total_runtime
|
48
|
-
@time_ext_ns += (stop_ns - start_ns)
|
49
|
-
@timeouts += 1 if result.timeout
|
50
|
-
|
51
|
-
report_execution(result)
|
52
|
-
result
|
53
|
-
ensure
|
54
|
-
@run_mutex.unlock
|
55
|
-
end
|
56
|
-
|
57
|
-
def extract_schema
|
58
|
-
return unless extract_schema?
|
59
|
-
|
60
|
-
input = {
|
61
|
-
'waf.context.processor' => {
|
62
|
-
'extract-schema' => true
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
_code, result = try_run(input, {}, WAF::LibDDWAF::DDWAF_RUN_TIMEOUT)
|
67
|
-
|
68
|
-
report_execution(result)
|
69
|
-
result
|
70
|
-
end
|
71
|
-
|
72
|
-
def finalize
|
73
|
-
@context.finalize
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
def try_run(persistent_data, ephemeral_data, timeout)
|
79
|
-
@context.run(persistent_data, ephemeral_data, timeout)
|
80
|
-
rescue WAF::LibDDWAF::Error => e
|
81
|
-
Datadog.logger.debug { "#{@libddwaf_debug_tag} execution error: #{e} backtrace: #{e.backtrace&.first(3)}" }
|
82
|
-
@telemetry.report(e, description: 'libddwaf-rb internal low-level error')
|
83
|
-
|
84
|
-
[:err_internal, WAF::Result.new(:err_internal, [], 0.0, false, [], [])]
|
85
|
-
end
|
86
|
-
|
87
|
-
def report_execution(result)
|
88
|
-
Datadog.logger.debug { "#{@libddwaf_debug_tag} execution timed out: #{result.inspect}" } if result.timeout
|
89
|
-
|
90
|
-
if LIBDDWAF_SUCCESSFUL_EXECUTION_CODES.include?(result.status)
|
91
|
-
Datadog.logger.debug { "#{@libddwaf_debug_tag} execution result: #{result.inspect}" }
|
92
|
-
else
|
93
|
-
message = "#{@libddwaf_debug_tag} execution error: #{result.status.inspect}"
|
94
|
-
|
95
|
-
Datadog.logger.debug { message }
|
96
|
-
@telemetry.error(message)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def extract_schema?
|
101
|
-
Datadog.configuration.appsec.api_security.enabled &&
|
102
|
-
Datadog.configuration.appsec.api_security.sample_rate.sample?
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'engine'
|
4
|
-
|
5
|
-
module Datadog
|
6
|
-
module AppSec
|
7
|
-
module Reactive
|
8
|
-
# Reactive Engine nested operation tracking
|
9
|
-
class Operation
|
10
|
-
attr_reader :reactive,
|
11
|
-
:parent,
|
12
|
-
:name
|
13
|
-
|
14
|
-
def initialize(name, parent = nil, reactive_engine = nil)
|
15
|
-
Datadog.logger.debug { "operation: #{name} initialize" }
|
16
|
-
@name = name
|
17
|
-
@parent = parent
|
18
|
-
@reactive = select_reactive_engine(reactive_engine, parent)
|
19
|
-
|
20
|
-
# TODO: concurrent store
|
21
|
-
# TODO: constant
|
22
|
-
Thread.current[:datadog_security_active_operation] = self
|
23
|
-
|
24
|
-
yield self if block_given?
|
25
|
-
ensure
|
26
|
-
finalize
|
27
|
-
end
|
28
|
-
|
29
|
-
# TODO: use structs instead of an arg splat
|
30
|
-
def subscribe(*addresses, &block)
|
31
|
-
reactive.subscribe(*addresses, &block)
|
32
|
-
end
|
33
|
-
|
34
|
-
def publish(address, data)
|
35
|
-
reactive.publish(address, data)
|
36
|
-
end
|
37
|
-
|
38
|
-
def finalize
|
39
|
-
Datadog.logger.debug { "operation: #{name} finalize" }
|
40
|
-
Thread.current[:datadog_security_active_operation] = parent
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def select_reactive_engine(reactive, parent)
|
46
|
-
return reactive if reactive
|
47
|
-
|
48
|
-
return parent.reactive unless parent.nil?
|
49
|
-
|
50
|
-
Reactive::Engine.new
|
51
|
-
end
|
52
|
-
|
53
|
-
class << self
|
54
|
-
def active
|
55
|
-
Thread.current[:datadog_security_active_operation]
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# For testing only.
|
61
|
-
def reset!
|
62
|
-
Thread.current[:datadog_security_active_operation] = nil
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
data/lib/datadog/appsec/scope.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
# Capture context essential to consistently call processor and report via traces
|
6
|
-
class Scope
|
7
|
-
attr_reader :trace, :service_entry_span, :processor_context
|
8
|
-
|
9
|
-
def initialize(trace, service_entry_span, processor_context)
|
10
|
-
@trace = trace
|
11
|
-
@service_entry_span = service_entry_span
|
12
|
-
@processor_context = processor_context
|
13
|
-
end
|
14
|
-
|
15
|
-
def finalize
|
16
|
-
@processor_context.finalize
|
17
|
-
end
|
18
|
-
|
19
|
-
class << self
|
20
|
-
def activate_scope(trace, service_entry_span, processor)
|
21
|
-
raise ActiveScopeError, 'another scope is active, nested scopes are not supported' if active_scope
|
22
|
-
|
23
|
-
context = processor.new_context
|
24
|
-
self.active_scope = new(trace, service_entry_span, context)
|
25
|
-
end
|
26
|
-
|
27
|
-
def deactivate_scope
|
28
|
-
raise InactiveScopeError, 'no scope is active, nested scopes are not supported' unless active_scope
|
29
|
-
|
30
|
-
scope = active_scope
|
31
|
-
|
32
|
-
reset_active_scope
|
33
|
-
|
34
|
-
scope.finalize
|
35
|
-
end
|
36
|
-
|
37
|
-
def active_scope
|
38
|
-
Thread.current[:datadog_appsec_active_scope]
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def active_scope=(scope)
|
44
|
-
raise ArgumentError, 'not a Datadog::AppSec::Scope' unless scope.instance_of?(Scope)
|
45
|
-
|
46
|
-
Thread.current[:datadog_appsec_active_scope] = scope
|
47
|
-
end
|
48
|
-
|
49
|
-
def reset_active_scope
|
50
|
-
Thread.current[:datadog_appsec_active_scope] = nil
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class InactiveScopeError < StandardError; end
|
55
|
-
class ActiveScopeError < StandardError; end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../configuration/ext'
|
4
|
-
|
5
|
-
module Datadog
|
6
|
-
module Core
|
7
|
-
module Crashtracking
|
8
|
-
# This module provides a method to resolve the base URL of the agent
|
9
|
-
module AgentBaseUrl
|
10
|
-
def self.resolve(agent_settings)
|
11
|
-
case agent_settings.adapter
|
12
|
-
when Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
13
|
-
"#{agent_settings.ssl ? 'https' : 'http'}://#{agent_settings.hostname}:#{agent_settings.port}/"
|
14
|
-
when Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
|
15
|
-
"unix://#{agent_settings.uds_path}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|