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
@@ -52,7 +52,7 @@ module Datadog
|
|
52
52
|
tags ||= {}
|
53
53
|
tags[Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER] = decision
|
54
54
|
when :drop
|
55
|
-
tags
|
55
|
+
tags&.delete(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -128,7 +128,7 @@ module Datadog
|
|
128
128
|
# @param parent_id [Integer] 64-bit
|
129
129
|
# @param trace_flags [Integer] 8-bit
|
130
130
|
def build_traceparent_string(trace_id, parent_id, trace_flags)
|
131
|
-
"00-#{format(
|
131
|
+
"00-#{format("%032x", trace_id)}-#{format("%016x", parent_id)}-#{format("%02x", trace_flags)}"
|
132
132
|
end
|
133
133
|
|
134
134
|
# Sets the trace flag to an existing `trace_flags`.
|
@@ -148,12 +148,14 @@ module Datadog
|
|
148
148
|
|
149
149
|
# @see https://www.w3.org/TR/trace-context/#tracestate-header
|
150
150
|
def build_tracestate(digest)
|
151
|
-
tracestate =
|
151
|
+
tracestate = +'dd='
|
152
152
|
tracestate << last_dd_parent_id(digest)
|
153
153
|
tracestate << "s:#{digest.trace_sampling_priority};" if digest.trace_sampling_priority
|
154
154
|
tracestate << "o:#{serialize_origin(digest.trace_origin)};" if digest.trace_origin
|
155
155
|
|
156
|
-
|
156
|
+
# Replacing this by safe navigation seems to have a different behaviour on Rubies <= 3.0.
|
157
|
+
# It cause a LocalJumpError in the CI.
|
158
|
+
if digest.trace_distributed_tags # rubocop:disable Style/SafeNavigation
|
157
159
|
digest.trace_distributed_tags.each do |name, value|
|
158
160
|
tag = "t.#{serialize_tag_key(name)}:#{serialize_tag_value(value)};"
|
159
161
|
|
@@ -187,7 +189,7 @@ module Datadog
|
|
187
189
|
# Ensure the list has at most 31 elements, as we need to prepend Datadog's
|
188
190
|
# entry and the limit is 32 elements total.
|
189
191
|
vendors = vendors[0..30]
|
190
|
-
"#{tracestate},#{vendors.join(
|
192
|
+
"#{tracestate},#{vendors.join(",")}"
|
191
193
|
else
|
192
194
|
tracestate.to_s
|
193
195
|
end
|
@@ -199,7 +201,7 @@ module Datadog
|
|
199
201
|
def last_dd_parent_id(digest)
|
200
202
|
if !digest.span_remote
|
201
203
|
span_id = digest.span_id || 0 # Fall back to zero (invalid) if not present
|
202
|
-
"p:#{format(
|
204
|
+
"p:#{format("%016x", span_id)};"
|
203
205
|
elsif digest.trace_distributed_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID)
|
204
206
|
"p:#{digest.trace_distributed_tags[Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID]};"
|
205
207
|
else
|
@@ -216,10 +218,10 @@ module Datadog
|
|
216
218
|
# DEV: come from Datadog-controlled sources.
|
217
219
|
# DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
|
218
220
|
value = if INVALID_ORIGIN_CHARS.match?(value)
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
221
|
+
value.gsub(INVALID_ORIGIN_CHARS, '_')
|
222
|
+
else
|
223
|
+
value
|
224
|
+
end
|
223
225
|
|
224
226
|
if REMAP_ORIGIN_CHARS.match?(value)
|
225
227
|
value.gsub(REMAP_ORIGIN_CHARS, '~')
|
@@ -253,10 +255,10 @@ module Datadog
|
|
253
255
|
# DEV: come from Datadog-controlled sources.
|
254
256
|
# DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
|
255
257
|
ret = if INVALID_TAG_VALUE_CHARS.match?(value)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
258
|
+
value.gsub(INVALID_TAG_VALUE_CHARS, '_')
|
259
|
+
else
|
260
|
+
value
|
261
|
+
end
|
260
262
|
|
261
263
|
# DEV: Checking for an unlikely '=' is faster than a no-op `tr`.
|
262
264
|
if ret.include?('=')
|
@@ -333,7 +335,11 @@ module Datadog
|
|
333
335
|
key, value = pair.split(':', 2)
|
334
336
|
case key
|
335
337
|
when 's'
|
336
|
-
sampling_priority =
|
338
|
+
sampling_priority = begin
|
339
|
+
Integer(value)
|
340
|
+
rescue
|
341
|
+
nil
|
342
|
+
end
|
337
343
|
when 'o'
|
338
344
|
origin = value
|
339
345
|
when 'p'
|
@@ -350,7 +356,7 @@ module Datadog
|
|
350
356
|
tags ||= {}
|
351
357
|
tags["#{Tracing::Metadata::Ext::Distributed::TAGS_PREFIX}#{key}"] = value
|
352
358
|
else
|
353
|
-
unknown_fields ||=
|
359
|
+
unknown_fields ||= +''
|
354
360
|
unknown_fields << pair
|
355
361
|
unknown_fields << ';'
|
356
362
|
end
|
@@ -59,13 +59,11 @@ module Datadog
|
|
59
59
|
|
60
60
|
def publish(*args)
|
61
61
|
subscriptions.each do |block|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
"at #{Array(e.backtrace).first}"
|
68
|
-
end
|
62
|
+
block.call(*args)
|
63
|
+
rescue => e
|
64
|
+
Datadog.logger.debug do
|
65
|
+
"Error while handling '#{name}' event with '#{block}': #{e.class.name} #{e.message} " \
|
66
|
+
"at #{Array(e.backtrace).first}"
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
@@ -12,7 +12,7 @@ module Datadog
|
|
12
12
|
case key
|
13
13
|
when Ext::Analytics::TAG_ENABLED
|
14
14
|
# If true, set rate to 1.0, otherwise set 0.0.
|
15
|
-
value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
15
|
+
value = (value == true) ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
16
16
|
Tracing::Analytics.set_sample_rate(self, value)
|
17
17
|
when Ext::Analytics::TAG_SAMPLE_RATE
|
18
18
|
Tracing::Analytics.set_sample_rate(self, value)
|
@@ -51,7 +51,7 @@ module Datadog
|
|
51
51
|
# Encode strings in UTF-8 to facilitate downstream serialization
|
52
52
|
meta[Core::Utils.utf8_encode(key)] = Core::Utils.utf8_encode(value)
|
53
53
|
end
|
54
|
-
rescue
|
54
|
+
rescue => e
|
55
55
|
Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
|
56
56
|
end
|
57
57
|
|
@@ -80,10 +80,10 @@ module Datadog
|
|
80
80
|
end
|
81
81
|
|
82
82
|
# Convenient interface for setting a single tag.
|
83
|
-
|
83
|
+
alias_method :[]=, :set_tag
|
84
84
|
|
85
85
|
# Convenient interface for getting a single tag.
|
86
|
-
|
86
|
+
alias_method :[], :get_tag
|
87
87
|
|
88
88
|
# Return the metric with the given key, nil if it doesn't exist.
|
89
89
|
def get_metric(key)
|
@@ -101,7 +101,7 @@ module Datadog
|
|
101
101
|
|
102
102
|
# Encode strings in UTF-8 to facilitate downstream serialization
|
103
103
|
metrics[Core::Utils.utf8_encode(key)] = value
|
104
|
-
rescue
|
104
|
+
rescue => e
|
105
105
|
Datadog.logger.debug("Unable to set the metric #{key}, ignoring it. Caused by: #{e}")
|
106
106
|
end
|
107
107
|
|
@@ -47,7 +47,7 @@ module Datadog
|
|
47
47
|
next nil if current_trace.nil? || current_trace.empty?
|
48
48
|
|
49
49
|
process_result = processor.call(current_trace)
|
50
|
-
process_result && process_result.empty? ? nil : process_result
|
50
|
+
(process_result && process_result.empty?) ? nil : process_result
|
51
51
|
end
|
52
52
|
rescue => e
|
53
53
|
Datadog.logger.debug(
|
@@ -47,8 +47,6 @@ module Datadog
|
|
47
47
|
MANUAL = '-4'
|
48
48
|
# Formerly AppSec.
|
49
49
|
ASM = '-5'
|
50
|
-
# Single Span Sampled.
|
51
|
-
SPAN_SAMPLING_RATE = '-8'
|
52
50
|
# Dynamically configured rule, explicitly created by the user.
|
53
51
|
REMOTE_USER_RULE = '-11'
|
54
52
|
# Dynamically configured rule, automatically generated by Datadog.
|
@@ -30,26 +30,26 @@ module Datadog
|
|
30
30
|
default_sampler: nil
|
31
31
|
)
|
32
32
|
@rules = if default_sample_rate && !default_sampler
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
# Add to the end of the rule list a rule always matches any trace
|
34
|
+
rules << SimpleRule.new(sample_rate: default_sample_rate)
|
35
|
+
else
|
36
|
+
rules
|
37
|
+
end
|
38
38
|
@rate_limiter = if rate_limiter
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
39
|
+
rate_limiter
|
40
|
+
elsif rate_limit
|
41
|
+
Core::TokenBucket.new(rate_limit)
|
42
|
+
else
|
43
|
+
Core::UnlimitedLimiter.new
|
44
|
+
end
|
45
45
|
@default_sampler = if default_sampler
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
default_sampler
|
47
|
+
elsif default_sample_rate
|
48
|
+
nil
|
49
|
+
else
|
50
|
+
# TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
|
51
|
+
RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
|
52
|
+
end
|
53
53
|
end
|
54
54
|
|
55
55
|
def self.parse(rules, rate_limit, default_sample_rate)
|
@@ -130,17 +130,17 @@ module Datadog
|
|
130
130
|
set_limiter_metrics(trace, rate_limiter.effective_rate)
|
131
131
|
|
132
132
|
provenance = case rule.provenance
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
133
|
+
when Rule::PROVENANCE_REMOTE_USER
|
134
|
+
Ext::Decision::REMOTE_USER_RULE
|
135
|
+
when Rule::PROVENANCE_REMOTE_DYNAMIC
|
136
|
+
Ext::Decision::REMOTE_DYNAMIC_RULE
|
137
|
+
else
|
138
|
+
Ext::Decision::TRACE_SAMPLING_RULE
|
139
|
+
end
|
140
140
|
|
141
141
|
trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, provenance)
|
142
142
|
end
|
143
|
-
rescue
|
143
|
+
rescue => e
|
144
144
|
Datadog.logger.error(
|
145
145
|
"Rule sampling failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
146
146
|
)
|
@@ -153,10 +153,10 @@ module Datadog
|
|
153
153
|
# was responsible for the sampling decision.
|
154
154
|
def set_priority(trace, sampled)
|
155
155
|
trace.sampling_priority = if sampled
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
156
|
+
Sampling::Ext::Priority::USER_KEEP
|
157
|
+
else
|
158
|
+
Sampling::Ext::Priority::USER_REJECT
|
159
|
+
end
|
160
160
|
end
|
161
161
|
|
162
162
|
def set_rule_metrics(trace, sample_rate)
|
@@ -28,7 +28,7 @@ module Datadog
|
|
28
28
|
list = JSON.parse(rules)
|
29
29
|
rescue => e
|
30
30
|
Datadog.logger.warn(
|
31
|
-
"Error parsing Span Sampling Rules `#{rules.inspect}`: "\
|
31
|
+
"Error parsing Span Sampling Rules `#{rules.inspect}`: " \
|
32
32
|
"#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
33
33
|
)
|
34
34
|
return nil
|
@@ -58,13 +58,6 @@ module Datadog
|
|
58
58
|
|
59
59
|
next if decision == :not_matched # Iterate until we find a matching decision
|
60
60
|
|
61
|
-
if decision == :kept
|
62
|
-
trace_op.set_tag(
|
63
|
-
Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
64
|
-
Sampling::Ext::Decision::SPAN_SAMPLING_RATE
|
65
|
-
)
|
66
|
-
end
|
67
|
-
|
68
61
|
break # Found either a `kept` or `rejected` decision
|
69
62
|
end
|
70
63
|
|
data/lib/datadog/tracing/span.rb
CHANGED
@@ -41,7 +41,7 @@ module Datadog
|
|
41
41
|
# of being limiting span events to the size limit of a span tag.
|
42
42
|
# All Datadog agents support this format.
|
43
43
|
def to_hash
|
44
|
-
h = {
|
44
|
+
h = {'name' => @name, 'time_unix_nano' => @time_unix_nano}
|
45
45
|
h['attributes'] = @attributes unless @attributes.empty?
|
46
46
|
h
|
47
47
|
end
|
@@ -51,15 +51,15 @@ module Datadog
|
|
51
51
|
# This serialization format removes the serialization limitations of the `span.set_tag('events)` approach,
|
52
52
|
# but is only supported by newer version of the Datadog agent.
|
53
53
|
def to_native_format
|
54
|
-
h = {
|
54
|
+
h = {'name' => @name, 'time_unix_nano' => @time_unix_nano}
|
55
55
|
|
56
56
|
attr = {}
|
57
57
|
@attributes.each do |key, value|
|
58
58
|
attr[key] = if value.is_a?(Array)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
59
|
+
{type: ARRAY_TYPE, array_value: {values: value.map { |v| serialize_native_attribute(v) }}}
|
60
|
+
else
|
61
|
+
serialize_native_attribute(value)
|
62
|
+
end
|
63
63
|
end
|
64
64
|
|
65
65
|
h['attributes'] = attr unless @attributes.empty?
|
@@ -144,13 +144,13 @@ module Datadog
|
|
144
144
|
def serialize_native_attribute(value)
|
145
145
|
case value
|
146
146
|
when String
|
147
|
-
{
|
147
|
+
{type: STRING_TYPE, string_value: value}
|
148
148
|
when TrueClass, FalseClass
|
149
|
-
{
|
149
|
+
{type: BOOLEAN_TYPE, bool_value: value}
|
150
150
|
when Integer
|
151
|
-
{
|
151
|
+
{type: INTEGER_TYPE, int_value: value}
|
152
152
|
when Float
|
153
|
-
{
|
153
|
+
{type: DOUBLE_TYPE, double_value: value}
|
154
154
|
else
|
155
155
|
# This is technically unreachable due to the validation in #initialize.
|
156
156
|
raise ArgumentError, "Attribute must be a string, number, or boolean: #{value}."
|
@@ -47,15 +47,15 @@ module Datadog
|
|
47
47
|
@span_id = digest.span_id
|
48
48
|
@trace_id = digest.trace_id
|
49
49
|
@trace_flags = if digest.trace_sampling_priority.nil?
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@trace_state = digest.trace_state
|
50
|
+
nil
|
51
|
+
elsif digest.trace_sampling_priority > 0
|
52
|
+
1
|
53
|
+
else
|
54
|
+
0
|
55
|
+
end
|
56
|
+
@trace_state = digest.trace_state&.dup
|
57
57
|
@dropped_attributes = 0
|
58
|
-
@attributes =
|
58
|
+
@attributes = attributes&.dup || {}
|
59
59
|
end
|
60
60
|
|
61
61
|
def to_hash
|
@@ -81,10 +81,10 @@ module Datadog
|
|
81
81
|
# If traceflags set, the high bit (bit 31) should be set to 1 (uint32).
|
82
82
|
# This helps us distinguish between when the sample decision is zero or not set
|
83
83
|
h[:flags] = if @trace_flags.nil?
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
0
|
85
|
+
else
|
86
|
+
@trace_flags | (1 << 31)
|
87
|
+
end
|
88
88
|
h
|
89
89
|
end
|
90
90
|
end
|
@@ -157,7 +157,7 @@ module Datadog
|
|
157
157
|
# running, to minimize impact on normal application function.
|
158
158
|
begin
|
159
159
|
start
|
160
|
-
rescue
|
160
|
+
rescue => e
|
161
161
|
logger.debug { "Failed to start span: #{e}" }
|
162
162
|
ensure
|
163
163
|
# We should yield to the provided block when possible, as this
|
@@ -387,7 +387,7 @@ module Datadog
|
|
387
387
|
class Events
|
388
388
|
include Tracing::Events
|
389
389
|
|
390
|
-
DEFAULT_ON_ERROR = proc { |span_op, error| span_op
|
390
|
+
DEFAULT_ON_ERROR = proc { |span_op, error| span_op&.set_error(error) }
|
391
391
|
|
392
392
|
attr_reader \
|
393
393
|
:logger,
|
@@ -448,23 +448,21 @@ module Datadog
|
|
448
448
|
original = @handler
|
449
449
|
|
450
450
|
@handler = proc do |op, error|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
451
|
+
yield(op, error)
|
452
|
+
rescue => e
|
453
|
+
logger.debug do
|
454
|
+
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
456
455
|
Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
457
|
-
end
|
458
|
-
|
459
|
-
original.call(op, error) if original
|
460
456
|
end
|
457
|
+
|
458
|
+
original&.call(op, error)
|
461
459
|
end
|
462
460
|
end
|
463
461
|
|
464
462
|
def publish(*args)
|
465
463
|
begin
|
466
464
|
@handler.call(*args)
|
467
|
-
rescue
|
465
|
+
rescue => e
|
468
466
|
logger.debug do
|
469
467
|
"Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
|
470
468
|
end
|
@@ -162,29 +162,27 @@ module Datadog
|
|
162
162
|
# DEV: Because we want to sometimes freeze the values provided to `TraceDigest`, it's best
|
163
163
|
# DEV: to let `#initialize` decide how to handle each field, instead of duplicating that logic here.
|
164
164
|
TraceDigest.new(
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
baggage: baggage
|
187
|
-
}.merge!(field_value_pairs)
|
165
|
+
span_id: span_id,
|
166
|
+
span_name: span_name,
|
167
|
+
span_resource: span_resource,
|
168
|
+
span_service: span_service,
|
169
|
+
span_type: span_type,
|
170
|
+
trace_distributed_tags: trace_distributed_tags,
|
171
|
+
trace_hostname: trace_hostname,
|
172
|
+
trace_id: trace_id,
|
173
|
+
trace_name: trace_name,
|
174
|
+
trace_origin: trace_origin,
|
175
|
+
trace_process_id: trace_process_id,
|
176
|
+
trace_resource: trace_resource,
|
177
|
+
trace_runtime_id: trace_runtime_id,
|
178
|
+
trace_sampling_priority: trace_sampling_priority,
|
179
|
+
trace_service: trace_service,
|
180
|
+
trace_distributed_id: trace_distributed_id,
|
181
|
+
trace_flags: trace_flags,
|
182
|
+
trace_state: trace_state,
|
183
|
+
trace_state_unknown_fields: trace_state_unknown_fields,
|
184
|
+
span_remote: span_remote,
|
185
|
+
baggage: baggage, **field_value_pairs
|
188
186
|
)
|
189
187
|
end
|
190
188
|
end
|