datadog 2.19.0 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/option.rb +29 -20
- data/lib/datadog/core/configuration/option_definition.rb +2 -2
- data/lib/datadog/core/configuration/options.rb +13 -7
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di.rb +0 -1
- data/lib/datadog/kit/appsec/events/v2.rb +5 -4
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling.rb +6 -8
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -2
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +5 -4
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +5 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +9 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- metadata +15 -6
@@ -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
|
@@ -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.
|