datadog 2.46.0 → 2.48.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 +56 -2
- data/LICENSE-3rdparty.csv +1 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +143 -86
- data/ext/datadog_profiling_native_extension/collectors_stack.h +9 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +6 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +7 -13
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -3
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +67 -14
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +8 -1
- data/ext/datadog_profiling_native_extension/profiling.c +1 -1
- data/ext/libdatadog_api/extconf.rb +9 -7
- data/ext/libdatadog_api/trace_exporter.c +34 -7
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- data/lib/datadog/ai_guard/component.rb +1 -1
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +1 -9
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +3 -3
- data/lib/datadog/ai_guard/evaluation/client.rb +3 -3
- data/lib/datadog/ai_guard/evaluation.rb +2 -2
- data/lib/datadog/ai_guard/http_client.rb +3 -2
- data/lib/datadog/ai_guard/redaction.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +1 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +3 -3
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +5366 -1517
- data/lib/datadog/appsec/assets/waf_rules/strict.json +2 -2
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +1 -1
- data/lib/datadog/appsec/compressed_json.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +3 -3
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +11 -1
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +12 -4
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +7 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +31 -4
- data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +8 -7
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -5
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +8 -7
- data/lib/datadog/appsec/metrics/collector.rb +5 -5
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +3 -3
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/processor/rule_loader.rb +1 -1
- data/lib/datadog/appsec/response.rb +1 -1
- data/lib/datadog/appsec/security_engine/engine.rb +8 -7
- data/lib/datadog/appsec/security_engine/runner.rb +2 -2
- data/lib/datadog/appsec/trace_keeper.rb +1 -1
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +14 -13
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +12 -11
- data/lib/datadog/core/configuration/components_state.rb +8 -1
- data/lib/datadog/core/configuration/settings.rb +5 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
- data/lib/datadog/core/configuration.rb +2 -2
- data/lib/datadog/core/crashtracking/component.rb +1 -1
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/environment/cgroup.rb +2 -2
- data/lib/datadog/core/environment/container.rb +3 -3
- data/lib/datadog/core/metrics/client.rb +6 -6
- data/lib/datadog/core/process_discovery.rb +1 -1
- data/lib/datadog/core/remote/client.rb +44 -3
- data/lib/datadog/core/remote/dispatcher.rb +34 -3
- data/lib/datadog/core/remote/tie/tracing.rb +4 -3
- data/lib/datadog/core/remote/transport/http.rb +2 -2
- data/lib/datadog/core/runtime/metrics.rb +14 -14
- data/lib/datadog/core/semaphore.rb +3 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +9 -9
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +1 -1
- data/lib/datadog/core/telemetry/request.rb +9 -3
- data/lib/datadog/core/telemetry/transport/http.rb +2 -2
- data/lib/datadog/core/telemetry/worker.rb +1 -1
- data/lib/datadog/core/transport/http/adapters/net.rb +1 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/core/transport/http/builder.rb +1 -1
- data/lib/datadog/core/transport/http.rb +3 -3
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +2 -2
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/data_streams/pathway_context.rb +1 -1
- data/lib/datadog/data_streams/processor.rb +48 -27
- data/lib/datadog/data_streams/transport/http.rb +1 -1
- data/lib/datadog/data_streams.rb +16 -0
- data/lib/datadog/di/capture_expression_evaluator.rb +48 -11
- data/lib/datadog/di/component.rb +73 -2
- data/lib/datadog/di/configuration.rb +19 -0
- data/lib/datadog/di/contrib/active_record.rb +1 -1
- data/lib/datadog/di/el/compiler.rb +4 -4
- data/lib/datadog/di/el/evaluator.rb +247 -43
- data/lib/datadog/di/el/expression.rb +36 -6
- data/lib/datadog/di/error.rb +16 -0
- data/lib/datadog/di/guardrails_telemetry/reason.rb +3 -2
- data/lib/datadog/di/instrumenter.rb +39 -10
- data/lib/datadog/di/probe_notification_builder.rb +58 -10
- data/lib/datadog/di/probe_notifier_worker.rb +1 -1
- data/lib/datadog/di/remote.rb +46 -2
- data/lib/datadog/di/serializer.rb +47 -13
- data/lib/datadog/di.rb +27 -0
- data/lib/datadog/error_tracking/component.rb +1 -1
- data/lib/datadog/error_tracking/configuration.rb +1 -1
- data/lib/datadog/kit/appsec/events/v2.rb +6 -6
- data/lib/datadog/kit/appsec/events.rb +1 -1
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/kit/identity.rb +1 -1
- data/lib/datadog/open_feature/activation.rb +26 -1
- data/lib/datadog/open_feature/agentless/configuration_source.rb +94 -15
- data/lib/datadog/open_feature/component.rb +22 -2
- data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +6 -0
- data/lib/datadog/open_feature/configuration.rb +10 -4
- data/lib/datadog/open_feature/evaluation_engine.rb +62 -4
- data/lib/datadog/open_feature/exposures/buffer.rb +4 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +17 -4
- data/lib/datadog/open_feature/exposures/worker.rb +37 -6
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +5 -5
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +1 -1
- data/lib/datadog/open_feature/hooks/debug_logging_hook.rb +56 -0
- data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
- data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +2 -2
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +1 -1
- data/lib/datadog/open_feature/native_evaluator.rb +1 -1
- data/lib/datadog/open_feature/noop_evaluator.rb +1 -1
- data/lib/datadog/open_feature/provider.rb +69 -12
- data/lib/datadog/open_feature/remote.rb +8 -1
- data/lib/datadog/open_feature/resolution_details.rb +2 -2
- data/lib/datadog/open_feature/transport.rb +6 -6
- data/lib/datadog/opentelemetry/api/context.rb +3 -3
- data/lib/datadog/opentelemetry/logs.rb +5 -5
- data/lib/datadog/opentelemetry/metrics.rb +3 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +3 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +2 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +3 -3
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -4
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +37 -6
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +41 -39
- data/lib/datadog/profiling/exporter.rb +4 -6
- data/lib/datadog/profiling/http_transport.rb +3 -3
- data/lib/datadog/profiling/profiler.rb +2 -2
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/tag_builder.rb +1 -1
- data/lib/datadog/symbol_database/extractor.rb +8 -8
- data/lib/datadog/symbol_database/uploader.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +3 -3
- data/lib/datadog/tracing/client_ip.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -10
- data/lib/datadog/tracing/configuration/dynamic/option.rb +2 -2
- data/lib/datadog/tracing/configuration/ext.rb +2 -0
- data/lib/datadog/tracing/configuration/settings.rb +14 -3
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +8 -0
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/active_job/data_streams.rb +27 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -2
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +17 -12
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +16 -9
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +14 -8
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -4
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +21 -6
- data/lib/datadog/tracing/contrib/http.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +14 -8
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +14 -8
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +7 -7
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -1
- 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/rest_client/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +17 -10
- data/lib/datadog/tracing/contrib/sequel/database.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_env_parser.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +102 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/waterdrop.rb +1 -1
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +3 -3
- data/lib/datadog/tracing/distributed/datadog.rb +3 -3
- data/lib/datadog/tracing/distributed/propagation.rb +7 -7
- data/lib/datadog/tracing/distributed/trace_context.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +1 -1
- data/lib/datadog/tracing/otel_thread_context.rb +3 -3
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/remote.rb +50 -19
- data/lib/datadog/tracing/sampling/priority_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +1 -1
- data/lib/datadog/tracing/trace_digest.rb +1 -1
- data/lib/datadog/tracing/trace_operation.rb +6 -6
- data/lib/datadog/tracing/tracer.rb +6 -6
- data/lib/datadog/tracing/transport/http/telemetry.rb +1 -1
- data/lib/datadog/tracing/transport/http.rb +2 -2
- data/lib/datadog/tracing/transport/io.rb +1 -1
- data/lib/datadog/tracing/transport/native.rb +3 -3
- data/lib/datadog/tracing/transport/statistics.rb +2 -2
- data/lib/datadog/tracing/transport/telemetry.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +12 -12
- data/lib/datadog/tracing/transport/traces.rb +1 -1
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers.rb +1 -1
- data/lib/datadog/version.rb +1 -1
- metadata +9 -8
- data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
|
@@ -21,14 +21,14 @@ module Datadog
|
|
|
21
21
|
tracer = settings.tracing.instance
|
|
22
22
|
return tracer unless tracer.nil?
|
|
23
23
|
|
|
24
|
+
sampler = build_sampler(settings)
|
|
25
|
+
|
|
24
26
|
# Apply test mode settings if test mode is activated
|
|
25
27
|
if settings.tracing.test_mode.enabled
|
|
26
28
|
trace_flush = build_test_mode_trace_flush(settings)
|
|
27
|
-
sampler = build_test_mode_sampler
|
|
28
29
|
writer = build_test_mode_writer(settings, agent_settings)
|
|
29
30
|
else
|
|
30
31
|
trace_flush = build_trace_flush(settings)
|
|
31
|
-
sampler = build_sampler(settings)
|
|
32
32
|
writer = build_writer(settings, agent_settings)
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -55,7 +55,7 @@ module Datadog
|
|
|
55
55
|
def build_trace_flush(settings)
|
|
56
56
|
if settings.tracing.partial_flush.enabled
|
|
57
57
|
Tracing::Flush::Partial.new(
|
|
58
|
-
min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold
|
|
58
|
+
min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold,
|
|
59
59
|
)
|
|
60
60
|
else
|
|
61
61
|
Tracing::Flush::Finished.new
|
|
@@ -76,7 +76,12 @@ module Datadog
|
|
|
76
76
|
nil
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
# Builds the sampler for the given settings: the sampler that keeps
|
|
80
|
+
# every trace when test mode is enabled, otherwise the sampler built
|
|
81
|
+
# from the custom sampler, sampling rules and rates.
|
|
79
82
|
def build_sampler(settings)
|
|
83
|
+
return build_test_mode_sampler if settings.tracing.test_mode.enabled
|
|
84
|
+
|
|
80
85
|
# A custom sampler is provided
|
|
81
86
|
if (sampler = settings.tracing.sampler)
|
|
82
87
|
return sampler
|
|
@@ -93,7 +98,7 @@ module Datadog
|
|
|
93
98
|
post_sampler = Tracing::Sampling::RuleSampler.parse(
|
|
94
99
|
rules,
|
|
95
100
|
settings.tracing.sampling.rate_limit,
|
|
96
|
-
settings.tracing.sampling.default_rate
|
|
101
|
+
settings.tracing.sampling.default_rate,
|
|
97
102
|
)
|
|
98
103
|
end
|
|
99
104
|
|
|
@@ -101,12 +106,12 @@ module Datadog
|
|
|
101
106
|
# Used if no custom sampler is provided, or if sampling rule parsing fails.
|
|
102
107
|
post_sampler ||= Tracing::Sampling::RuleSampler.new(
|
|
103
108
|
rate_limit: settings.tracing.sampling.rate_limit,
|
|
104
|
-
default_sample_rate: settings.tracing.sampling.default_rate
|
|
109
|
+
default_sample_rate: settings.tracing.sampling.default_rate,
|
|
105
110
|
)
|
|
106
111
|
|
|
107
112
|
Tracing::Sampling::PrioritySampler.new(
|
|
108
113
|
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
109
|
-
post_sampler: post_sampler
|
|
114
|
+
post_sampler: post_sampler,
|
|
110
115
|
)
|
|
111
116
|
end
|
|
112
117
|
|
|
@@ -133,14 +138,14 @@ module Datadog
|
|
|
133
138
|
unless Transport::Native.supported?
|
|
134
139
|
Datadog.logger.warn(
|
|
135
140
|
"Native transport requested but not available: #{Transport::Native::UNSUPPORTED_REASON}. " \
|
|
136
|
-
"Falling back to default HTTP transport."
|
|
141
|
+
"Falling back to default HTTP transport.",
|
|
137
142
|
)
|
|
138
143
|
return nil
|
|
139
144
|
end
|
|
140
145
|
|
|
141
146
|
Transport::Native::Transport.new(
|
|
142
147
|
agent_settings: agent_settings,
|
|
143
|
-
logger: Datadog.logger
|
|
148
|
+
logger: Datadog.logger,
|
|
144
149
|
)
|
|
145
150
|
end
|
|
146
151
|
|
|
@@ -230,7 +235,7 @@ module Datadog
|
|
|
230
235
|
def build_rate_limit_post_sampler(seconds:)
|
|
231
236
|
Tracing::Sampling::RuleSampler.new(
|
|
232
237
|
rate_limiter: Datadog::Core::TokenBucket.new(1.0 / seconds, 1.0),
|
|
233
|
-
default_sample_rate: 1.0
|
|
238
|
+
default_sample_rate: 1.0,
|
|
234
239
|
)
|
|
235
240
|
end
|
|
236
241
|
|
|
@@ -246,7 +251,7 @@ module Datadog
|
|
|
246
251
|
# Set priority sampler to ensure the agent doesn't drop any traces.
|
|
247
252
|
Tracing::Sampling::PrioritySampler.new(
|
|
248
253
|
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
249
|
-
post_sampler: Tracing::Sampling::AllSampler.new
|
|
254
|
+
post_sampler: Tracing::Sampling::AllSampler.new,
|
|
250
255
|
)
|
|
251
256
|
end
|
|
252
257
|
|
|
@@ -49,13 +49,13 @@ module Datadog
|
|
|
49
49
|
# Restore the local configuration value
|
|
50
50
|
configuration_object.unset_option(
|
|
51
51
|
@setting_key,
|
|
52
|
-
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
52
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION,
|
|
53
53
|
)
|
|
54
54
|
else
|
|
55
55
|
configuration_object.set_option(
|
|
56
56
|
@setting_key,
|
|
57
57
|
value,
|
|
58
|
-
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
58
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION,
|
|
59
59
|
)
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -128,6 +128,8 @@ module Datadog
|
|
|
128
128
|
ENV_SERVER_ERROR_STATUSES = "DD_TRACE_HTTP_SERVER_ERROR_STATUSES"
|
|
129
129
|
ENV_CLIENT_ERROR_STATUSES = "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES"
|
|
130
130
|
end
|
|
131
|
+
|
|
132
|
+
ENV_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE = "DD_TRACE_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE"
|
|
131
133
|
end
|
|
132
134
|
end
|
|
133
135
|
end
|
|
@@ -57,7 +57,7 @@ module Datadog
|
|
|
57
57
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG,
|
|
58
58
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT,
|
|
59
59
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE,
|
|
60
|
-
]
|
|
60
|
+
],
|
|
61
61
|
)
|
|
62
62
|
o.after_set do |styles|
|
|
63
63
|
# Make values case-insensitive
|
|
@@ -446,7 +446,7 @@ module Datadog
|
|
|
446
446
|
"Both DD_SPAN_SAMPLING_RULES and DD_SPAN_SAMPLING_RULES_FILE were provided: only " \
|
|
447
447
|
"DD_SPAN_SAMPLING_RULES will be used. Please do not provide DD_SPAN_SAMPLING_RULES_FILE when " \
|
|
448
448
|
"also providing DD_SPAN_SAMPLING_RULES as their configuration conflicts. " \
|
|
449
|
-
"DD_SPAN_SAMPLING_RULES_FILE=#{rules_file} DD_SPAN_SAMPLING_RULES=#{rules}"
|
|
449
|
+
"DD_SPAN_SAMPLING_RULES_FILE=#{rules_file} DD_SPAN_SAMPLING_RULES=#{rules}",
|
|
450
450
|
)
|
|
451
451
|
end
|
|
452
452
|
rules
|
|
@@ -457,7 +457,7 @@ module Datadog
|
|
|
457
457
|
# `File#read` errors have clear and actionable messages, no need to add extra exception info.
|
|
458
458
|
Datadog.logger.warn(
|
|
459
459
|
"Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e.message}." \
|
|
460
|
-
"No span sampling rules will be applied."
|
|
460
|
+
"No span sampling rules will be applied.",
|
|
461
461
|
)
|
|
462
462
|
nil
|
|
463
463
|
end
|
|
@@ -568,6 +568,17 @@ module Datadog
|
|
|
568
568
|
o.default 512
|
|
569
569
|
end
|
|
570
570
|
|
|
571
|
+
# Whether outbound HTTP client resource names include a quantized request path.
|
|
572
|
+
# URL tags and outgoing requests are unchanged.
|
|
573
|
+
#
|
|
574
|
+
# @default `DD_TRACE_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE` environment variable, otherwise `false`.
|
|
575
|
+
# @return [Boolean]
|
|
576
|
+
option :http_client_resource_name_quantize do |o|
|
|
577
|
+
o.env Tracing::Configuration::Ext::ENV_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE
|
|
578
|
+
o.default false
|
|
579
|
+
o.type :bool
|
|
580
|
+
end
|
|
581
|
+
|
|
571
582
|
# HTTP error statuses configuration
|
|
572
583
|
# @public_api
|
|
573
584
|
settings :http_error_statuses do
|
|
@@ -21,6 +21,14 @@ module Datadog
|
|
|
21
21
|
def context=(ctx)
|
|
22
22
|
ctx.otel_thread_context = @otel_thread_context if ctx.respond_to?(:otel_thread_context=)
|
|
23
23
|
|
|
24
|
+
if (otel_thread_context = @otel_thread_context)
|
|
25
|
+
if (trace = ctx&.active_trace)
|
|
26
|
+
otel_thread_context.update_from_trace_op(trace)
|
|
27
|
+
else
|
|
28
|
+
otel_thread_context.clear
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
24
32
|
@context.local = ctx
|
|
25
33
|
end
|
|
26
34
|
|
|
@@ -39,14 +39,14 @@ module Datadog
|
|
|
39
39
|
:subscribe,
|
|
40
40
|
:around,
|
|
41
41
|
->(channel, block) { Tracer.trace(channel, :subscribe, &block) },
|
|
42
|
-
prepend: true
|
|
42
|
+
prepend: true,
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
set_callback(
|
|
46
46
|
:unsubscribe,
|
|
47
47
|
:around,
|
|
48
48
|
->(channel, block) { Tracer.trace(channel, :unsubscribe, &block) },
|
|
49
|
-
prepend: true
|
|
49
|
+
prepend: true,
|
|
50
50
|
)
|
|
51
51
|
end
|
|
52
52
|
end
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
|
27
27
|
Datadog::DataStreams.set_produce_checkpoint(
|
|
28
28
|
type: Ext::TAG_COMPONENT,
|
|
29
29
|
destination: queue_name,
|
|
30
|
-
auto_instrumentation: true
|
|
30
|
+
auto_instrumentation: true,
|
|
31
31
|
) do |key, value|
|
|
32
32
|
job_data[key] = value
|
|
33
33
|
end
|
|
@@ -44,10 +44,14 @@ module Datadog
|
|
|
44
44
|
return unless Datadog::DataStreams.enabled?
|
|
45
45
|
|
|
46
46
|
begin
|
|
47
|
+
# false stands in for "thread had no context", leaving nil to mean nothing to restore.
|
|
48
|
+
@datadog_pathway_context_before_job = Datadog::DataStreams.pathway_context || false
|
|
49
|
+
# A headerless job would otherwise checkpoint into, and mutate, the saved context.
|
|
50
|
+
Datadog::DataStreams.pathway_context = nil
|
|
47
51
|
Datadog::DataStreams.set_consume_checkpoint(
|
|
48
52
|
type: Ext::TAG_COMPONENT,
|
|
49
53
|
source: queue_name,
|
|
50
|
-
auto_instrumentation: true
|
|
54
|
+
auto_instrumentation: true,
|
|
51
55
|
) do |key|
|
|
52
56
|
job_data[key]
|
|
53
57
|
end
|
|
@@ -55,6 +59,27 @@ module Datadog
|
|
|
55
59
|
Datadog.logger.debug { "Error setting DSM consume checkpoint: #{e.class}: #{e.message}" }
|
|
56
60
|
end
|
|
57
61
|
end
|
|
62
|
+
|
|
63
|
+
# Adapters run `deserialize` then `perform_now` on a pooled worker thread. Restoring the
|
|
64
|
+
# pre-job context stops the job's pathway leaking into the thread's later, unrelated work.
|
|
65
|
+
def perform_now
|
|
66
|
+
super
|
|
67
|
+
ensure
|
|
68
|
+
restore_datadog_pathway_context
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def restore_datadog_pathway_context
|
|
74
|
+
return if @datadog_pathway_context_before_job.nil?
|
|
75
|
+
|
|
76
|
+
# `|| nil` undoes the false sentinel set in `deserialize`.
|
|
77
|
+
context_before_job = @datadog_pathway_context_before_job || nil
|
|
78
|
+
@datadog_pathway_context_before_job = nil
|
|
79
|
+
Datadog::DataStreams.pathway_context = context_before_job
|
|
80
|
+
rescue => e
|
|
81
|
+
Datadog.logger.debug { "Error restoring DSM pathway context: #{e.class}: #{e.message}" }
|
|
82
|
+
end
|
|
58
83
|
end
|
|
59
84
|
end
|
|
60
85
|
end
|
|
@@ -76,7 +76,7 @@ module Datadog
|
|
|
76
76
|
#
|
|
77
77
|
Datadog.logger.error(
|
|
78
78
|
"Failed to resolve ActiveRecord database configuration. " \
|
|
79
|
-
"Cause: #{e.class} Source: #{Array(e.backtrace).first}"
|
|
79
|
+
"Cause: #{e.class} Source: #{Array(e.backtrace).first}",
|
|
80
80
|
)
|
|
81
81
|
Core::Telemetry::Logger.report(e, description: "Failed to resolve ActiveRecord database configuration")
|
|
82
82
|
|
|
@@ -96,7 +96,7 @@ module Datadog
|
|
|
96
96
|
rescue => e
|
|
97
97
|
Datadog.logger.error(
|
|
98
98
|
"Failed to resolve key #{matcher.inspect}. " \
|
|
99
|
-
"Cause: #{e.class} Source: #{Array(e.backtrace).first}"
|
|
99
|
+
"Cause: #{e.class} Source: #{Array(e.backtrace).first}",
|
|
100
100
|
)
|
|
101
101
|
Core::Telemetry::Logger.report(e, description: "Failed to resolve key")
|
|
102
102
|
|
|
@@ -77,7 +77,7 @@ module Datadog
|
|
|
77
77
|
# in case.
|
|
78
78
|
Datadog.logger.debug(
|
|
79
79
|
"connection_id #{connection_id} does not represent a valid object. " \
|
|
80
|
-
"Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
80
|
+
"Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}",
|
|
81
81
|
)
|
|
82
82
|
end
|
|
83
83
|
else
|
|
@@ -49,7 +49,7 @@ module Datadog
|
|
|
49
49
|
Ext::SPAN_CACHE,
|
|
50
50
|
type: Ext::SPAN_TYPE_CACHE,
|
|
51
51
|
service: Datadog.configuration.tracing[:active_support][:cache_service],
|
|
52
|
-
resource: action
|
|
52
|
+
resource: action,
|
|
53
53
|
) do |span|
|
|
54
54
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
55
55
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
@@ -51,7 +51,7 @@ module Datadog
|
|
|
51
51
|
span_options,
|
|
52
52
|
on_start: on_start,
|
|
53
53
|
on_finish: on_finish,
|
|
54
|
-
trace: trace
|
|
54
|
+
trace: trace,
|
|
55
55
|
).tap do |subscription|
|
|
56
56
|
subscription.subscribe(pattern)
|
|
57
57
|
end
|
|
@@ -65,7 +65,7 @@ module Datadog
|
|
|
65
65
|
span_options,
|
|
66
66
|
on_start: on_start,
|
|
67
67
|
on_finish: on_finish,
|
|
68
|
-
trace: trace
|
|
68
|
+
trace: trace,
|
|
69
69
|
).tap do |subscription|
|
|
70
70
|
subscriptions << subscription
|
|
71
71
|
end
|
|
@@ -125,7 +125,7 @@ module Datadog
|
|
|
125
125
|
@block&.call(span, name, id, payload)
|
|
126
126
|
rescue => e
|
|
127
127
|
Datadog.logger.debug(
|
|
128
|
-
"ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}"
|
|
128
|
+
"ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}",
|
|
129
129
|
)
|
|
130
130
|
end
|
|
131
131
|
end
|
|
@@ -147,7 +147,7 @@ module Datadog
|
|
|
147
147
|
callback.call(event, key, *args)
|
|
148
148
|
rescue => e
|
|
149
149
|
Datadog.logger.debug(
|
|
150
|
-
"ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}"
|
|
150
|
+
"ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}",
|
|
151
151
|
)
|
|
152
152
|
end
|
|
153
153
|
end
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
Ext::SPAN_JOB,
|
|
20
20
|
service: configuration[:service_name],
|
|
21
21
|
resource: job_name(job),
|
|
22
|
-
on_error: configuration[:on_error]
|
|
22
|
+
on_error: configuration[:on_error],
|
|
23
23
|
) do |span|
|
|
24
24
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
25
25
|
set_sample_rate(span)
|
|
@@ -50,7 +50,7 @@ module Datadog
|
|
|
50
50
|
Tracing.trace(
|
|
51
51
|
Ext::SPAN_ENQUEUE,
|
|
52
52
|
service: configuration[:client_service_name],
|
|
53
|
-
resource: job_name(job)
|
|
53
|
+
resource: job_name(job),
|
|
54
54
|
) do |span|
|
|
55
55
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
56
56
|
set_sample_rate(span)
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
Tracing.trace(
|
|
54
54
|
Datadog::Tracing::Contrib::Elasticsearch::Ext::SPAN_QUERY,
|
|
55
55
|
service: service,
|
|
56
|
-
on_error: on_error
|
|
56
|
+
on_error: on_error,
|
|
57
57
|
) do |span|
|
|
58
58
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
59
59
|
connection = transport.connections.first
|
|
@@ -63,7 +63,7 @@ module Datadog
|
|
|
63
63
|
if datadog_configuration[:peer_service]
|
|
64
64
|
span.set_tag(
|
|
65
65
|
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
|
66
|
-
datadog_configuration[:peer_service]
|
|
66
|
+
datadog_configuration[:peer_service],
|
|
67
67
|
)
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -121,7 +121,7 @@ module Datadog
|
|
|
121
121
|
quantize_options = datadog_configuration[:quantize]
|
|
122
122
|
quantized_body = Datadog::Tracing::Contrib::Elasticsearch::Quantize.format_body(
|
|
123
123
|
body,
|
|
124
|
-
quantize_options
|
|
124
|
+
quantize_options,
|
|
125
125
|
)
|
|
126
126
|
span.set_tag(Datadog::Tracing::Contrib::Elasticsearch::Ext::TAG_BODY, quantized_body)
|
|
127
127
|
end
|
|
@@ -7,6 +7,7 @@ require_relative "../../metadata/ext"
|
|
|
7
7
|
require_relative "../http"
|
|
8
8
|
require_relative "ext"
|
|
9
9
|
require_relative "../http_annotation_helper"
|
|
10
|
+
require_relative "../utils/quantization/http"
|
|
10
11
|
|
|
11
12
|
module Datadog
|
|
12
13
|
module Tracing
|
|
@@ -67,8 +68,8 @@ module Datadog
|
|
|
67
68
|
|
|
68
69
|
@datadog_span.set_tags(
|
|
69
70
|
Datadog.configuration.tracing.header_tags.response_tags(
|
|
70
|
-
Core::Utils::Hash::CaseInsensitiveWrapper.new(parse_response_headers)
|
|
71
|
-
)
|
|
71
|
+
Core::Utils::Hash::CaseInsensitiveWrapper.new(parse_response_headers),
|
|
72
|
+
),
|
|
72
73
|
)
|
|
73
74
|
ensure
|
|
74
75
|
@datadog_span.finish
|
|
@@ -107,15 +108,15 @@ module Datadog
|
|
|
107
108
|
Ext::SPAN_REQUEST,
|
|
108
109
|
service: uri ? service_name(uri.host, datadog_configuration) : datadog_configuration[:service_name],
|
|
109
110
|
type: Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND,
|
|
110
|
-
**trace_options
|
|
111
|
+
**trace_options,
|
|
111
112
|
)
|
|
112
113
|
datadog_trace = Tracing.active_trace
|
|
113
114
|
|
|
114
|
-
datadog_tag_request
|
|
115
|
+
datadog_tag_request(uri)
|
|
115
116
|
|
|
116
117
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
|
117
118
|
global_config: datadog_configuration,
|
|
118
|
-
trace: datadog_trace
|
|
119
|
+
trace: datadog_trace,
|
|
119
120
|
)
|
|
120
121
|
@datadog_original_headers ||= {}
|
|
121
122
|
Contrib::HTTP.inject(datadog_trace, @datadog_original_headers)
|
|
@@ -131,17 +132,22 @@ module Datadog
|
|
|
131
132
|
|
|
132
133
|
attr_reader :datadog_configuration
|
|
133
134
|
|
|
134
|
-
def datadog_tag_request
|
|
135
|
+
def datadog_tag_request(uri)
|
|
135
136
|
span = @datadog_span
|
|
136
137
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
137
138
|
method = Ext::NOT_APPLICABLE_METHOD
|
|
138
139
|
method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
|
|
139
|
-
|
|
140
|
+
path = uri&.path
|
|
141
|
+
span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
|
|
142
|
+
method,
|
|
143
|
+
path,
|
|
144
|
+
enabled: Datadog.configuration.tracing.http_client_resource_name_quantize,
|
|
145
|
+
)
|
|
140
146
|
|
|
141
147
|
if datadog_configuration[:peer_service]
|
|
142
148
|
span.set_tag(
|
|
143
149
|
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
|
144
|
-
datadog_configuration[:peer_service]
|
|
150
|
+
datadog_configuration[:peer_service],
|
|
145
151
|
)
|
|
146
152
|
end
|
|
147
153
|
|
|
@@ -153,10 +159,9 @@ module Datadog
|
|
|
153
159
|
|
|
154
160
|
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
|
|
155
161
|
|
|
156
|
-
uri = try_parse_uri
|
|
157
162
|
return unless uri
|
|
158
163
|
|
|
159
|
-
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL,
|
|
164
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
|
|
160
165
|
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, method)
|
|
161
166
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, uri.host)
|
|
162
167
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, uri.port)
|
|
@@ -165,8 +170,8 @@ module Datadog
|
|
|
165
170
|
if @datadog_original_headers
|
|
166
171
|
span.set_tags(
|
|
167
172
|
Datadog.configuration.tracing.header_tags.request_tags(
|
|
168
|
-
Core::Utils::Hash::CaseInsensitiveWrapper.new(@datadog_original_headers)
|
|
169
|
-
)
|
|
173
|
+
Core::Utils::Hash::CaseInsensitiveWrapper.new(@datadog_original_headers),
|
|
174
|
+
),
|
|
170
175
|
)
|
|
171
176
|
end
|
|
172
177
|
|
|
@@ -8,6 +8,7 @@ require_relative "../http"
|
|
|
8
8
|
require_relative "../analytics"
|
|
9
9
|
require_relative "ext"
|
|
10
10
|
require_relative "../http_annotation_helper"
|
|
11
|
+
require_relative "../utils/quantization/http"
|
|
11
12
|
|
|
12
13
|
module Datadog
|
|
13
14
|
module Tracing
|
|
@@ -32,7 +33,7 @@ module Datadog
|
|
|
32
33
|
annotate!(span, datum)
|
|
33
34
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
|
34
35
|
global_config: @options,
|
|
35
|
-
trace: trace
|
|
36
|
+
trace: trace,
|
|
36
37
|
)
|
|
37
38
|
propagate!(trace, span, datum)
|
|
38
39
|
end
|
|
@@ -117,7 +118,13 @@ module Datadog
|
|
|
117
118
|
end
|
|
118
119
|
|
|
119
120
|
def annotate!(span, datum)
|
|
120
|
-
|
|
121
|
+
http_method = datum[:method].to_s.upcase
|
|
122
|
+
path = datum[:path]
|
|
123
|
+
span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
|
|
124
|
+
http_method,
|
|
125
|
+
path,
|
|
126
|
+
enabled: Datadog.configuration.tracing.http_client_resource_name_quantize,
|
|
127
|
+
)
|
|
121
128
|
span.service = service_name(datum[:host], @options)
|
|
122
129
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
123
130
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
|
|
@@ -125,7 +132,7 @@ module Datadog
|
|
|
125
132
|
if @options[:peer_service]
|
|
126
133
|
span.set_tag(
|
|
127
134
|
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
|
128
|
-
@options[:peer_service]
|
|
135
|
+
@options[:peer_service],
|
|
129
136
|
)
|
|
130
137
|
end
|
|
131
138
|
|
|
@@ -139,14 +146,14 @@ module Datadog
|
|
|
139
146
|
# Set analytics sample rate
|
|
140
147
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
141
148
|
|
|
142
|
-
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL,
|
|
143
|
-
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD,
|
|
149
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
|
|
150
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method)
|
|
144
151
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, datum[:host])
|
|
145
152
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, datum[:port])
|
|
146
153
|
span.set_tags(
|
|
147
154
|
Datadog.configuration.tracing.header_tags.request_tags(
|
|
148
|
-
Core::Utils::Hash::CaseInsensitiveWrapper.new(datum[:headers])
|
|
149
|
-
)
|
|
155
|
+
Core::Utils::Hash::CaseInsensitiveWrapper.new(datum[:headers]),
|
|
156
|
+
),
|
|
150
157
|
)
|
|
151
158
|
|
|
152
159
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
@@ -166,8 +173,8 @@ module Datadog
|
|
|
166
173
|
|
|
167
174
|
span.set_tags(
|
|
168
175
|
Datadog.configuration.tracing.header_tags.response_tags(
|
|
169
|
-
Core::Utils::Hash::CaseInsensitiveWrapper.new(response[:headers])
|
|
170
|
-
)
|
|
176
|
+
Core::Utils::Hash::CaseInsensitiveWrapper.new(response[:headers]),
|
|
177
|
+
),
|
|
171
178
|
)
|
|
172
179
|
end
|
|
173
180
|
on_error.call(span, datum[:error]) if datum.key?(:error)
|