datadog 2.19.0 → 2.20.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 +27 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/option.rb +29 -20
- data/lib/datadog/core/configuration/option_definition.rb +2 -2
- data/lib/datadog/core/configuration/options.rb +13 -7
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di.rb +0 -1
- data/lib/datadog/kit/appsec/events/v2.rb +5 -4
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling.rb +6 -8
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -2
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +5 -4
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +5 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +9 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- metadata +15 -6
@@ -149,11 +149,11 @@ module Datadog
|
|
149
149
|
context = call_context
|
150
150
|
active_trace = context.active_trace
|
151
151
|
trace = if continue_from || active_trace.nil?
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
rescue
|
152
|
+
start_trace(continue_from: continue_from)
|
153
|
+
else
|
154
|
+
active_trace
|
155
|
+
end
|
156
|
+
rescue => e
|
157
157
|
logger.debug { "Failed to trace: #{e}" }
|
158
158
|
|
159
159
|
# Tracing failed: fallback and run code without tracing.
|
@@ -194,7 +194,6 @@ module Datadog
|
|
194
194
|
)
|
195
195
|
end
|
196
196
|
end
|
197
|
-
# rubocop:enable Metrics/MethodLength
|
198
197
|
|
199
198
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
200
199
|
# appended to each span created by the tracer. Keys and values must be strings.
|
@@ -225,7 +224,7 @@ module Datadog
|
|
225
224
|
# @return [nil] if no trace is active, and thus no span is active
|
226
225
|
def active_span(key = nil)
|
227
226
|
trace = active_trace(key)
|
228
|
-
trace
|
227
|
+
trace&.active_span
|
229
228
|
end
|
230
229
|
|
231
230
|
# Information about the currently active trace.
|
@@ -272,12 +271,10 @@ module Datadog
|
|
272
271
|
|
273
272
|
# Sample a span, tagging the trace as appropriate.
|
274
273
|
def sample_trace(trace_op)
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
280
|
-
end
|
274
|
+
@sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
|
275
|
+
rescue => e
|
276
|
+
SAMPLE_TRACE_LOG_ONLY_ONCE.run do
|
277
|
+
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
281
278
|
end
|
282
279
|
end
|
283
280
|
|
@@ -297,7 +294,7 @@ module Datadog
|
|
297
294
|
# description of and constraints on arguments.
|
298
295
|
# rubocop:disable Lint/UselessMethodDefinition
|
299
296
|
def publish(trace)
|
300
|
-
super
|
297
|
+
super
|
301
298
|
end
|
302
299
|
# rubocop:enable Lint/UselessMethodDefinition
|
303
300
|
end
|
@@ -315,7 +312,7 @@ module Datadog
|
|
315
312
|
def shutdown!
|
316
313
|
return unless @enabled
|
317
314
|
|
318
|
-
@writer
|
315
|
+
@writer&.stop
|
319
316
|
end
|
320
317
|
|
321
318
|
private
|
@@ -335,12 +332,12 @@ module Datadog
|
|
335
332
|
def build_trace(digest = nil)
|
336
333
|
# Resolve hostname if configured
|
337
334
|
hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
|
338
|
-
hostname = hostname && !hostname.empty? ? hostname : nil
|
335
|
+
hostname = (hostname && !hostname.empty?) ? hostname : nil
|
339
336
|
|
340
337
|
if digest
|
341
338
|
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
342
|
-
|
343
|
-
|
339
|
+
digest.trace_sampling_priority
|
340
|
+
end
|
344
341
|
TraceOperation.new(
|
345
342
|
logger: logger,
|
346
343
|
hostname: hostname,
|
@@ -369,7 +366,9 @@ module Datadog
|
|
369
366
|
)
|
370
367
|
end
|
371
368
|
end
|
369
|
+
# rubocop:enable Metrics/MethodLength
|
372
370
|
|
371
|
+
# rubocop:disable Metrics/MethodLength
|
373
372
|
def bind_trace_events!(trace_op)
|
374
373
|
events = trace_op.send(:events)
|
375
374
|
|
@@ -388,6 +387,7 @@ module Datadog
|
|
388
387
|
flush_trace(event_trace_op)
|
389
388
|
end
|
390
389
|
end
|
390
|
+
# rubocop:enable Metrics/MethodLength
|
391
391
|
|
392
392
|
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
393
393
|
# @return [TraceOperation]
|
@@ -402,6 +402,7 @@ module Datadog
|
|
402
402
|
end
|
403
403
|
|
404
404
|
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
405
|
+
# rubocop:disable Metrics/MethodLength
|
405
406
|
def start_span(
|
406
407
|
name,
|
407
408
|
continue_from: nil,
|
@@ -454,16 +455,17 @@ module Datadog
|
|
454
455
|
end
|
455
456
|
end
|
456
457
|
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
458
|
+
# rubocop:enable Metrics/MethodLength
|
457
459
|
|
458
460
|
def resolve_tags(tags, service)
|
459
461
|
merged_tags = if @tags.any? && tags
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
462
|
+
# Combine default tags with provided tags,
|
463
|
+
# preferring provided tags.
|
464
|
+
@tags.merge(tags)
|
465
|
+
else
|
466
|
+
# Use provided tags or default tags if none.
|
467
|
+
tags || @tags.dup
|
468
|
+
end
|
467
469
|
# Remove version tag if service is not the default service
|
468
470
|
if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
|
469
471
|
merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
|
@@ -507,12 +509,10 @@ module Datadog
|
|
507
509
|
private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
|
508
510
|
|
509
511
|
def sample_span(trace_op, span)
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
515
|
-
end
|
512
|
+
@span_sampler.sample!(trace_op, span)
|
513
|
+
rescue => e
|
514
|
+
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
515
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
516
516
|
end
|
517
517
|
end
|
518
518
|
|
@@ -521,13 +521,11 @@ module Datadog
|
|
521
521
|
|
522
522
|
# Flush finished spans from the trace buffer, send them to writer.
|
523
523
|
def flush_trace(trace_op)
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
530
|
-
end
|
524
|
+
trace = @trace_flush.consume!(trace_op)
|
525
|
+
write(trace) if trace && !trace.empty?
|
526
|
+
rescue => e
|
527
|
+
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
528
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
531
529
|
end
|
532
530
|
end
|
533
531
|
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
update_stats_from_response!(response)
|
31
31
|
|
32
32
|
response
|
33
|
-
rescue
|
33
|
+
rescue => e
|
34
34
|
message =
|
35
35
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
36
36
|
"Location: #{Array(e.backtrace).first}"
|
@@ -95,10 +95,10 @@ module Datadog
|
|
95
95
|
env.body = env.request.parcel.data
|
96
96
|
|
97
97
|
# Query for response
|
98
|
-
http_response = super
|
98
|
+
http_response = super
|
99
99
|
|
100
100
|
# Process the response
|
101
|
-
response_options = {
|
101
|
+
response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
|
102
102
|
# Parse service rates, if configured to do so.
|
103
103
|
if service_rates? && !http_response.payload.to_s.empty?
|
104
104
|
body = JSON.parse(http_response.payload)
|
@@ -30,17 +30,17 @@ module Datadog
|
|
30
30
|
# If block is given, allow it to handle writing
|
31
31
|
# Otherwise do a standard encode/write/response.
|
32
32
|
response = if block_given?
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
yield(out, request)
|
34
|
+
else
|
35
|
+
@request_block.call(out, request)
|
36
|
+
end
|
37
37
|
|
38
38
|
# Update statistics
|
39
39
|
update_stats_from_response!(response)
|
40
40
|
|
41
41
|
# Return response
|
42
42
|
response
|
43
|
-
rescue
|
43
|
+
rescue => e
|
44
44
|
message =
|
45
45
|
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
46
46
|
"Location: #{Array(e.backtrace).first}"
|
@@ -66,11 +66,11 @@ module Datadog
|
|
66
66
|
# number of traces
|
67
67
|
def encode_in_chunks(traces)
|
68
68
|
encoded_traces = if traces.respond_to?(:filter_map)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
69
|
+
# DEV Supported since Ruby 2.7, saves an intermediate object creation
|
70
|
+
traces.filter_map { |t| encode_one(t) }
|
71
|
+
else
|
72
|
+
traces.map { |t| encode_one(t) }.reject(&:nil?)
|
73
|
+
end
|
74
74
|
|
75
75
|
Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
|
76
76
|
[encoder.join(chunk), chunk.size]
|
@@ -45,7 +45,7 @@ module Datadog
|
|
45
45
|
def write_traces(traces)
|
46
46
|
traces = process_traces(traces)
|
47
47
|
flush_traces(traces)
|
48
|
-
rescue
|
48
|
+
rescue => e
|
49
49
|
logger.warn(
|
50
50
|
"Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
51
51
|
)
|
@@ -119,7 +119,7 @@ module Datadog
|
|
119
119
|
# WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
|
120
120
|
# result from the writer, whereas this method always returns nil.
|
121
121
|
def perform(traces)
|
122
|
-
super
|
122
|
+
super.tap do |responses|
|
123
123
|
loop_back_off! if responses.find(&:server_error?)
|
124
124
|
end
|
125
125
|
|
@@ -152,16 +152,16 @@ module Datadog
|
|
152
152
|
|
153
153
|
def fork_policy=(policy)
|
154
154
|
# Translate to Workers::Async::Thread policy
|
155
|
-
thread_fork_policy =
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
155
|
+
thread_fork_policy = case policy
|
156
|
+
when Core::Workers::Async::Thread::FORK_POLICY_STOP
|
157
|
+
policy
|
158
|
+
when FORK_POLICY_SYNC
|
159
|
+
# Stop the async thread because the writer
|
160
|
+
# will bypass and run synchronously.
|
161
|
+
Core::Workers::Async::Thread::FORK_POLICY_STOP
|
162
|
+
else
|
163
|
+
Core::Workers::Async::Thread::FORK_POLICY_RESTART
|
164
|
+
end
|
165
165
|
|
166
166
|
# Update thread fork policy
|
167
167
|
super(thread_fork_policy)
|
@@ -53,7 +53,7 @@ module Datadog
|
|
53
53
|
traces = @trace_buffer.pop
|
54
54
|
traces = Pipeline.process!(traces)
|
55
55
|
@trace_task.call(traces, @transport) unless @trace_task.nil? || traces.empty?
|
56
|
-
rescue
|
56
|
+
rescue => e
|
57
57
|
# ensures that the thread will not die because of an exception.
|
58
58
|
# TODO[manu]: findout the reason and reschedule the send if it's not
|
59
59
|
# a fatal exception
|
@@ -107,7 +107,7 @@ module Datadog
|
|
107
107
|
|
108
108
|
private
|
109
109
|
|
110
|
-
|
110
|
+
alias_method :flush_data, :callback_traces
|
111
111
|
|
112
112
|
def perform
|
113
113
|
loop do
|
data/lib/datadog/tracing.rb
CHANGED
@@ -81,7 +81,7 @@ module Datadog
|
|
81
81
|
# @public_api
|
82
82
|
def keep!
|
83
83
|
trace = active_trace
|
84
|
-
trace
|
84
|
+
trace&.keep!
|
85
85
|
end
|
86
86
|
|
87
87
|
# (see Datadog::Tracing::TraceSegment#reject!)
|
@@ -89,7 +89,7 @@ module Datadog
|
|
89
89
|
# @public_api
|
90
90
|
def reject!
|
91
91
|
trace = active_trace
|
92
|
-
trace
|
92
|
+
trace&.reject!
|
93
93
|
end
|
94
94
|
|
95
95
|
# (see Datadog::Tracing::Tracer#active_correlation)
|
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.20.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-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.24.1.0
|
53
|
+
version: 1.24.1.1.0
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 1.24.1.0
|
60
|
+
version: 1.24.1.1.0
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: libdatadog
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,6 +226,8 @@ files:
|
|
226
226
|
- lib/datadog/appsec/contrib/rails/gateway/watcher.rb
|
227
227
|
- lib/datadog/appsec/contrib/rails/integration.rb
|
228
228
|
- lib/datadog/appsec/contrib/rails/patcher.rb
|
229
|
+
- lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb
|
230
|
+
- lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb
|
229
231
|
- lib/datadog/appsec/contrib/rails/request.rb
|
230
232
|
- lib/datadog/appsec/contrib/rails/request_middleware.rb
|
231
233
|
- lib/datadog/appsec/contrib/rest_client/integration.rb
|
@@ -237,6 +239,7 @@ files:
|
|
237
239
|
- lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb
|
238
240
|
- lib/datadog/appsec/contrib/sinatra/integration.rb
|
239
241
|
- lib/datadog/appsec/contrib/sinatra/patcher.rb
|
242
|
+
- lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb
|
240
243
|
- lib/datadog/appsec/contrib/sinatra/request_middleware.rb
|
241
244
|
- lib/datadog/appsec/event.rb
|
242
245
|
- lib/datadog/appsec/ext.rb
|
@@ -249,6 +252,7 @@ files:
|
|
249
252
|
- lib/datadog/appsec/metrics/collector.rb
|
250
253
|
- lib/datadog/appsec/metrics/exporter.rb
|
251
254
|
- lib/datadog/appsec/metrics/telemetry.rb
|
255
|
+
- lib/datadog/appsec/metrics/telemetry_exporter.rb
|
252
256
|
- lib/datadog/appsec/monitor.rb
|
253
257
|
- lib/datadog/appsec/monitor/gateway/watcher.rb
|
254
258
|
- lib/datadog/appsec/processor/rule_loader.rb
|
@@ -261,7 +265,10 @@ files:
|
|
261
265
|
- lib/datadog/appsec/security_engine/result.rb
|
262
266
|
- lib/datadog/appsec/security_engine/runner.rb
|
263
267
|
- lib/datadog/appsec/security_event.rb
|
268
|
+
- lib/datadog/appsec/thread_safe_ref.rb
|
269
|
+
- lib/datadog/appsec/trace_keeper.rb
|
264
270
|
- lib/datadog/appsec/utils.rb
|
271
|
+
- lib/datadog/appsec/utils/hash_coercion.rb
|
265
272
|
- lib/datadog/appsec/utils/http.rb
|
266
273
|
- lib/datadog/appsec/utils/http/media_range.rb
|
267
274
|
- lib/datadog/appsec/utils/http/media_type.rb
|
@@ -441,6 +448,8 @@ files:
|
|
441
448
|
- lib/datadog/di/preload.rb
|
442
449
|
- lib/datadog/di/probe.rb
|
443
450
|
- lib/datadog/di/probe_builder.rb
|
451
|
+
- lib/datadog/di/probe_file_loader.rb
|
452
|
+
- lib/datadog/di/probe_file_loader/railtie.rb
|
444
453
|
- lib/datadog/di/probe_manager.rb
|
445
454
|
- lib/datadog/di/probe_notification_builder.rb
|
446
455
|
- lib/datadog/di/probe_notifier_worker.rb
|
@@ -995,8 +1004,8 @@ licenses:
|
|
995
1004
|
- Apache-2.0
|
996
1005
|
metadata:
|
997
1006
|
allowed_push_host: https://rubygems.org
|
998
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
999
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
1007
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.20.0/CHANGELOG.md
|
1008
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.20.0
|
1000
1009
|
post_install_message:
|
1001
1010
|
rdoc_options: []
|
1002
1011
|
require_paths:
|