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
@@ -163,20 +163,20 @@ module Datadog
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def name
|
166
|
-
@name ||
|
166
|
+
@name || root_span&.name
|
167
167
|
end
|
168
168
|
|
169
169
|
def resource
|
170
|
-
@resource ||
|
170
|
+
@resource || root_span&.resource
|
171
171
|
end
|
172
172
|
|
173
173
|
# When retrieving tags or metrics we need to include root span tags for sampling purposes
|
174
174
|
def get_tag(key)
|
175
|
-
super ||
|
175
|
+
super || root_span&.get_tag(key)
|
176
176
|
end
|
177
177
|
|
178
178
|
def get_metric(key)
|
179
|
-
super ||
|
179
|
+
super || root_span&.get_metric(key)
|
180
180
|
end
|
181
181
|
|
182
182
|
def set_distributed_source(product_bit)
|
@@ -201,7 +201,7 @@ module Datadog
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def service
|
204
|
-
@service ||
|
204
|
+
@service || root_span&.service
|
205
205
|
end
|
206
206
|
|
207
207
|
def measure(
|
@@ -220,9 +220,11 @@ module Datadog
|
|
220
220
|
# Don't allow more span measurements if the
|
221
221
|
# trace is already completed. Prevents multiple
|
222
222
|
# root spans with parent_span_id = 0.
|
223
|
-
|
224
|
-
|
225
|
-
|
223
|
+
if finished? || full?
|
224
|
+
return yield(
|
225
|
+
SpanOperation.new(op_name, logger: logger),
|
226
|
+
TraceOperation.new(logger: logger))
|
227
|
+
end
|
226
228
|
|
227
229
|
# Create new span
|
228
230
|
span_op = build_span(
|
@@ -253,51 +255,49 @@ module Datadog
|
|
253
255
|
type: nil,
|
254
256
|
id: nil
|
255
257
|
)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
parent = @active_span
|
262
|
-
|
263
|
-
# Use active span's span ID if available. Otherwise, the parent span ID.
|
264
|
-
# Necessary when this trace continues from another, e.g. distributed trace.
|
265
|
-
parent_id = parent ? parent.id : @parent_span_id || 0
|
266
|
-
|
267
|
-
# Build events
|
268
|
-
events ||= SpanOperation::Events.new(logger: logger)
|
269
|
-
|
270
|
-
# Before start: activate the span, publish events.
|
271
|
-
events.before_start.subscribe do |span_op|
|
272
|
-
start_span(span_op)
|
273
|
-
end
|
258
|
+
# Resolve span options:
|
259
|
+
# Parent, service name, etc.
|
260
|
+
# Add default options
|
261
|
+
trace_id = @id
|
262
|
+
parent = @active_span
|
274
263
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
264
|
+
# Use active span's span ID if available. Otherwise, the parent span ID.
|
265
|
+
# Necessary when this trace continues from another, e.g. distributed trace.
|
266
|
+
parent_id = parent ? parent.id : @parent_span_id || 0
|
267
|
+
|
268
|
+
# Build events
|
269
|
+
events ||= SpanOperation::Events.new(logger: logger)
|
279
270
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
logger: logger,
|
284
|
-
events: events,
|
285
|
-
on_error: on_error,
|
286
|
-
parent_id: parent_id,
|
287
|
-
resource: resource || op_name,
|
288
|
-
service: service,
|
289
|
-
start_time: start_time,
|
290
|
-
tags: tags,
|
291
|
-
trace_id: trace_id,
|
292
|
-
type: type,
|
293
|
-
id: id
|
294
|
-
)
|
295
|
-
rescue StandardError => e
|
296
|
-
logger.debug { "Failed to build new span: #{e}" }
|
297
|
-
|
298
|
-
# Return dummy span
|
299
|
-
SpanOperation.new(op_name, logger: logger)
|
271
|
+
# Before start: activate the span, publish events.
|
272
|
+
events.before_start.subscribe do |span_op|
|
273
|
+
start_span(span_op)
|
300
274
|
end
|
275
|
+
|
276
|
+
# After finish: deactivate the span, record, publish events.
|
277
|
+
events.after_finish.subscribe do |span, span_op|
|
278
|
+
finish_span(span, span_op, parent)
|
279
|
+
end
|
280
|
+
|
281
|
+
# Build a new span operation
|
282
|
+
SpanOperation.new(
|
283
|
+
op_name,
|
284
|
+
logger: logger,
|
285
|
+
events: events,
|
286
|
+
on_error: on_error,
|
287
|
+
parent_id: parent_id,
|
288
|
+
resource: resource || op_name,
|
289
|
+
service: service,
|
290
|
+
start_time: start_time,
|
291
|
+
tags: tags,
|
292
|
+
trace_id: trace_id,
|
293
|
+
type: type,
|
294
|
+
id: id
|
295
|
+
)
|
296
|
+
rescue => e
|
297
|
+
logger.debug { "Failed to build new span: #{e}" }
|
298
|
+
|
299
|
+
# Return dummy span
|
300
|
+
SpanOperation.new(op_name, logger: logger)
|
301
301
|
end
|
302
302
|
|
303
303
|
# Returns a {TraceSegment} with all finished spans that can be flushed
|
@@ -325,7 +325,7 @@ module Datadog
|
|
325
325
|
# We should move the sample call to inject and right before moving to new contexts(threads, forking etc.)
|
326
326
|
def to_digest
|
327
327
|
# Resolve current span ID
|
328
|
-
span_id = @active_span
|
328
|
+
span_id = @active_span&.id
|
329
329
|
span_id ||= @parent_span_id unless finished?
|
330
330
|
# sample the trace_operation with the tracer
|
331
331
|
events.trace_propagated.publish(self)
|
@@ -349,13 +349,13 @@ module Datadog
|
|
349
349
|
trace_state: @trace_state,
|
350
350
|
trace_state_unknown_fields: @trace_state_unknown_fields,
|
351
351
|
span_remote: @remote_parent && @active_span.nil?,
|
352
|
-
baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
|
352
|
+
baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
|
353
353
|
).freeze
|
354
354
|
end
|
355
355
|
|
356
356
|
def to_correlation
|
357
357
|
# Resolve current span ID
|
358
|
-
span_id = @active_span
|
358
|
+
span_id = @active_span&.id
|
359
359
|
span_id ||= @parent_span_id unless finished?
|
360
360
|
|
361
361
|
Correlation::Identifier.new(
|
@@ -369,22 +369,22 @@ module Datadog
|
|
369
369
|
def fork_clone
|
370
370
|
self.class.new(
|
371
371
|
agent_sample_rate: @agent_sample_rate,
|
372
|
-
events: @events
|
373
|
-
hostname: @hostname
|
372
|
+
events: @events&.dup,
|
373
|
+
hostname: @hostname&.dup,
|
374
374
|
id: @id,
|
375
375
|
max_length: @max_length,
|
376
|
-
name: name
|
377
|
-
origin: @origin
|
378
|
-
parent_span_id:
|
376
|
+
name: name&.dup,
|
377
|
+
origin: @origin&.dup,
|
378
|
+
parent_span_id: @active_span&.id || @parent_span_id,
|
379
379
|
rate_limiter_rate: @rate_limiter_rate,
|
380
|
-
resource: resource
|
380
|
+
resource: resource&.dup,
|
381
381
|
rule_sample_rate: @rule_sample_rate,
|
382
382
|
sample_rate: @sample_rate,
|
383
383
|
sampled: @sampled,
|
384
384
|
sampling_priority: @sampling_priority,
|
385
|
-
service: service
|
386
|
-
trace_state: @trace_state
|
387
|
-
trace_state_unknown_fields: @trace_state_unknown_fields
|
385
|
+
service: service&.dup,
|
386
|
+
trace_state: @trace_state&.dup,
|
387
|
+
trace_state_unknown_fields: @trace_state_unknown_fields&.dup,
|
388
388
|
tags: meta.dup,
|
389
389
|
metrics: metrics.dup,
|
390
390
|
remote_parent: @remote_parent
|
@@ -472,41 +472,37 @@ module Datadog
|
|
472
472
|
end
|
473
473
|
|
474
474
|
def start_span(span_op)
|
475
|
-
|
476
|
-
activate_span!(span_op)
|
475
|
+
activate_span!(span_op)
|
477
476
|
|
478
|
-
|
479
|
-
|
477
|
+
# Update active span count
|
478
|
+
@active_span_count += 1
|
480
479
|
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
end
|
480
|
+
# Publish :span_before_start event
|
481
|
+
events.span_before_start.publish(span_op, self)
|
482
|
+
rescue => e
|
483
|
+
logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
486
484
|
end
|
487
485
|
|
488
486
|
def finish_span(span, span_op, parent)
|
489
|
-
|
490
|
-
|
491
|
-
@spans << span unless span.nil?
|
487
|
+
# Save finished span & root span
|
488
|
+
@spans << span unless span.nil?
|
492
489
|
|
493
|
-
|
494
|
-
|
490
|
+
# Deactivate the span, re-activate parent.
|
491
|
+
deactivate_span!(span_op)
|
495
492
|
|
496
|
-
|
497
|
-
|
493
|
+
# Set finished, to signal root span has completed.
|
494
|
+
@finished = true if span_op == root_span
|
498
495
|
|
499
|
-
|
500
|
-
|
496
|
+
# Update active span count
|
497
|
+
@active_span_count -= 1
|
501
498
|
|
502
|
-
|
503
|
-
|
499
|
+
# Publish :span_finished event
|
500
|
+
events.span_finished.publish(span, self)
|
504
501
|
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
end
|
502
|
+
# Publish :trace_finished event
|
503
|
+
events.trace_finished.publish(self) if finished?
|
504
|
+
rescue => e
|
505
|
+
logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
510
506
|
end
|
511
507
|
|
512
508
|
# Track the root span
|
@@ -535,7 +531,7 @@ module Datadog
|
|
535
531
|
service: service,
|
536
532
|
tags: meta,
|
537
533
|
metrics: metrics,
|
538
|
-
root_span_id: !partial ? root_span
|
534
|
+
root_span_id: (!partial) ? root_span&.id : nil,
|
539
535
|
profiling_enabled: @profiling_enabled,
|
540
536
|
apm_tracing_enabled: @apm_tracing_enabled
|
541
537
|
)
|
@@ -68,8 +68,8 @@ module Datadog
|
|
68
68
|
|
69
69
|
# Does not make an effort to move metrics out of tags
|
70
70
|
# The caller is expected to have done that
|
71
|
-
@meta =
|
72
|
-
@metrics =
|
71
|
+
@meta = tags&.dup || {}
|
72
|
+
@metrics = metrics&.dup || {}
|
73
73
|
|
74
74
|
# Set well-known tags, defaulting to getting the values from tags
|
75
75
|
@agent_sample_rate = agent_sample_rate || agent_sample_rate_tag
|
@@ -149,11 +149,11 @@ module Datadog
|
|
149
149
|
context = call_context
|
150
150
|
active_trace = context.active_trace
|
151
151
|
trace = if continue_from || active_trace.nil?
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
rescue
|
152
|
+
start_trace(continue_from: continue_from)
|
153
|
+
else
|
154
|
+
active_trace
|
155
|
+
end
|
156
|
+
rescue => e
|
157
157
|
logger.debug { "Failed to trace: #{e}" }
|
158
158
|
|
159
159
|
# Tracing failed: fallback and run code without tracing.
|
@@ -194,7 +194,6 @@ module Datadog
|
|
194
194
|
)
|
195
195
|
end
|
196
196
|
end
|
197
|
-
# rubocop:enable Metrics/MethodLength
|
198
197
|
|
199
198
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
200
199
|
# appended to each span created by the tracer. Keys and values must be strings.
|
@@ -225,7 +224,7 @@ module Datadog
|
|
225
224
|
# @return [nil] if no trace is active, and thus no span is active
|
226
225
|
def active_span(key = nil)
|
227
226
|
trace = active_trace(key)
|
228
|
-
trace
|
227
|
+
trace&.active_span
|
229
228
|
end
|
230
229
|
|
231
230
|
# Information about the currently active trace.
|
@@ -272,12 +271,10 @@ module Datadog
|
|
272
271
|
|
273
272
|
# Sample a span, tagging the trace as appropriate.
|
274
273
|
def sample_trace(trace_op)
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
280
|
-
end
|
274
|
+
@sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
|
275
|
+
rescue => e
|
276
|
+
SAMPLE_TRACE_LOG_ONLY_ONCE.run do
|
277
|
+
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
281
278
|
end
|
282
279
|
end
|
283
280
|
|
@@ -297,7 +294,7 @@ module Datadog
|
|
297
294
|
# description of and constraints on arguments.
|
298
295
|
# rubocop:disable Lint/UselessMethodDefinition
|
299
296
|
def publish(trace)
|
300
|
-
super
|
297
|
+
super
|
301
298
|
end
|
302
299
|
# rubocop:enable Lint/UselessMethodDefinition
|
303
300
|
end
|
@@ -315,7 +312,7 @@ module Datadog
|
|
315
312
|
def shutdown!
|
316
313
|
return unless @enabled
|
317
314
|
|
318
|
-
@writer
|
315
|
+
@writer&.stop
|
319
316
|
end
|
320
317
|
|
321
318
|
private
|
@@ -335,12 +332,12 @@ module Datadog
|
|
335
332
|
def build_trace(digest = nil)
|
336
333
|
# Resolve hostname if configured
|
337
334
|
hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
|
338
|
-
hostname = hostname && !hostname.empty? ? hostname : nil
|
335
|
+
hostname = (hostname && !hostname.empty?) ? hostname : nil
|
339
336
|
|
340
337
|
if digest
|
341
338
|
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
342
|
-
|
343
|
-
|
339
|
+
digest.trace_sampling_priority
|
340
|
+
end
|
344
341
|
TraceOperation.new(
|
345
342
|
logger: logger,
|
346
343
|
hostname: hostname,
|
@@ -369,7 +366,9 @@ module Datadog
|
|
369
366
|
)
|
370
367
|
end
|
371
368
|
end
|
369
|
+
# rubocop:enable Metrics/MethodLength
|
372
370
|
|
371
|
+
# rubocop:disable Metrics/MethodLength
|
373
372
|
def bind_trace_events!(trace_op)
|
374
373
|
events = trace_op.send(:events)
|
375
374
|
|
@@ -388,6 +387,7 @@ module Datadog
|
|
388
387
|
flush_trace(event_trace_op)
|
389
388
|
end
|
390
389
|
end
|
390
|
+
# rubocop:enable Metrics/MethodLength
|
391
391
|
|
392
392
|
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
393
393
|
# @return [TraceOperation]
|
@@ -402,6 +402,7 @@ module Datadog
|
|
402
402
|
end
|
403
403
|
|
404
404
|
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
405
|
+
# rubocop:disable Metrics/MethodLength
|
405
406
|
def start_span(
|
406
407
|
name,
|
407
408
|
continue_from: nil,
|
@@ -454,16 +455,17 @@ module Datadog
|
|
454
455
|
end
|
455
456
|
end
|
456
457
|
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
458
|
+
# rubocop:enable Metrics/MethodLength
|
457
459
|
|
458
460
|
def resolve_tags(tags, service)
|
459
461
|
merged_tags = if @tags.any? && tags
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
462
|
+
# Combine default tags with provided tags,
|
463
|
+
# preferring provided tags.
|
464
|
+
@tags.merge(tags)
|
465
|
+
else
|
466
|
+
# Use provided tags or default tags if none.
|
467
|
+
tags || @tags.dup
|
468
|
+
end
|
467
469
|
# Remove version tag if service is not the default service
|
468
470
|
if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
|
469
471
|
merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
|
@@ -507,12 +509,10 @@ module Datadog
|
|
507
509
|
private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
|
508
510
|
|
509
511
|
def sample_span(trace_op, span)
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
515
|
-
end
|
512
|
+
@span_sampler.sample!(trace_op, span)
|
513
|
+
rescue => e
|
514
|
+
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
515
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
516
516
|
end
|
517
517
|
end
|
518
518
|
|
@@ -521,13 +521,11 @@ module Datadog
|
|
521
521
|
|
522
522
|
# Flush finished spans from the trace buffer, send them to writer.
|
523
523
|
def flush_trace(trace_op)
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
530
|
-
end
|
524
|
+
trace = @trace_flush.consume!(trace_op)
|
525
|
+
write(trace) if trace && !trace.empty?
|
526
|
+
rescue => e
|
527
|
+
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
528
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
531
529
|
end
|
532
530
|
end
|
533
531
|
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
update_stats_from_response!(response)
|
31
31
|
|
32
32
|
response
|
33
|
-
rescue
|
33
|
+
rescue => e
|
34
34
|
message =
|
35
35
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
36
36
|
"Location: #{Array(e.backtrace).first}"
|
@@ -95,10 +95,10 @@ module Datadog
|
|
95
95
|
env.body = env.request.parcel.data
|
96
96
|
|
97
97
|
# Query for response
|
98
|
-
http_response = super
|
98
|
+
http_response = super
|
99
99
|
|
100
100
|
# Process the response
|
101
|
-
response_options = {
|
101
|
+
response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
|
102
102
|
# Parse service rates, if configured to do so.
|
103
103
|
if service_rates? && !http_response.payload.to_s.empty?
|
104
104
|
body = JSON.parse(http_response.payload)
|
@@ -30,17 +30,17 @@ module Datadog
|
|
30
30
|
# If block is given, allow it to handle writing
|
31
31
|
# Otherwise do a standard encode/write/response.
|
32
32
|
response = if block_given?
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
yield(out, request)
|
34
|
+
else
|
35
|
+
@request_block.call(out, request)
|
36
|
+
end
|
37
37
|
|
38
38
|
# Update statistics
|
39
39
|
update_stats_from_response!(response)
|
40
40
|
|
41
41
|
# Return response
|
42
42
|
response
|
43
|
-
rescue
|
43
|
+
rescue => e
|
44
44
|
message =
|
45
45
|
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
46
46
|
"Location: #{Array(e.backtrace).first}"
|
@@ -66,11 +66,11 @@ module Datadog
|
|
66
66
|
# number of traces
|
67
67
|
def encode_in_chunks(traces)
|
68
68
|
encoded_traces = if traces.respond_to?(:filter_map)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
69
|
+
# DEV Supported since Ruby 2.7, saves an intermediate object creation
|
70
|
+
traces.filter_map { |t| encode_one(t) }
|
71
|
+
else
|
72
|
+
traces.map { |t| encode_one(t) }.reject(&:nil?)
|
73
|
+
end
|
74
74
|
|
75
75
|
Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
|
76
76
|
[encoder.join(chunk), chunk.size]
|
@@ -45,7 +45,7 @@ module Datadog
|
|
45
45
|
def write_traces(traces)
|
46
46
|
traces = process_traces(traces)
|
47
47
|
flush_traces(traces)
|
48
|
-
rescue
|
48
|
+
rescue => e
|
49
49
|
logger.warn(
|
50
50
|
"Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
51
51
|
)
|
@@ -119,7 +119,7 @@ module Datadog
|
|
119
119
|
# WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
|
120
120
|
# result from the writer, whereas this method always returns nil.
|
121
121
|
def perform(traces)
|
122
|
-
super
|
122
|
+
super.tap do |responses|
|
123
123
|
loop_back_off! if responses.find(&:server_error?)
|
124
124
|
end
|
125
125
|
|
@@ -152,16 +152,16 @@ module Datadog
|
|
152
152
|
|
153
153
|
def fork_policy=(policy)
|
154
154
|
# Translate to Workers::Async::Thread policy
|
155
|
-
thread_fork_policy =
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
155
|
+
thread_fork_policy = case policy
|
156
|
+
when Core::Workers::Async::Thread::FORK_POLICY_STOP
|
157
|
+
policy
|
158
|
+
when FORK_POLICY_SYNC
|
159
|
+
# Stop the async thread because the writer
|
160
|
+
# will bypass and run synchronously.
|
161
|
+
Core::Workers::Async::Thread::FORK_POLICY_STOP
|
162
|
+
else
|
163
|
+
Core::Workers::Async::Thread::FORK_POLICY_RESTART
|
164
|
+
end
|
165
165
|
|
166
166
|
# Update thread fork policy
|
167
167
|
super(thread_fork_policy)
|
@@ -53,7 +53,7 @@ module Datadog
|
|
53
53
|
traces = @trace_buffer.pop
|
54
54
|
traces = Pipeline.process!(traces)
|
55
55
|
@trace_task.call(traces, @transport) unless @trace_task.nil? || traces.empty?
|
56
|
-
rescue
|
56
|
+
rescue => e
|
57
57
|
# ensures that the thread will not die because of an exception.
|
58
58
|
# TODO[manu]: findout the reason and reschedule the send if it's not
|
59
59
|
# a fatal exception
|
@@ -107,7 +107,7 @@ module Datadog
|
|
107
107
|
|
108
108
|
private
|
109
109
|
|
110
|
-
|
110
|
+
alias_method :flush_data, :callback_traces
|
111
111
|
|
112
112
|
def perform
|
113
113
|
loop do
|
data/lib/datadog/tracing.rb
CHANGED
@@ -81,7 +81,7 @@ module Datadog
|
|
81
81
|
# @public_api
|
82
82
|
def keep!
|
83
83
|
trace = active_trace
|
84
|
-
trace
|
84
|
+
trace&.keep!
|
85
85
|
end
|
86
86
|
|
87
87
|
# (see Datadog::Tracing::TraceSegment#reject!)
|
@@ -89,7 +89,7 @@ module Datadog
|
|
89
89
|
# @public_api
|
90
90
|
def reject!
|
91
91
|
trace = active_trace
|
92
|
-
trace
|
92
|
+
trace&.reject!
|
93
93
|
end
|
94
94
|
|
95
95
|
# (see Datadog::Tracing::Tracer#active_correlation)
|