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
@@ -25,7 +25,7 @@ module Datadog
|
|
25
25
|
job['class'].to_s
|
26
26
|
end
|
27
27
|
rescue => e
|
28
|
-
Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job[
|
28
|
+
Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job["jid"]}): #{e}" }
|
29
29
|
|
30
30
|
job['class'].to_s
|
31
31
|
end
|
@@ -28,63 +28,61 @@ module Datadog
|
|
28
28
|
service: configuration[:service_name],
|
29
29
|
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
|
30
30
|
) do |span|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
span.resource = nil
|
31
|
+
# this is kept nil until we set a correct one (either in the route or with a fallback in the ensure below)
|
32
|
+
# the nil signals that there's no good one yet and is also seen by profiler, when sampling the resource
|
33
|
+
span.resource = nil
|
35
34
|
|
36
|
-
|
35
|
+
Sinatra::Env.set_datadog_span(env, span)
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
response = @app.call(env)
|
38
|
+
ensure
|
39
|
+
Contrib::Rack::HeaderTagging.tag_request_headers(span, env, configuration)
|
41
40
|
|
42
|
-
|
43
|
-
|
41
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
42
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
|
44
43
|
|
45
|
-
|
44
|
+
request = ::Sinatra::Request.new(env)
|
46
45
|
|
47
|
-
|
48
|
-
|
46
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, request.path)
|
47
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, request.request_method)
|
49
48
|
|
50
|
-
|
49
|
+
datadog_route = Sinatra::Env.route_path(env)
|
51
50
|
|
52
|
-
|
51
|
+
span.set_tag(Ext::TAG_ROUTE_PATH, datadog_route) if datadog_route
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
if request.script_name && !request.script_name.empty?
|
54
|
+
span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
|
55
|
+
end
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
# If this app handled the request, then Contrib::Sinatra::Tracer OR Contrib::Sinatra::Base set the
|
58
|
+
# resource; if no resource was set, let's use a fallback
|
59
|
+
span.resource = env['REQUEST_METHOD'] if span.resource.nil?
|
61
60
|
|
62
|
-
|
61
|
+
rack_request_span = env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
# This propagates the Sinatra resource to the Rack span,
|
64
|
+
# since the latter is unaware of what the resource might be
|
65
|
+
# and would fallback to a generic resource name when unset
|
66
|
+
rack_request_span.resource ||= span.resource if rack_request_span
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
if response
|
69
|
+
if (status = response[0])
|
70
|
+
sinatra_response = ::Sinatra::Response.new([], status) # Build object to use status code helpers
|
72
71
|
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, sinatra_response.status)
|
73
|
+
span.set_error(env['sinatra.error']) if sinatra_response.server_error?
|
74
|
+
end
|
76
75
|
|
77
|
-
|
78
|
-
|
79
|
-
end
|
76
|
+
if (headers = response[1])
|
77
|
+
Contrib::Rack::HeaderTagging.tag_response_headers(span, headers, configuration)
|
80
78
|
end
|
79
|
+
end
|
81
80
|
|
82
|
-
|
83
|
-
|
81
|
+
# Set analytics sample rate
|
82
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
84
83
|
|
85
|
-
|
86
|
-
|
87
|
-
end
|
84
|
+
# Measure service stats
|
85
|
+
Contrib::Analytics.set_measured(span)
|
88
86
|
end
|
89
87
|
end
|
90
88
|
# rubocop:enable Metrics/MethodLength
|
@@ -11,7 +11,7 @@ module Datadog
|
|
11
11
|
NO_SOURCE = [].freeze
|
12
12
|
|
13
13
|
def self.fetch_service_name(env, default)
|
14
|
-
|
14
|
+
DATADOG_ENV.fetch(env) do
|
15
15
|
if Datadog.configuration.tracing.contrib.global_default_service_name.enabled
|
16
16
|
return Datadog.configuration.service
|
17
17
|
end
|
@@ -54,7 +54,7 @@ module Datadog
|
|
54
54
|
span.set_tag(Ext::TAG_REQUEST_METHOD, event.method)
|
55
55
|
span.set_tag(Ext::TAG_REQUEST_PATH, event.path)
|
56
56
|
span.set_tag(Ext::TAG_REQUEST_NUM_RETRIES, event.num_retries.to_s)
|
57
|
-
rescue
|
57
|
+
rescue => e
|
58
58
|
Datadog.logger.debug(e.message)
|
59
59
|
end
|
60
60
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
19
19
|
TAG_COMPONENT = 'trilogy'
|
20
20
|
TAG_OPERATION_QUERY = 'query'
|
21
21
|
TAG_SYSTEM = 'mysql'
|
22
|
-
PEER_SERVICE_SOURCES = (
|
22
|
+
PEER_SERVICE_SOURCES = ([Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -21,7 +21,7 @@ module Datadog
|
|
21
21
|
def format(hash_obj, options = {})
|
22
22
|
options ||= {}
|
23
23
|
format!(hash_obj, options)
|
24
|
-
rescue
|
24
|
+
rescue
|
25
25
|
options[:placeholder] || PLACEHOLDER
|
26
26
|
end
|
27
27
|
|
@@ -66,7 +66,7 @@ module Datadog
|
|
66
66
|
def format_array(value, options)
|
67
67
|
if value.any? { |v| v.class <= ::Hash || v.class <= Array }
|
68
68
|
first_entry = format_value(value.first, options)
|
69
|
-
value.size > 1 ? [first_entry, options[:placeholder]] : [first_entry]
|
69
|
+
(value.size > 1) ? [first_entry, options[:placeholder]] : [first_entry]
|
70
70
|
# Otherwise short-circuit and return single placeholder
|
71
71
|
else
|
72
72
|
[options[:placeholder]]
|
@@ -77,19 +77,19 @@ module Datadog
|
|
77
77
|
{}.tap do |options|
|
78
78
|
# Show
|
79
79
|
# If either is :all, value becomes :all
|
80
|
-
options[:show] =
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
80
|
+
options[:show] = if original[:show] == :all || additional[:show] == :all
|
81
|
+
:all
|
82
|
+
else
|
83
|
+
(original[:show] || []).dup.concat(additional[:show] || []).uniq
|
84
|
+
end
|
85
85
|
|
86
86
|
# Exclude
|
87
87
|
# If either is :all, value becomes :all
|
88
88
|
options[:exclude] = if original[:exclude] == :all || additional[:exclude] == :all
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
:all
|
90
|
+
else
|
91
|
+
(original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq
|
92
|
+
end
|
93
93
|
|
94
94
|
options[:placeholder] = additional[:placeholder] || original[:placeholder]
|
95
95
|
end
|
@@ -16,16 +16,16 @@ module Datadog
|
|
16
16
|
# but adjusted to parse only <scheme>://<host>:<port>/ components
|
17
17
|
# and stop there, since we don't care about the path, query string,
|
18
18
|
# and fragment components
|
19
|
-
RFC3986_URL_BASE = /\A(?<URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*+):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*+)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h++\.[!$&-.0-;=A-Z_a-z~]++))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+))(?::(?<port>\d*+))?)))(?:\/|\z)/.freeze # rubocop:disable
|
19
|
+
RFC3986_URL_BASE = /\A(?<URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*+):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*+)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h++\.[!$&-.0-;=A-Z_a-z~]++))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+))(?::(?<port>\d*+))?)))(?:\/|\z)/.freeze # rubocop:disable Layout/LineLength
|
20
20
|
|
21
21
|
module_function
|
22
22
|
|
23
23
|
def url(url, options = {})
|
24
24
|
url!(url, options)
|
25
|
-
rescue
|
25
|
+
rescue
|
26
26
|
placeholder = options[:placeholder] || PLACEHOLDER
|
27
27
|
|
28
|
-
options[:base] == :exclude ? placeholder : "#{base_url(url)}/#{placeholder}"
|
28
|
+
(options[:base] == :exclude) ? placeholder : "#{base_url(url)}/#{placeholder}"
|
29
29
|
end
|
30
30
|
|
31
31
|
def base_url(url, options = {})
|
@@ -43,7 +43,7 @@ module Datadog
|
|
43
43
|
# Format the query string
|
44
44
|
if uri.query
|
45
45
|
query = query(uri.query, options[:query])
|
46
|
-
uri.query = (!query.nil? && query.empty? ? nil : query)
|
46
|
+
uri.query = ((!query.nil? && query.empty?) ? nil : query)
|
47
47
|
end
|
48
48
|
|
49
49
|
# Remove any URI fragments
|
@@ -59,7 +59,7 @@ module Datadog
|
|
59
59
|
|
60
60
|
def query(query, options = {})
|
61
61
|
query!(query, options)
|
62
|
-
rescue
|
62
|
+
rescue
|
63
63
|
options[:placeholder] || PLACEHOLDER
|
64
64
|
end
|
65
65
|
|
@@ -78,7 +78,7 @@ module Datadog
|
|
78
78
|
if options[:exclude].include?(key)
|
79
79
|
[nil, nil]
|
80
80
|
else
|
81
|
-
value = options[:show] == :all || options[:show].include?(key) ? value : nil
|
81
|
+
value = (options[:show] == :all || options[:show].include?(key)) ? value : nil
|
82
82
|
[key, value]
|
83
83
|
end
|
84
84
|
end
|
@@ -86,7 +86,11 @@ module Datadog
|
|
86
86
|
sampler = Datadog.configuration.tracing.sampler
|
87
87
|
return Datadog.configuration.tracing.sampling.default_rate unless sampler
|
88
88
|
|
89
|
-
|
89
|
+
begin
|
90
|
+
sampler.sample_rate(nil)
|
91
|
+
rescue
|
92
|
+
nil
|
93
|
+
end
|
90
94
|
end
|
91
95
|
|
92
96
|
# DEV: We currently only support SimpleRule instances.
|
@@ -28,7 +28,7 @@ module Datadog
|
|
28
28
|
span_id = digest.span_id || 0 # Fall back to zero (invalid) if not present
|
29
29
|
|
30
30
|
# DEV: We need these to be hex encoded
|
31
|
-
value = "#{format(
|
31
|
+
value = "#{format("%032x", digest.trace_id)}-#{format("%016x", span_id)}"
|
32
32
|
|
33
33
|
if digest.trace_sampling_priority
|
34
34
|
sampling_priority = Helpers.clamp_sampling_priority(
|
@@ -17,15 +17,18 @@ module Datadog
|
|
17
17
|
BAGGAGE_KEY = 'baggage'
|
18
18
|
DD_TRACE_BAGGAGE_MAX_ITEMS = 64
|
19
19
|
DD_TRACE_BAGGAGE_MAX_BYTES = 8192
|
20
|
+
BAGGAGE_TAG_KEYS_MATCH_ALL = ['*'].freeze
|
20
21
|
SAFE_CHARACTERS_KEY = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$!#&'*+-.^_`|~"
|
21
22
|
SAFE_CHARACTERS_VALUE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$!#&'()*+-./:<>?@[]^_`{|}~"
|
22
23
|
|
23
24
|
def initialize(
|
24
25
|
fetcher:,
|
25
|
-
baggage_key: BAGGAGE_KEY
|
26
|
+
baggage_key: BAGGAGE_KEY,
|
27
|
+
baggage_tag_keys: ::Datadog.configuration.tracing.baggage_tag_keys
|
26
28
|
)
|
27
29
|
@baggage_key = baggage_key
|
28
30
|
@fetcher = fetcher
|
31
|
+
@baggage_tag_keys = baggage_tag_keys
|
29
32
|
end
|
30
33
|
|
31
34
|
def inject!(digest, data)
|
@@ -36,7 +39,13 @@ module Datadog
|
|
36
39
|
|
37
40
|
begin
|
38
41
|
if baggage_items.size > DD_TRACE_BAGGAGE_MAX_ITEMS
|
39
|
-
::Datadog.logger.warn(
|
42
|
+
::Datadog.logger.warn("Baggage item limit (#{DD_TRACE_BAGGAGE_MAX_ITEMS}) exceeded, dropping excess items")
|
43
|
+
# Record telemetry for item count truncation
|
44
|
+
record_telemetry_metric(
|
45
|
+
'context_header.truncated',
|
46
|
+
1,
|
47
|
+
{'header_style' => 'baggage', 'truncation_reason' => 'baggage_item_count_exceeded'}
|
48
|
+
)
|
40
49
|
baggage_items = baggage_items.first(DD_TRACE_BAGGAGE_MAX_ITEMS)
|
41
50
|
end
|
42
51
|
|
@@ -47,7 +56,13 @@ module Datadog
|
|
47
56
|
item = "#{encode_item(key, SAFE_CHARACTERS_KEY)}=#{encode_item(value, SAFE_CHARACTERS_VALUE)}"
|
48
57
|
item_size = item.bytesize + (encoded_items.empty? ? 0 : 1) # +1 for comma if not first item
|
49
58
|
if total_size + item_size > DD_TRACE_BAGGAGE_MAX_BYTES
|
50
|
-
::Datadog.logger.warn(
|
59
|
+
::Datadog.logger.warn("Baggage header size (#{DD_TRACE_BAGGAGE_MAX_BYTES}) exceeded, dropping excess items")
|
60
|
+
# Record telemetry for byte count truncation
|
61
|
+
record_telemetry_metric(
|
62
|
+
'context_header.truncated',
|
63
|
+
1,
|
64
|
+
{'header_style' => 'baggage', 'truncation_reason' => 'baggage_byte_count_exceeded'}
|
65
|
+
)
|
51
66
|
break # stop adding items when size limit is reached
|
52
67
|
end
|
53
68
|
encoded_items << item
|
@@ -57,10 +72,12 @@ module Datadog
|
|
57
72
|
# edge case where a single item is too large
|
58
73
|
return if encoded_items.empty?
|
59
74
|
|
60
|
-
|
61
|
-
|
75
|
+
data[@baggage_key] = encoded_items.join(',')
|
76
|
+
|
77
|
+
# Record telemetry for successful injection
|
78
|
+
record_telemetry_metric('context_header_style.injected', 1, {'header_style' => 'baggage'})
|
62
79
|
rescue => e
|
63
|
-
::Datadog.logger.warn("Failed to encode and inject baggage header: #{e.
|
80
|
+
::Datadog.logger.warn("Failed to encode and inject baggage header: #{e.class}: #{e}")
|
64
81
|
end
|
65
82
|
end
|
66
83
|
|
@@ -72,8 +89,17 @@ module Datadog
|
|
72
89
|
baggage = parse_baggage_header(fetcher[@baggage_key])
|
73
90
|
return unless baggage
|
74
91
|
|
92
|
+
# Convert selected baggage items to span tags based on configuration
|
93
|
+
baggage_tags = build_baggage_tags(baggage)
|
94
|
+
|
95
|
+
# Record telemetry for successful extraction only if baggage is not empty
|
96
|
+
unless baggage.empty?
|
97
|
+
record_telemetry_metric('context_header_style.extracted', 1, {'header_style' => 'baggage'})
|
98
|
+
end
|
99
|
+
|
75
100
|
TraceDigest.new(
|
76
101
|
baggage: baggage,
|
102
|
+
trace_distributed_tags: baggage_tags
|
77
103
|
)
|
78
104
|
end
|
79
105
|
|
@@ -115,16 +141,55 @@ module Datadog
|
|
115
141
|
baggages.each do |key_value|
|
116
142
|
key, value = key_value.split('=', 2)
|
117
143
|
# If baggage is malformed, return an empty hash
|
118
|
-
|
144
|
+
if key.nil? || value.nil?
|
145
|
+
# Record telemetry for malformed header
|
146
|
+
record_telemetry_metric('context_header_style.malformed', 1, {'header_style' => 'baggage'})
|
147
|
+
return {}
|
148
|
+
end
|
119
149
|
|
120
150
|
key = URI.decode_www_form_component(key.strip)
|
121
151
|
value = URI.decode_www_form_component(value.strip)
|
122
|
-
|
152
|
+
if key.empty? || value.empty?
|
153
|
+
# Record telemetry for malformed header
|
154
|
+
record_telemetry_metric('context_header_style.malformed', 1, {'header_style' => 'baggage'})
|
155
|
+
return {}
|
156
|
+
end
|
123
157
|
|
124
158
|
baggage[key] = value
|
125
159
|
end
|
126
160
|
baggage
|
127
161
|
end
|
162
|
+
|
163
|
+
# Convert selected baggage items to span tags
|
164
|
+
# Baggage carries important contextual information (like user.id, session.id) across distributed services,
|
165
|
+
# but isn't searchable by default.
|
166
|
+
def build_baggage_tags(baggage)
|
167
|
+
return {} if baggage.empty?
|
168
|
+
|
169
|
+
# Get the configuration for which baggage keys should become span tags
|
170
|
+
baggage_tag_keys = @baggage_tag_keys
|
171
|
+
return {} if baggage_tag_keys.empty?
|
172
|
+
|
173
|
+
# If wildcard is specified, use all baggage keys
|
174
|
+
baggage_tag_keys = baggage if baggage_tag_keys == BAGGAGE_TAG_KEYS_MATCH_ALL
|
175
|
+
|
176
|
+
tags = {}
|
177
|
+
|
178
|
+
baggage_tag_keys.each do |key, _| # rubocop:disable Style/HashEachMethods
|
179
|
+
value = baggage[key]
|
180
|
+
next if value.nil? || value.empty?
|
181
|
+
|
182
|
+
tags["baggage.#{key}"] = value
|
183
|
+
end
|
184
|
+
|
185
|
+
tags
|
186
|
+
end
|
187
|
+
|
188
|
+
# Record telemetry metrics for baggage operations
|
189
|
+
def record_telemetry_metric(metric_name, value, tags)
|
190
|
+
telemetry = ::Datadog.send(:components).telemetry
|
191
|
+
telemetry.inc('instrumentation_telemetry_data.tracers', metric_name, value, tags: tags)
|
192
|
+
end
|
128
193
|
end
|
129
194
|
end
|
130
195
|
end
|
@@ -55,17 +55,16 @@ module Datadog
|
|
55
55
|
def extract(data)
|
56
56
|
fetcher = @fetcher.new(data)
|
57
57
|
|
58
|
-
trace_id
|
58
|
+
trace_id = parse_trace_id(fetcher)
|
59
59
|
parent_id = parse_parent_id(fetcher)
|
60
60
|
|
61
61
|
sampling_priority = Helpers.parse_decimal_id(fetcher[@sampling_priority_key])
|
62
62
|
origin = fetcher[@origin_key]
|
63
63
|
|
64
64
|
# Return early if this propagation is not valid
|
65
|
-
# DEV: To be valid we need to have a trace id and a parent id
|
66
|
-
# or when it is a synthetics trace, just the trace id.
|
65
|
+
# DEV: To be valid we need to have a trace id and a parent id or an origin id.
|
67
66
|
# DEV: `Fetcher#id` will not return 0
|
68
|
-
return
|
67
|
+
return if trace_id.nil? || parent_id.nil? && origin.nil?
|
69
68
|
|
70
69
|
trace_distributed_tags = extract_tags(fetcher)
|
71
70
|
|
@@ -173,7 +172,7 @@ module Datadog
|
|
173
172
|
|
174
173
|
def set_tags_propagation_error(reason:)
|
175
174
|
active_trace = Tracing.active_trace
|
176
|
-
active_trace
|
175
|
+
active_trace&.set_tag('_dd.propagation_error', reason)
|
177
176
|
nil
|
178
177
|
end
|
179
178
|
|
@@ -31,19 +31,17 @@ module Datadog
|
|
31
31
|
# @return [String] serialized tags hash
|
32
32
|
# @raise [EncodingError] if tags cannot be serialized to the `x-datadog-tags` format
|
33
33
|
def self.encode(tags)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
value = raw_value.to_s
|
34
|
+
tags.map do |raw_key, raw_value|
|
35
|
+
key = raw_key.to_s
|
36
|
+
value = raw_value.to_s
|
38
37
|
|
39
|
-
|
40
|
-
|
38
|
+
raise EncodingError, "Invalid key `#{key}` for value `#{value}`" unless VALID_KEY_CHARS.match?(key)
|
39
|
+
raise EncodingError, "Invalid value `#{value}` for key `#{key}`" unless VALID_VALUE_CHARS.match?(value)
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
41
|
+
"#{key}=#{value.strip}"
|
42
|
+
end.join(',')
|
43
|
+
rescue => e
|
44
|
+
raise EncodingError, "Error encoding tags `#{tags}`: `#{e}`"
|
47
45
|
end
|
48
46
|
|
49
47
|
# Deserializes a `x-datadog-tags`-formatted String into a {Hash<String,String>}.
|
@@ -52,7 +50,7 @@ module Datadog
|
|
52
50
|
# @return [Hash<String,String>] decoded input as a hash of strings
|
53
51
|
# @raise [DecodingError] if string does not conform to the `x-datadog-tags` format
|
54
52
|
def self.decode(string)
|
55
|
-
result =
|
53
|
+
result = (string.split(',').map do |raw_tag|
|
56
54
|
raw_tag.split('=', 2).tap do |raw_key, raw_value|
|
57
55
|
key = raw_key.to_s
|
58
56
|
value = raw_value.to_s
|
@@ -62,7 +60,7 @@ module Datadog
|
|
62
60
|
|
63
61
|
value.strip!
|
64
62
|
end
|
65
|
-
end
|
63
|
+
end).to_h
|
66
64
|
|
67
65
|
raise DecodingError, "Invalid empty tags: #{string}" if result.empty? && !string.empty?
|
68
66
|
|
@@ -8,10 +8,12 @@ module Datadog
|
|
8
8
|
# @see https://github.com/open-telemetry/opentelemetry-specification/blob/255a6c52b8914a2ed7e26bb5585abecab276aafc/specification/sdk-environment-variables.md?plain=1#L88
|
9
9
|
class None
|
10
10
|
# No-op
|
11
|
-
def inject!(_digest, _data)
|
11
|
+
def inject!(_digest, _data)
|
12
|
+
end
|
12
13
|
|
13
14
|
# No-op
|
14
|
-
def extract(_data)
|
15
|
+
def extract(_data)
|
16
|
+
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -155,7 +155,10 @@ module Datadog
|
|
155
155
|
# Merge with baggage if present
|
156
156
|
digest = @baggage_propagator.extract(data)
|
157
157
|
if digest
|
158
|
-
extracted_trace_digest.merge(
|
158
|
+
extracted_trace_digest.merge(
|
159
|
+
baggage: digest.baggage,
|
160
|
+
trace_distributed_tags: digest.trace_distributed_tags
|
161
|
+
)
|
159
162
|
else
|
160
163
|
extracted_trace_digest
|
161
164
|
end
|
@@ -31,7 +31,7 @@ module Datadog
|
|
31
31
|
return false
|
32
32
|
end
|
33
33
|
|
34
|
-
return pin_config[:distributed_tracing] if pin_config
|
34
|
+
return pin_config[:distributed_tracing] if pin_config&.key?(:distributed_tracing)
|
35
35
|
return global_config[:distributed_tracing] if global_config
|
36
36
|
|
37
37
|
true
|