datadog 2.15.0 → 2.16.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 +46 -2
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +3 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +8 -1
- data/ext/libdatadog_api/crashtracker.c +1 -9
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +7 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/lib/datadog/appsec/actions_handler.rb +3 -2
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +1344 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +1344 -0
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +11 -4
- data/lib/datadog/appsec/configuration/settings.rb +31 -18
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +2 -3
- data/lib/datadog/appsec/contrib/devise/ext.rb +1 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patcher.rb +3 -5
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +17 -4
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +22 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +16 -16
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +85 -95
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +5 -2
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +42 -12
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -28
- data/lib/datadog/appsec/processor/rule_merger.rb +5 -5
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/remote.rb +14 -13
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/runner.rb +1 -1
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +19 -10
- data/lib/datadog/core/configuration/option.rb +61 -25
- data/lib/datadog/core/configuration/settings.rb +10 -0
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +24 -0
- data/lib/datadog/core/crashtracking/component.rb +1 -9
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +8 -7
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/remote/client.rb +7 -0
- data/lib/datadog/core/runtime/metrics.rb +1 -1
- data/lib/datadog/core/telemetry/component.rb +60 -50
- data/lib/datadog/core/telemetry/emitter.rb +17 -11
- data/lib/datadog/core/telemetry/event.rb +7 -4
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/request.rb +3 -3
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +52 -0
- data/lib/datadog/core/telemetry/worker.rb +45 -0
- data/lib/datadog/core/utils/time.rb +12 -0
- data/lib/datadog/core/workers/async.rb +20 -2
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di.rb +5 -32
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/identity.rb +1 -1
- data/lib/datadog/profiling/exporter.rb +1 -1
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/datadog.rb +2 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/span_operation.rb +38 -14
- data/lib/datadog/tracing/trace_operation.rb +15 -7
- data/lib/datadog/tracing/tracer.rb +7 -3
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +2 -3
- metadata +34 -8
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -55,7 +55,7 @@ module Datadog
|
|
55
55
|
span_id = Helpers.parse_hex_id(fetcher[@span_id_key])
|
56
56
|
|
57
57
|
# Return early if this propagation is not valid
|
58
|
-
return if span_id.nil? || span_id <= 0 || span_id
|
58
|
+
return if span_id.nil? || span_id <= 0 || span_id > Tracing::Utils::EXTERNAL_MAX_ID
|
59
59
|
|
60
60
|
# We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
|
61
61
|
sampling_priority = Helpers.parse_decimal_id(fetcher[@sampled_key])
|
@@ -54,7 +54,7 @@ module Datadog
|
|
54
54
|
|
55
55
|
span_id = Helpers.parse_hex_id(parts[1]) if parts.length > 1
|
56
56
|
# Return early if this propagation is not valid
|
57
|
-
return if span_id.nil? || span_id <= 0 || span_id
|
57
|
+
return if span_id.nil? || span_id <= 0 || span_id > Tracing::Utils::EXTERNAL_MAX_ID
|
58
58
|
|
59
59
|
sampling_priority = Helpers.parse_decimal_id(parts[2]) if parts.length > 2
|
60
60
|
|
@@ -89,7 +89,7 @@ module Datadog
|
|
89
89
|
trace_id = Helpers.parse_decimal_id(fetcher_object[@trace_id_key])
|
90
90
|
|
91
91
|
return unless trace_id
|
92
|
-
return if trace_id <= 0 || trace_id
|
92
|
+
return if trace_id <= 0 || trace_id > Tracing::Utils::EXTERNAL_MAX_ID
|
93
93
|
|
94
94
|
trace_id
|
95
95
|
end
|
@@ -98,7 +98,7 @@ module Datadog
|
|
98
98
|
parent_id = Helpers.parse_decimal_id(fetcher_object[@parent_id_key])
|
99
99
|
|
100
100
|
return unless parent_id
|
101
|
-
return if parent_id <= 0 || parent_id
|
101
|
+
return if parent_id <= 0 || parent_id > Tracing::Utils::EXTERNAL_MAX_ID
|
102
102
|
|
103
103
|
parent_id
|
104
104
|
end
|
@@ -9,6 +9,7 @@ module Datadog
|
|
9
9
|
# {Datadog::Tracing::Sampling::RateSampler} is based on a sample rate.
|
10
10
|
class RateSampler < Sampler
|
11
11
|
KNUTH_FACTOR = 1111111111111111111
|
12
|
+
UINT64_MODULO = (1 << 64)
|
12
13
|
|
13
14
|
# Initialize a {Datadog::Tracing::Sampling::RateSampler}.
|
14
15
|
# This sampler keeps a random subset of the traces. Its main purpose is to
|
@@ -39,7 +40,7 @@ module Datadog
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def sample?(trace)
|
42
|
-
((trace.id * KNUTH_FACTOR) %
|
43
|
+
((trace.id * KNUTH_FACTOR) % UINT64_MODULO) <= @sampling_id_threshold
|
43
44
|
end
|
44
45
|
|
45
46
|
def sample!(trace)
|
@@ -28,6 +28,7 @@ module Datadog
|
|
28
28
|
# Span attributes
|
29
29
|
# NOTE: In the future, we should drop the me
|
30
30
|
attr_reader \
|
31
|
+
:logger,
|
31
32
|
:end_time,
|
32
33
|
:id,
|
33
34
|
:name,
|
@@ -37,10 +38,12 @@ module Datadog
|
|
37
38
|
:start_time,
|
38
39
|
:trace_id,
|
39
40
|
:type
|
41
|
+
|
40
42
|
attr_accessor :links, :status, :span_events
|
41
43
|
|
42
44
|
def initialize(
|
43
45
|
name,
|
46
|
+
logger: Datadog.logger,
|
44
47
|
events: nil,
|
45
48
|
on_error: nil,
|
46
49
|
parent_id: 0,
|
@@ -54,6 +57,8 @@ module Datadog
|
|
54
57
|
span_events: nil,
|
55
58
|
id: nil
|
56
59
|
)
|
60
|
+
@logger = logger
|
61
|
+
|
57
62
|
# Ensure dynamically created strings are UTF-8 encoded.
|
58
63
|
#
|
59
64
|
# All strings created in Ruby land are UTF-8. The only sources of non-UTF-8 string are:
|
@@ -90,11 +95,17 @@ module Datadog
|
|
90
95
|
set_tags(tags) if tags
|
91
96
|
|
92
97
|
# Some other SpanOperation-specific behavior
|
93
|
-
@events = events || Events.new
|
98
|
+
@events = events || Events.new(logger: logger)
|
94
99
|
@span = nil
|
95
100
|
|
96
|
-
|
97
|
-
|
101
|
+
if on_error.nil?
|
102
|
+
# Nothing, default error handler is already set up.
|
103
|
+
elsif on_error.is_a?(Proc)
|
104
|
+
# Subscribe :on_error event
|
105
|
+
@events.on_error.wrap_default(&on_error)
|
106
|
+
else
|
107
|
+
logger.warn("on_error argument to SpanOperation ignored because is not a Proc: #{on_error}")
|
108
|
+
end
|
98
109
|
|
99
110
|
# Start the span with start time, if given.
|
100
111
|
start(start_time) if start_time
|
@@ -130,6 +141,10 @@ module Datadog
|
|
130
141
|
@resource = resource.nil? ? nil : Core::Utils.utf8_encode(resource) # Allow this to be explicitly set to nil
|
131
142
|
end
|
132
143
|
|
144
|
+
def get_collector_or_initialize
|
145
|
+
@collector ||= yield
|
146
|
+
end
|
147
|
+
|
133
148
|
def measure
|
134
149
|
raise ArgumentError, 'Must provide block to measure!' unless block_given?
|
135
150
|
# TODO: Should we just invoke the block and skip tracing instead?
|
@@ -143,7 +158,7 @@ module Datadog
|
|
143
158
|
begin
|
144
159
|
start
|
145
160
|
rescue StandardError => e
|
146
|
-
|
161
|
+
logger.debug { "Failed to start span: #{e}" }
|
147
162
|
ensure
|
148
163
|
# We should yield to the provided block when possible, as this
|
149
164
|
# block is application code that we don't want to hinder.
|
@@ -161,7 +176,7 @@ module Datadog
|
|
161
176
|
# Stop the span first, so timing is a more accurate.
|
162
177
|
# If the span failed to start, timing may be inaccurate,
|
163
178
|
# but this is not really a serious concern.
|
164
|
-
stop
|
179
|
+
stop(exception: e)
|
165
180
|
|
166
181
|
# Trigger the on_error event
|
167
182
|
events.on_error.publish(self, e)
|
@@ -202,7 +217,7 @@ module Datadog
|
|
202
217
|
#
|
203
218
|
# steep:ignore:start
|
204
219
|
# Steep issue fixed in https://github.com/soutaro/steep/pull/1467
|
205
|
-
def stop(stop_time = nil)
|
220
|
+
def stop(stop_time = nil, exception: nil)
|
206
221
|
# A span should not be stopped twice. Note that this is not thread-safe,
|
207
222
|
# stop is called from multiple threads, a given span might be stopped
|
208
223
|
# several times. Again, one should not do this, so this test is more a
|
@@ -220,7 +235,7 @@ module Datadog
|
|
220
235
|
@duration_end = stop_time.nil? ? duration_marker : nil
|
221
236
|
|
222
237
|
# Trigger after_stop event
|
223
|
-
events.after_stop.publish(self)
|
238
|
+
events.after_stop.publish(self, exception)
|
224
239
|
|
225
240
|
self
|
226
241
|
end
|
@@ -236,6 +251,10 @@ module Datadog
|
|
236
251
|
!@end_time.nil?
|
237
252
|
end
|
238
253
|
|
254
|
+
def root?
|
255
|
+
parent_id == 0
|
256
|
+
end
|
257
|
+
|
239
258
|
# for backwards compatibility
|
240
259
|
def start_time=(time)
|
241
260
|
time.tap { start(time) }
|
@@ -349,11 +368,13 @@ module Datadog
|
|
349
368
|
DEFAULT_ON_ERROR = proc { |span_op, error| span_op.set_error(error) unless span_op.nil? }
|
350
369
|
|
351
370
|
attr_reader \
|
371
|
+
:logger,
|
352
372
|
:after_finish,
|
353
373
|
:after_stop,
|
354
374
|
:before_start
|
355
375
|
|
356
|
-
def initialize(on_error: nil)
|
376
|
+
def initialize(logger: Datadog.logger, on_error: nil)
|
377
|
+
@logger = logger
|
357
378
|
@after_finish = AfterFinish.new
|
358
379
|
@after_stop = AfterStop.new
|
359
380
|
@before_start = BeforeStart.new
|
@@ -362,7 +383,7 @@ module Datadog
|
|
362
383
|
# This event is lazily initialized as error paths
|
363
384
|
# are normally less common that non-error paths.
|
364
385
|
def on_error
|
365
|
-
@on_error ||= OnError.new(DEFAULT_ON_ERROR)
|
386
|
+
@on_error ||= OnError.new(DEFAULT_ON_ERROR, logger: logger)
|
366
387
|
end
|
367
388
|
|
368
389
|
# Triggered when the span is finished, regardless of error.
|
@@ -388,10 +409,13 @@ module Datadog
|
|
388
409
|
|
389
410
|
# Triggered when the span raises an error during measurement.
|
390
411
|
class OnError
|
391
|
-
def initialize(default)
|
412
|
+
def initialize(default, logger: Datadog.logger)
|
392
413
|
@handler = default
|
414
|
+
@logger = logger
|
393
415
|
end
|
394
416
|
|
417
|
+
attr_reader :logger
|
418
|
+
|
395
419
|
# Call custom error handler but fallback to default behavior on failure.
|
396
420
|
|
397
421
|
# DEV: Revisit this before full 1.0 release.
|
@@ -405,9 +429,9 @@ module Datadog
|
|
405
429
|
begin
|
406
430
|
yield(op, error)
|
407
431
|
rescue StandardError => e
|
408
|
-
|
432
|
+
logger.debug do
|
409
433
|
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
410
|
-
Cause: #{e.class
|
434
|
+
Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
411
435
|
end
|
412
436
|
|
413
437
|
original.call(op, error) if original
|
@@ -419,8 +443,8 @@ module Datadog
|
|
419
443
|
begin
|
420
444
|
@handler.call(*args)
|
421
445
|
rescue StandardError => e
|
422
|
-
|
423
|
-
"Error in on_error handler '#{@default}': #{e.class
|
446
|
+
logger.debug do
|
447
|
+
"Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
|
424
448
|
end
|
425
449
|
end
|
426
450
|
|
@@ -40,6 +40,7 @@ module Datadog
|
|
40
40
|
:baggage
|
41
41
|
|
42
42
|
attr_reader \
|
43
|
+
:logger,
|
43
44
|
:active_span_count,
|
44
45
|
:active_span,
|
45
46
|
:id,
|
@@ -55,6 +56,7 @@ module Datadog
|
|
55
56
|
:service
|
56
57
|
|
57
58
|
def initialize(
|
59
|
+
logger: Datadog.logger,
|
58
60
|
agent_sample_rate: nil,
|
59
61
|
events: nil,
|
60
62
|
hostname: nil,
|
@@ -79,8 +81,9 @@ module Datadog
|
|
79
81
|
remote_parent: false,
|
80
82
|
tracer: nil,
|
81
83
|
baggage: nil
|
82
|
-
|
83
84
|
)
|
85
|
+
@logger = logger
|
86
|
+
|
84
87
|
# Attributes
|
85
88
|
@id = id || Tracing::Utils::TraceId.next_id
|
86
89
|
@max_length = max_length || DEFAULT_MAX_LENGTH
|
@@ -204,6 +207,7 @@ module Datadog
|
|
204
207
|
|
205
208
|
def measure(
|
206
209
|
op_name,
|
210
|
+
logger: Datadog.logger,
|
207
211
|
events: nil,
|
208
212
|
on_error: nil,
|
209
213
|
resource: nil,
|
@@ -217,7 +221,9 @@ module Datadog
|
|
217
221
|
# Don't allow more span measurements if the
|
218
222
|
# trace is already completed. Prevents multiple
|
219
223
|
# root spans with parent_span_id = 0.
|
220
|
-
return yield(
|
224
|
+
return yield( # rubocop:disable Style/MultilineIfModifier
|
225
|
+
SpanOperation.new(op_name, logger: logger),
|
226
|
+
TraceOperation.new(logger: logger)) if finished? || full?
|
221
227
|
|
222
228
|
# Create new span
|
223
229
|
span_op = build_span(
|
@@ -238,6 +244,7 @@ module Datadog
|
|
238
244
|
|
239
245
|
def build_span(
|
240
246
|
op_name,
|
247
|
+
logger: Datadog.logger,
|
241
248
|
events: nil,
|
242
249
|
on_error: nil,
|
243
250
|
resource: nil,
|
@@ -259,7 +266,7 @@ module Datadog
|
|
259
266
|
parent_id = parent ? parent.id : @parent_span_id || 0
|
260
267
|
|
261
268
|
# Build events
|
262
|
-
events ||= SpanOperation::Events.new
|
269
|
+
events ||= SpanOperation::Events.new(logger: logger)
|
263
270
|
|
264
271
|
# Before start: activate the span, publish events.
|
265
272
|
events.before_start.subscribe do |span_op|
|
@@ -274,6 +281,7 @@ module Datadog
|
|
274
281
|
# Build a new span operation
|
275
282
|
SpanOperation.new(
|
276
283
|
op_name,
|
284
|
+
logger: logger,
|
277
285
|
events: events,
|
278
286
|
on_error: on_error,
|
279
287
|
parent_id: parent_id,
|
@@ -286,10 +294,10 @@ module Datadog
|
|
286
294
|
id: id
|
287
295
|
)
|
288
296
|
rescue StandardError => e
|
289
|
-
|
297
|
+
logger.debug { "Failed to build new span: #{e}" }
|
290
298
|
|
291
299
|
# Return dummy span
|
292
|
-
SpanOperation.new(op_name)
|
300
|
+
SpanOperation.new(op_name, logger: logger)
|
293
301
|
end
|
294
302
|
end
|
295
303
|
|
@@ -465,7 +473,7 @@ module Datadog
|
|
465
473
|
# Publish :span_before_start event
|
466
474
|
events.span_before_start.publish(span_op, self)
|
467
475
|
rescue StandardError => e
|
468
|
-
|
476
|
+
logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
469
477
|
end
|
470
478
|
end
|
471
479
|
|
@@ -489,7 +497,7 @@ module Datadog
|
|
489
497
|
# Publish :trace_finished event
|
490
498
|
events.trace_finished.publish(self) if finished?
|
491
499
|
rescue StandardError => e
|
492
|
-
|
500
|
+
logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
493
501
|
end
|
494
502
|
end
|
495
503
|
|
@@ -342,6 +342,7 @@ module Datadog
|
|
342
342
|
digest.trace_sampling_priority
|
343
343
|
end
|
344
344
|
TraceOperation.new(
|
345
|
+
logger: logger,
|
345
346
|
hostname: hostname,
|
346
347
|
profiling_enabled: profiling_enabled,
|
347
348
|
apm_tracing_enabled: apm_tracing_enabled,
|
@@ -359,6 +360,7 @@ module Datadog
|
|
359
360
|
)
|
360
361
|
else
|
361
362
|
TraceOperation.new(
|
363
|
+
logger: logger,
|
362
364
|
hostname: hostname,
|
363
365
|
profiling_enabled: profiling_enabled,
|
364
366
|
apm_tracing_enabled: apm_tracing_enabled,
|
@@ -410,12 +412,13 @@ module Datadog
|
|
410
412
|
)
|
411
413
|
trace = _trace || start_trace(continue_from: continue_from)
|
412
414
|
|
413
|
-
events = SpanOperation::Events.new
|
415
|
+
events = SpanOperation::Events.new(logger: logger)
|
414
416
|
|
415
417
|
if block
|
416
418
|
# Ignore start time if a block has been given
|
417
419
|
trace.measure(
|
418
420
|
name,
|
421
|
+
logger: logger,
|
419
422
|
events: events,
|
420
423
|
on_error: on_error,
|
421
424
|
resource: resource,
|
@@ -429,6 +432,7 @@ module Datadog
|
|
429
432
|
# Return the new span
|
430
433
|
span = trace.build_span(
|
431
434
|
name,
|
435
|
+
logger: logger,
|
432
436
|
events: events,
|
433
437
|
on_error: on_error,
|
434
438
|
resource: resource,
|
@@ -541,10 +545,10 @@ module Datadog
|
|
541
545
|
|
542
546
|
# TODO: Make these dummy objects singletons to preserve memory.
|
543
547
|
def skip_trace(name)
|
544
|
-
span = SpanOperation.new(name)
|
548
|
+
span = SpanOperation.new(name, logger: logger)
|
545
549
|
|
546
550
|
if block_given?
|
547
|
-
trace = TraceOperation.new
|
551
|
+
trace = TraceOperation.new(logger: logger)
|
548
552
|
yield(span, trace)
|
549
553
|
else
|
550
554
|
span
|
@@ -24,7 +24,7 @@ module Datadog
|
|
24
24
|
|
25
25
|
# While we only generate 63-bit integers due to limitations in other languages, we support
|
26
26
|
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
27
|
-
EXTERNAL_MAX_ID = 1 << 64
|
27
|
+
EXTERNAL_MAX_ID = (1 << 64) - 1
|
28
28
|
|
29
29
|
# We use a custom random number generator because we want no interference
|
30
30
|
# with the default one. Using the default prng, we could break code that
|
data/lib/datadog/version.rb
CHANGED
data/lib/datadog.rb
CHANGED
@@ -7,7 +7,6 @@ require_relative 'datadog/tracing/contrib'
|
|
7
7
|
# Load other products (must follow tracing)
|
8
8
|
require_relative 'datadog/profiling'
|
9
9
|
require_relative 'datadog/appsec'
|
10
|
-
|
11
|
-
|
12
|
-
require_relative 'datadog/di' if RUBY_VERSION >= '2.6' && RUBY_ENGINE != 'jruby'
|
10
|
+
require_relative 'datadog/di'
|
11
|
+
require_relative 'datadog/error_tracking'
|
13
12
|
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.16.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-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -31,6 +31,9 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '3.4'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 3.4.1
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,6 +41,9 @@ dependencies:
|
|
38
41
|
- - "~>"
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '3.4'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.4.1
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: libddwaf
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,10 +152,16 @@ files:
|
|
146
152
|
- ext/datadog_profiling_native_extension/unsafe_api_calls_check.c
|
147
153
|
- ext/datadog_profiling_native_extension/unsafe_api_calls_check.h
|
148
154
|
- ext/libdatadog_api/crashtracker.c
|
155
|
+
- ext/libdatadog_api/crashtracker.h
|
149
156
|
- ext/libdatadog_api/datadog_ruby_common.c
|
150
157
|
- ext/libdatadog_api/datadog_ruby_common.h
|
151
158
|
- ext/libdatadog_api/extconf.rb
|
159
|
+
- ext/libdatadog_api/init.c
|
160
|
+
- ext/libdatadog_api/library_config.c
|
161
|
+
- ext/libdatadog_api/library_config.h
|
152
162
|
- ext/libdatadog_api/macos_development.md
|
163
|
+
- ext/libdatadog_api/process_discovery.c
|
164
|
+
- ext/libdatadog_api/process_discovery.h
|
153
165
|
- ext/libdatadog_extconf_helpers.rb
|
154
166
|
- lib/datadog.rb
|
155
167
|
- lib/datadog/appsec.rb
|
@@ -247,6 +259,7 @@ files:
|
|
247
259
|
- lib/datadog/appsec/security_engine.rb
|
248
260
|
- lib/datadog/appsec/security_engine/result.rb
|
249
261
|
- lib/datadog/appsec/security_engine/runner.rb
|
262
|
+
- lib/datadog/appsec/security_event.rb
|
250
263
|
- lib/datadog/appsec/utils.rb
|
251
264
|
- lib/datadog/appsec/utils/http.rb
|
252
265
|
- lib/datadog/appsec/utils/http/media_range.rb
|
@@ -260,6 +273,7 @@ files:
|
|
260
273
|
- lib/datadog/core/chunker.rb
|
261
274
|
- lib/datadog/core/configuration.rb
|
262
275
|
- lib/datadog/core/configuration/agent_settings_resolver.rb
|
276
|
+
- lib/datadog/core/configuration/agentless_settings_resolver.rb
|
263
277
|
- lib/datadog/core/configuration/base.rb
|
264
278
|
- lib/datadog/core/configuration/components.rb
|
265
279
|
- lib/datadog/core/configuration/ext.rb
|
@@ -267,6 +281,7 @@ files:
|
|
267
281
|
- lib/datadog/core/configuration/option_definition.rb
|
268
282
|
- lib/datadog/core/configuration/options.rb
|
269
283
|
- lib/datadog/core/configuration/settings.rb
|
284
|
+
- lib/datadog/core/configuration/stable_config.rb
|
270
285
|
- lib/datadog/core/contrib/rails/utils.rb
|
271
286
|
- lib/datadog/core/crashtracking/component.rb
|
272
287
|
- lib/datadog/core/crashtracking/tag_builder.rb
|
@@ -302,6 +317,7 @@ files:
|
|
302
317
|
- lib/datadog/core/metrics/metric.rb
|
303
318
|
- lib/datadog/core/metrics/options.rb
|
304
319
|
- lib/datadog/core/pin.rb
|
320
|
+
- lib/datadog/core/process_discovery.rb
|
305
321
|
- lib/datadog/core/rate_limiter.rb
|
306
322
|
- lib/datadog/core/remote.rb
|
307
323
|
- lib/datadog/core/remote/client.rb
|
@@ -334,16 +350,17 @@ files:
|
|
334
350
|
- lib/datadog/core/telemetry/event.rb
|
335
351
|
- lib/datadog/core/telemetry/ext.rb
|
336
352
|
- lib/datadog/core/telemetry/http/adapters/net.rb
|
337
|
-
- lib/datadog/core/telemetry/http/env.rb
|
338
|
-
- lib/datadog/core/telemetry/http/ext.rb
|
339
|
-
- lib/datadog/core/telemetry/http/response.rb
|
340
|
-
- lib/datadog/core/telemetry/http/transport.rb
|
341
353
|
- lib/datadog/core/telemetry/logger.rb
|
342
354
|
- lib/datadog/core/telemetry/logging.rb
|
343
355
|
- lib/datadog/core/telemetry/metric.rb
|
344
356
|
- lib/datadog/core/telemetry/metrics_collection.rb
|
345
357
|
- lib/datadog/core/telemetry/metrics_manager.rb
|
346
358
|
- lib/datadog/core/telemetry/request.rb
|
359
|
+
- lib/datadog/core/telemetry/transport/http.rb
|
360
|
+
- lib/datadog/core/telemetry/transport/http/api.rb
|
361
|
+
- lib/datadog/core/telemetry/transport/http/client.rb
|
362
|
+
- lib/datadog/core/telemetry/transport/http/telemetry.rb
|
363
|
+
- lib/datadog/core/telemetry/transport/telemetry.rb
|
347
364
|
- lib/datadog/core/telemetry/worker.rb
|
348
365
|
- lib/datadog/core/transport/ext.rb
|
349
366
|
- lib/datadog/core/transport/http.rb
|
@@ -391,6 +408,7 @@ files:
|
|
391
408
|
- lib/datadog/core/workers/runtime_metrics.rb
|
392
409
|
- lib/datadog/di.rb
|
393
410
|
- lib/datadog/di/base.rb
|
411
|
+
- lib/datadog/di/boot.rb
|
394
412
|
- lib/datadog/di/code_tracker.rb
|
395
413
|
- lib/datadog/di/component.rb
|
396
414
|
- lib/datadog/di/configuration.rb
|
@@ -419,6 +437,14 @@ files:
|
|
419
437
|
- lib/datadog/di/transport/http/input.rb
|
420
438
|
- lib/datadog/di/transport/input.rb
|
421
439
|
- lib/datadog/di/utils.rb
|
440
|
+
- lib/datadog/error_tracking.rb
|
441
|
+
- lib/datadog/error_tracking/collector.rb
|
442
|
+
- lib/datadog/error_tracking/component.rb
|
443
|
+
- lib/datadog/error_tracking/configuration.rb
|
444
|
+
- lib/datadog/error_tracking/configuration/settings.rb
|
445
|
+
- lib/datadog/error_tracking/ext.rb
|
446
|
+
- lib/datadog/error_tracking/extensions.rb
|
447
|
+
- lib/datadog/error_tracking/filters.rb
|
422
448
|
- lib/datadog/kit.rb
|
423
449
|
- lib/datadog/kit/appsec/events.rb
|
424
450
|
- lib/datadog/kit/enable_core_dumps.rb
|
@@ -948,8 +974,8 @@ licenses:
|
|
948
974
|
- Apache-2.0
|
949
975
|
metadata:
|
950
976
|
allowed_push_host: https://rubygems.org
|
951
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
952
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
977
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.16.0/CHANGELOG.md
|
978
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.16.0
|
953
979
|
post_install_message:
|
954
980
|
rdoc_options: []
|
955
981
|
require_paths:
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
# Data structure for an HTTP request
|
8
|
-
class Env
|
9
|
-
attr_accessor :path, :body
|
10
|
-
|
11
|
-
attr_writer :headers
|
12
|
-
|
13
|
-
def headers
|
14
|
-
@headers ||= {}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
module Ext
|
8
|
-
HEADER_DD_API_KEY = 'DD-API-KEY'
|
9
|
-
HEADER_CONTENT_TYPE = 'Content-Type'
|
10
|
-
HEADER_CONTENT_LENGTH = 'Content-Length'
|
11
|
-
HEADER_DD_TELEMETRY_API_VERSION = 'DD-Telemetry-API-Version'
|
12
|
-
HEADER_DD_TELEMETRY_REQUEST_TYPE = 'DD-Telemetry-Request-Type'
|
13
|
-
HEADER_TELEMETRY_DEBUG_ENABLED = 'DD-Telemetry-Debug-Enabled'
|
14
|
-
HEADER_CLIENT_LIBRARY_LANGUAGE = 'DD-Client-Library-Language'
|
15
|
-
HEADER_CLIENT_LIBRARY_VERSION = 'DD-Client-Library-Version'
|
16
|
-
|
17
|
-
CONTENT_TYPE_APPLICATION_JSON = 'application/json'
|
18
|
-
API_VERSION = 'v2'
|
19
|
-
|
20
|
-
AGENTLESS_HOST_PREFIX = 'instrumentation-telemetry-intake'
|
21
|
-
|
22
|
-
AGENT_ENDPOINT = '/telemetry/proxy/api/v2/apmtelemetry'
|
23
|
-
AGENTLESS_ENDPOINT = '/api/v2/apmtelemetry'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
# Module for base HTTP response
|
8
|
-
module Response
|
9
|
-
def payload
|
10
|
-
nil
|
11
|
-
end
|
12
|
-
|
13
|
-
def ok?
|
14
|
-
nil
|
15
|
-
end
|
16
|
-
|
17
|
-
def unsupported?
|
18
|
-
nil
|
19
|
-
end
|
20
|
-
|
21
|
-
def not_found?
|
22
|
-
nil
|
23
|
-
end
|
24
|
-
|
25
|
-
def client_error?
|
26
|
-
nil
|
27
|
-
end
|
28
|
-
|
29
|
-
def server_error?
|
30
|
-
nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def internal_error?
|
34
|
-
nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def code
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def inspect
|
42
|
-
"#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \
|
43
|
-
"not_found?:#{not_found?}, client_error?:#{client_error?}, " \
|
44
|
-
"server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \
|
45
|
-
"payload:#{payload}"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# A generic error response for internal errors
|
50
|
-
class InternalErrorResponse
|
51
|
-
include Response
|
52
|
-
|
53
|
-
attr_reader :error
|
54
|
-
|
55
|
-
def initialize(error)
|
56
|
-
@error = error
|
57
|
-
end
|
58
|
-
|
59
|
-
def internal_error?
|
60
|
-
true
|
61
|
-
end
|
62
|
-
|
63
|
-
def inspect
|
64
|
-
"#{super}, error_type:#{error.class} error:#{error}"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|