datadog 2.19.0 → 2.21.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 +52 -1
- data/README.md +0 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_api/process_discovery.c +5 -5
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/api_security/route_extractor.rb +6 -2
- data/lib/datadog/appsec/autoload.rb +1 -1
- 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/agent_settings_resolver.rb +4 -4
- data/lib/datadog/core/configuration/components.rb +8 -2
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +0 -1
- data/lib/datadog/core/configuration/option.rb +55 -51
- data/lib/datadog/core/configuration/option_definition.rb +2 -11
- data/lib/datadog/core/configuration/options.rb +14 -12
- data/lib/datadog/core/configuration/settings.rb +10 -6
- data/lib/datadog/core/configuration/supported_configurations.rb +335 -0
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/environment/ext.rb +0 -2
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/variable_helpers.rb +3 -3
- data/lib/datadog/core/metrics/client.rb +2 -2
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
- data/lib/datadog/core/process_discovery.rb +46 -23
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
- data/lib/datadog/core.rb +2 -0
- data/lib/datadog/di/boot.rb +9 -1
- 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/probe_notification_builder.rb +1 -1
- 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/configurator.rb +1 -1
- 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/collectors/info.rb +1 -1
- data/lib/datadog/profiling/ext.rb +2 -1
- data/lib/datadog/profiling/http_transport.rb +1 -1
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- 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 -5
- data/lib/datadog/tracing/configuration/settings.rb +29 -7
- 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 +36 -25
- 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 +3 -2
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- 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/span_attribute_schema.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 +18 -6
@@ -12,17 +12,17 @@ module Datadog
|
|
12
12
|
|
13
13
|
# Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
|
14
14
|
tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
Datadog.configuration.tracing.header_tags.request_tags(headers)
|
16
|
+
else
|
17
|
+
whitelist = configuration[:headers][:request] || []
|
18
|
+
whitelist.each_with_object({}) do |header, result|
|
19
|
+
header_value = headers.get(header)
|
20
|
+
unless header_value.nil?
|
21
|
+
header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
|
22
|
+
result[header_tag] = header_value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
26
|
|
27
27
|
span.set_tags(tags)
|
28
28
|
end
|
@@ -32,27 +32,27 @@ module Datadog
|
|
32
32
|
|
33
33
|
# Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
|
34
34
|
tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
35
|
+
Datadog.configuration.tracing.header_tags.response_tags(headers)
|
36
|
+
else
|
37
|
+
whitelist = configuration[:headers][:response] || []
|
38
|
+
whitelist.each_with_object({}) do |header, result|
|
39
|
+
header_value = headers[header]
|
40
|
+
|
41
|
+
next if header_value.nil?
|
42
|
+
|
43
|
+
header_tag = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
|
44
|
+
|
45
|
+
# Maintain the value format between Rack 2 and 3
|
46
|
+
#
|
47
|
+
# Rack 2.x => { 'foo' => 'bar,baz' }
|
48
|
+
# Rack 3.x => { 'foo' => ['bar', 'baz'] }
|
49
|
+
result[header_tag] = if header_value.is_a? Array
|
50
|
+
header_value.join(',')
|
51
|
+
else
|
52
|
+
header_value
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
56
|
|
57
57
|
span.set_tags(tags)
|
58
58
|
end
|
@@ -47,7 +47,7 @@ module Datadog
|
|
47
47
|
end
|
48
48
|
|
49
49
|
TraceProxyMiddleware.call(env, configuration) do
|
50
|
-
trace_options = {
|
50
|
+
trace_options = {type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND}
|
51
51
|
trace_options[:service] = configuration[:service_name] if configuration[:service_name]
|
52
52
|
|
53
53
|
# start a new request span and attach it to the current Rack environment;
|
@@ -80,7 +80,7 @@ module Datadog
|
|
80
80
|
# catch exceptions that may be raised in the middleware chain
|
81
81
|
# Note: if a middleware catches an Exception without re raising,
|
82
82
|
# the Exception cannot be recorded here.
|
83
|
-
request_span
|
83
|
+
request_span&.set_error(e)
|
84
84
|
raise e
|
85
85
|
ensure
|
86
86
|
env[Ext::RACK_ENV_REQUEST_SPAN] = previous_request_span if previous_request_span
|
@@ -123,7 +123,7 @@ module Datadog
|
|
123
123
|
# 4. Fallback with verb + status, eq `GET 200`
|
124
124
|
request_span.resource ||=
|
125
125
|
if configuration[:middleware_names] && env['RESPONSE_MIDDLEWARE']
|
126
|
-
"#{env[
|
126
|
+
"#{env["RESPONSE_MIDDLEWARE"]}##{original_request_method}"
|
127
127
|
elsif trace.resource_override?
|
128
128
|
trace.resource
|
129
129
|
else
|
@@ -240,16 +240,18 @@ module Datadog
|
|
240
240
|
Datadog.configuration.tracing[:rack]
|
241
241
|
end
|
242
242
|
|
243
|
+
# rubocop:disable Metrics/AbcSize
|
244
|
+
# rubocop:disable Metrics/MethodLength
|
243
245
|
def parse_url(env, original_env)
|
244
246
|
request_obj = ::Rack::Request.new(env)
|
245
247
|
|
246
248
|
# scheme, host, and port
|
247
249
|
base_url = if request_obj.respond_to?(:base_url)
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
250
|
+
request_obj.base_url
|
251
|
+
else
|
252
|
+
# Compatibility for older Rack versions
|
253
|
+
request_obj.url.chomp(request_obj.fullpath)
|
254
|
+
end
|
253
255
|
|
254
256
|
# https://github.com/rack/rack/blob/main/SPEC.rdoc
|
255
257
|
#
|
@@ -269,18 +271,20 @@ module Datadog
|
|
269
271
|
# prepended to PATH_INFO to reflect the correct user visible path.
|
270
272
|
request_uri = env['REQUEST_URI'].to_s
|
271
273
|
fullpath = if request_uri.empty?
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
274
|
+
query_string = original_env['QUERY_STRING'].to_s
|
275
|
+
path = original_env['SCRIPT_NAME'].to_s + original_env['PATH_INFO'].to_s
|
276
|
+
|
277
|
+
query_string.empty? ? path : "#{path}?#{query_string}"
|
278
|
+
else
|
279
|
+
# normally REQUEST_URI starts at the path, but it
|
280
|
+
# might contain the full URL in some cases (e.g WEBrick)
|
281
|
+
request_uri.delete_prefix(base_url)
|
282
|
+
end
|
281
283
|
|
282
284
|
base_url + fullpath
|
283
285
|
end
|
286
|
+
# rubocop:enable Metrics/AbcSize
|
287
|
+
# rubocop:enable Metrics/MethodLength
|
284
288
|
|
285
289
|
def parse_user_agent_header(headers)
|
286
290
|
headers.get(Tracing::Metadata::Ext::HTTP::HEADER_USER_AGENT)
|
@@ -24,6 +24,7 @@ module Datadog
|
|
24
24
|
# nginx header is seconds in the format "t=1512379167.574"
|
25
25
|
# apache header is microseconds in the format "t=1570633834463123"
|
26
26
|
# heroku header is milliseconds in the format "1570634024294"
|
27
|
+
# @see https://github.com/heroku/vegur/blob/65d168f757e0ddb448f41cfb9e4b0281c747378d/README.md?plain=1#L383-L384
|
27
28
|
time_string = header.to_s.delete('^0-9')
|
28
29
|
return if time_string.nil?
|
29
30
|
|
@@ -34,8 +35,8 @@ module Datadog
|
|
34
35
|
# return the request_start only if it's lesser than
|
35
36
|
# current time, to avoid significant clock skew
|
36
37
|
request_start = Time.at(time_value)
|
37
|
-
request_start.utc > now ? nil : request_start
|
38
|
-
rescue
|
38
|
+
(request_start.utc > now) ? nil : request_start
|
39
|
+
rescue => e
|
39
40
|
# in case of an Exception we don't create a
|
40
41
|
# `request.queuing` span
|
41
42
|
Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
|
@@ -43,7 +43,13 @@ module Datadog
|
|
43
43
|
# excluding the time spent processing the request itself
|
44
44
|
queue_span.finish
|
45
45
|
|
46
|
-
yield
|
46
|
+
yield
|
47
|
+
ensure
|
48
|
+
# Ensure that the spans are finished even if an exception is raised.
|
49
|
+
# **This is very important** to prevent the trace from leaking between requests,
|
50
|
+
# especially because `queue_span` is normally a root span.
|
51
|
+
queue_span&.finish
|
52
|
+
request_span&.finish
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
@@ -12,7 +12,8 @@ module Datadog
|
|
12
12
|
# @!visibility private
|
13
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RAILS_ANALYTICS_ENABLED'
|
14
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RAILS_ANALYTICS_SAMPLE_RATE'
|
15
|
-
|
15
|
+
# Note: Alias (previous name DISABLE_DATADOG_RAILS) defined in supported-configurations.json
|
16
|
+
ENV_DISABLE = 'DD_DISABLE_DATADOG_RAILS'
|
16
17
|
|
17
18
|
SPAN_RUNNER_FILE = 'rails.runner.file'
|
18
19
|
SPAN_RUNNER_INLINE = 'rails.runner.inline'
|
@@ -23,7 +23,7 @@ module Datadog
|
|
23
23
|
register_as :rails, auto_patch: false
|
24
24
|
|
25
25
|
def self.version
|
26
|
-
Gem.loaded_specs['railties']
|
26
|
+
Gem.loaded_specs['railties']&.version
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.loaded?
|
@@ -35,7 +35,7 @@ module Datadog
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.patchable?
|
38
|
-
super && !
|
38
|
+
super && !DATADOG_ENV.key?(Ext::ENV_DISABLE)
|
39
39
|
end
|
40
40
|
|
41
41
|
def new_configuration
|
@@ -16,7 +16,7 @@ module Datadog
|
|
16
16
|
|
17
17
|
app_config.log_tags ||= [] # Can be nil, we initialized it if so
|
18
18
|
app_config.log_tags << proc { Tracing.log_correlation if Datadog.configuration.tracing.log_injection }
|
19
|
-
rescue
|
19
|
+
rescue => e
|
20
20
|
Datadog.logger.warn(
|
21
21
|
"Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class.name} #{e.message}"
|
22
22
|
)
|
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
# Some exception gets handled by Rails middleware before it can be set on Rack middleware
|
35
35
|
# The rack span is the root span of the request and should make sure it has the full exception
|
36
36
|
# set on it.
|
37
|
-
env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
37
|
+
env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]&.set_error(e)
|
38
38
|
end
|
39
39
|
raise e
|
40
40
|
end
|
@@ -69,14 +69,15 @@ module Datadog
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
def self.
|
73
|
-
base.const_set(:Kernel,
|
72
|
+
def self.prepended(base)
|
73
|
+
base.const_set(:Kernel, InstrumentedKernel)
|
74
74
|
end
|
75
75
|
|
76
76
|
# Instruments the `Kernel.load` method, but only for the
|
77
77
|
# `Rails::Command::RunnerCommand` class.
|
78
|
-
module
|
79
|
-
def self.load(
|
78
|
+
module InstrumentedKernel
|
79
|
+
def self.load(*args)
|
80
|
+
file = args[0]
|
80
81
|
name = Ext::SPAN_RUNNER_FILE
|
81
82
|
resource = file
|
82
83
|
operation = Ext::TAG_OPERATION_FILE
|
@@ -65,7 +65,7 @@ module Datadog
|
|
65
65
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_INVOKE)
|
66
66
|
span.set_tag(Ext::TAG_TASK_ARG_NAMES, arg_names)
|
67
67
|
span.set_tag(Ext::TAG_INVOKE_ARGS, quantize_args(args)) unless args.nil?
|
68
|
-
rescue
|
68
|
+
rescue => e
|
69
69
|
Datadog.logger.debug("Error while tracing Rake invoke: #{e.class.name} #{e.message}")
|
70
70
|
end
|
71
71
|
|
@@ -74,7 +74,7 @@ module Datadog
|
|
74
74
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
75
75
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_EXECUTE)
|
76
76
|
span.set_tag(Ext::TAG_EXECUTE_ARGS, quantize_args(args.to_hash)) unless args.nil?
|
77
|
-
rescue
|
77
|
+
rescue => e
|
78
78
|
Datadog.logger.debug("Error while tracing Rake execute: #{e.class.name} #{e.message}")
|
79
79
|
end
|
80
80
|
|
@@ -84,12 +84,12 @@ module Datadog
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def enabled?
|
87
|
-
Datadog.configuration.tracing.enabled &&
|
87
|
+
Datadog.configuration.tracing.enabled &&
|
88
88
|
configuration[:enabled] == true
|
89
89
|
end
|
90
90
|
|
91
91
|
def span_options
|
92
|
-
{
|
92
|
+
{service: configuration[:service_name]}
|
93
93
|
end
|
94
94
|
|
95
95
|
def configuration
|
@@ -19,13 +19,13 @@ module Datadog
|
|
19
19
|
protected
|
20
20
|
|
21
21
|
def parse_matcher(matcher)
|
22
|
-
matcher = {
|
22
|
+
matcher = {url: matcher} if matcher.is_a?(String)
|
23
23
|
|
24
24
|
normalize(connection_resolver.resolve(matcher))
|
25
25
|
end
|
26
26
|
|
27
27
|
def normalize(hash)
|
28
|
-
return {
|
28
|
+
return {url: hash[:url]} if hash[:scheme] == UNIX_SCHEME
|
29
29
|
|
30
30
|
# Connexion strings are always converted to host, port, db and scheme
|
31
31
|
# but the host, port, db and scheme will generate the :url only after
|
@@ -24,10 +24,11 @@ module Datadog
|
|
24
24
|
TAG_OPERATION_COMMAND = 'command'
|
25
25
|
TAG_SYSTEM = 'redis'
|
26
26
|
TAG_DATABASE_INDEX = 'db.redis.database_index'
|
27
|
-
PEER_SERVICE_SOURCES =
|
27
|
+
PEER_SERVICE_SOURCES = [
|
28
28
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
29
29
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
30
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
30
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
31
|
+
].freeze
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -31,11 +31,11 @@ module Datadog
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.redis_version
|
34
|
-
Gem.loaded_specs['redis']
|
34
|
+
Gem.loaded_specs['redis']&.version
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.redis_client_version
|
38
|
-
Gem.loaded_specs['redis-client']
|
38
|
+
Gem.loaded_specs['redis-client']&.version
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.loaded?
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
# For `redis-rb` 3.x
|
31
31
|
return client if respond_to?(:client)
|
32
32
|
|
33
|
-
Datadog.logger.warn 'Fail to apply configuration on redis client instance with '
|
33
|
+
Datadog.logger.warn 'Fail to apply configuration on redis client instance with ' \
|
34
34
|
'`Datadog.configure_onto(redis)`.'
|
35
35
|
|
36
36
|
# Null object instead of raising error
|
@@ -49,8 +49,8 @@ module Datadog
|
|
49
49
|
module InstanceMethods
|
50
50
|
def datadog_pin=(_pin)
|
51
51
|
Datadog.logger.warn \
|
52
|
-
'`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument '\
|
53
|
-
"a redis instance with custom configuration, please initialize it with:\n"\
|
52
|
+
'`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument ' \
|
53
|
+
"a redis instance with custom configuration, please initialize it with:\n" \
|
54
54
|
" `Redis.new(..., custom: { datadog: { service_name: 'my-service' } })`.\n\n" \
|
55
55
|
'See: https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md#redis'
|
56
56
|
end
|
@@ -61,7 +61,7 @@ module Datadog
|
|
61
61
|
|
62
62
|
def default_tags
|
63
63
|
[].tap do |tags|
|
64
|
-
tags << "target_redis_version:#{Integration.redis_version}"
|
64
|
+
tags << "target_redis_version:#{Integration.redis_version}" if Integration.redis_version
|
65
65
|
tags << "target_redis_client_version:#{Integration.redis_client_version}" if Integration.redis_client_version
|
66
66
|
end
|
67
67
|
end
|
@@ -43,7 +43,7 @@ module Datadog
|
|
43
43
|
return 'AUTH ?' if auth_command?(command_args)
|
44
44
|
|
45
45
|
verb, *args = command_args.map { |x| format_arg(x) }
|
46
|
-
Core::Utils.truncate("#{verb.upcase} #{args.join(
|
46
|
+
Core::Utils.truncate("#{verb.upcase} #{args.join(" ")}", CMD_MAX_LEN, TOO_LONG_MARK)
|
47
47
|
end
|
48
48
|
|
49
49
|
def get_verb(command_args)
|
@@ -46,7 +46,7 @@ module Datadog
|
|
46
46
|
span.set_tag Ext::TAG_RAW_COMMAND, raw_command
|
47
47
|
|
48
48
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
49
|
-
rescue
|
49
|
+
rescue => e
|
50
50
|
Datadog.logger.error(e.message)
|
51
51
|
Datadog::Core::Telemetry::Logger.report(e)
|
52
52
|
end
|
@@ -62,10 +62,10 @@ module Datadog
|
|
62
62
|
# Quantizes a multi-command Redis pipeline execution
|
63
63
|
def get_pipeline_commands(commands, command_args)
|
64
64
|
list = if command_args
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
commands.map { |c| Contrib::Redis::Quantize.format_command_args(c) }
|
66
|
+
else
|
67
|
+
commands.map { |c| Contrib::Redis::Quantize.get_verb(c) }
|
68
|
+
end
|
69
69
|
|
70
70
|
list.empty? ? '(none)' : list.join("\n")
|
71
71
|
end
|
@@ -76,7 +76,7 @@ module Datadog
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def span_options
|
79
|
-
{
|
79
|
+
{service: datadog_configuration[:service_name], on_error: datadog_configuration[:on_error]}
|
80
80
|
end
|
81
81
|
|
82
82
|
def datadog_configuration
|
@@ -17,10 +17,11 @@ module Datadog
|
|
17
17
|
SPAN_REQUEST = 'rest_client.request'
|
18
18
|
TAG_COMPONENT = 'rest_client'
|
19
19
|
TAG_OPERATION_REQUEST = 'request'
|
20
|
-
PEER_SERVICE_SOURCES =
|
20
|
+
PEER_SERVICE_SOURCES = [
|
21
21
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
22
22
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
23
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
23
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
24
|
+
].freeze
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -22,7 +22,7 @@ module Datadog
|
|
22
22
|
def execute(&block)
|
23
23
|
uri = URI.parse(url)
|
24
24
|
|
25
|
-
return super
|
25
|
+
return super unless Tracing.enabled?
|
26
26
|
|
27
27
|
datadog_trace_request(uri) do |_span, trace|
|
28
28
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
@@ -106,11 +106,11 @@ module Datadog
|
|
106
106
|
# rubocop:disable Lint/RescueException
|
107
107
|
rescue Exception => e
|
108
108
|
# rubocop:enable Lint/RescueException
|
109
|
-
span
|
109
|
+
span&.set_error(e)
|
110
110
|
|
111
111
|
raise e
|
112
112
|
ensure
|
113
|
-
span
|
113
|
+
span&.finish
|
114
114
|
end
|
115
115
|
|
116
116
|
private
|
@@ -46,7 +46,7 @@ module Datadog
|
|
46
46
|
ensure
|
47
47
|
begin
|
48
48
|
response = yield
|
49
|
-
rescue
|
49
|
+
rescue
|
50
50
|
# The status code is unknown to Roda and decided by the upstream web runner.
|
51
51
|
# In this case, spans default to status code 500 rather than a blank status code.
|
52
52
|
default_error_status = '500'
|
@@ -25,7 +25,7 @@ module Datadog
|
|
25
25
|
# if the user already has conflicting log_tags
|
26
26
|
# we want them to clobber ours, because we should allow them to override if needed.
|
27
27
|
log.named_tags = correlation.to_h.merge(original_named_tags)
|
28
|
-
super
|
28
|
+
super
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -23,7 +23,7 @@ module Datadog
|
|
23
23
|
response = nil
|
24
24
|
|
25
25
|
Tracing.trace(Ext::SPAN_QUERY) do |span|
|
26
|
-
span.service =
|
26
|
+
span.service = Datadog.configuration_for(self, :service_name) \
|
27
27
|
|| Datadog.configuration.tracing[:sequel][:service_name] \
|
28
28
|
|| Contrib::SpanAttributeSchema.fetch_service_name(
|
29
29
|
'',
|
@@ -46,10 +46,10 @@ module Datadog
|
|
46
46
|
|
47
47
|
def parse_opts(sql, opts)
|
48
48
|
db_opts = if ::Sequel::VERSION < '3.41.0' && self.class.to_s !~ /Dataset$/
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
@opts
|
50
|
+
elsif instance_variable_defined?(:@pool) && @pool
|
51
|
+
@pool.db.opts
|
52
|
+
end
|
53
53
|
sql = sql.is_a?(::Sequel::SQL::Expression) ? literal(sql) : sql.to_s
|
54
54
|
|
55
55
|
Utils.parse_opts(sql, opts, db_opts)
|
@@ -40,7 +40,7 @@ module Datadog
|
|
40
40
|
response = nil
|
41
41
|
|
42
42
|
Tracing.trace(Ext::SPAN_QUERY) do |span|
|
43
|
-
span.service =
|
43
|
+
span.service = Datadog.configuration_for(db, :service_name) \
|
44
44
|
|| Datadog.configuration.tracing[:sequel][:service_name] \
|
45
45
|
|| Contrib::SpanAttributeSchema.fetch_service_name(
|
46
46
|
'',
|
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
|
35
35
|
def parse_opts(sql, opts, db_opts, dataset = nil)
|
36
36
|
# Prepared statements don't provide their sql query in the +sql+ parameter.
|
37
|
-
if !sql.is_a?(String) && (dataset
|
37
|
+
if !sql.is_a?(String) && (dataset&.respond_to?(:prepared_sql) &&
|
38
38
|
(resolved_sql = dataset.prepared_sql))
|
39
39
|
# The dataset contains the resolved SQL query and prepared statement name.
|
40
40
|
prepared_name = dataset.prepared_statement_name
|