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
|
@@ -20,6 +20,96 @@ module Datadog
|
|
|
20
20
|
|
|
21
21
|
module_function
|
|
22
22
|
|
|
23
|
+
def client_resource(method, path, enabled:)
|
|
24
|
+
return method unless enabled && path
|
|
25
|
+
|
|
26
|
+
resource = method.dup
|
|
27
|
+
resource << (+" ").force_encoding(resource.encoding)
|
|
28
|
+
quantized_path = quantize_path(decode_path(path))
|
|
29
|
+
resource << quantized_path.force_encoding(resource.encoding)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def decode_path(path)
|
|
33
|
+
decoded = String.new(encoding: Encoding::BINARY)
|
|
34
|
+
index = 0
|
|
35
|
+
|
|
36
|
+
while index < path.bytesize
|
|
37
|
+
byte = path.getbyte(index)
|
|
38
|
+
break unless byte
|
|
39
|
+
|
|
40
|
+
if byte == 37 && index + 2 < path.bytesize
|
|
41
|
+
high_byte = path.getbyte(index + 1)
|
|
42
|
+
low_byte = path.getbyte(index + 2)
|
|
43
|
+
if high_byte && low_byte
|
|
44
|
+
high = decode_hex_byte(high_byte)
|
|
45
|
+
low = decode_hex_byte(low_byte)
|
|
46
|
+
if high && low
|
|
47
|
+
decoded << high * 16 + low
|
|
48
|
+
index += 3
|
|
49
|
+
next
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
decoded << byte
|
|
55
|
+
index += 1
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
decoded.force_encoding(path.encoding)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def quantize_path(path)
|
|
62
|
+
slash = (+"/").force_encoding(path.encoding)
|
|
63
|
+
normalized = if path.getbyte(0) == 47
|
|
64
|
+
path
|
|
65
|
+
else
|
|
66
|
+
String.new(encoding: path.encoding) << slash << path
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
output = String.new(encoding: path.encoding)
|
|
70
|
+
index = 1
|
|
71
|
+
replacements = 0
|
|
72
|
+
|
|
73
|
+
while index < normalized.bytesize
|
|
74
|
+
segment_end = index
|
|
75
|
+
allowed = 0
|
|
76
|
+
digits = 0
|
|
77
|
+
specials = 0
|
|
78
|
+
|
|
79
|
+
while segment_end < normalized.bytesize && normalized.getbyte(segment_end) != 47
|
|
80
|
+
byte = normalized.getbyte(segment_end)
|
|
81
|
+
break unless byte
|
|
82
|
+
|
|
83
|
+
if byte.between?(48, 57)
|
|
84
|
+
digits += 1
|
|
85
|
+
elsif byte.between?(65, 90) || byte.between?(97, 122) || byte == 45 || byte == 95
|
|
86
|
+
allowed += 1
|
|
87
|
+
else
|
|
88
|
+
specials += 1
|
|
89
|
+
end
|
|
90
|
+
segment_end += 1
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
output << slash
|
|
94
|
+
segment = normalized.byteslice(index, segment_end - index) || String.new(encoding: path.encoding)
|
|
95
|
+
if normalized.getbyte(index) == 118 && allowed == 1 && digits > 0 && specials.zero?
|
|
96
|
+
output << segment
|
|
97
|
+
elsif specials > 0 || digits > 0
|
|
98
|
+
output << (+"*").force_encoding(path.encoding)
|
|
99
|
+
replacements += 1
|
|
100
|
+
else
|
|
101
|
+
output << segment
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
index = segment_end + 1
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
return normalized.dup if replacements.zero?
|
|
108
|
+
|
|
109
|
+
output << slash if normalized.getbyte(normalized.bytesize - 1) == 47
|
|
110
|
+
output
|
|
111
|
+
end
|
|
112
|
+
|
|
23
113
|
def url(url, options = {})
|
|
24
114
|
url!(url, options)
|
|
25
115
|
rescue
|
|
@@ -118,6 +208,18 @@ module Datadog
|
|
|
118
208
|
|
|
119
209
|
private_class_method :collect_query
|
|
120
210
|
|
|
211
|
+
def decode_hex_byte(byte)
|
|
212
|
+
if byte.between?(48, 57)
|
|
213
|
+
byte - 48
|
|
214
|
+
elsif byte.between?(65, 70)
|
|
215
|
+
byte - 55
|
|
216
|
+
elsif byte.between?(97, 102)
|
|
217
|
+
byte - 87
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
private_class_method :decode_hex_byte
|
|
222
|
+
|
|
121
223
|
# Scans over the query string and obfuscates sensitive data by
|
|
122
224
|
# replacing matches with an opaque value
|
|
123
225
|
def obfuscate_query(query, options = {})
|
|
@@ -14,7 +14,7 @@ module Datadog
|
|
|
14
14
|
|
|
15
15
|
if trace_op && Datadog::Tracing::Distributed::PropagationPolicy.enabled?(
|
|
16
16
|
global_config: configuration,
|
|
17
|
-
trace: trace_op
|
|
17
|
+
trace: trace_op,
|
|
18
18
|
)
|
|
19
19
|
WaterDrop.inject(trace_op.to_digest, message[:headers] ||= {})
|
|
20
20
|
end
|
|
@@ -23,7 +23,7 @@ module Datadog
|
|
|
23
23
|
Datadog::DataStreams.set_produce_checkpoint(
|
|
24
24
|
type: "kafka",
|
|
25
25
|
destination: message[:topic],
|
|
26
|
-
auto_instrumentation: true
|
|
26
|
+
auto_instrumentation: true,
|
|
27
27
|
) do |key, value|
|
|
28
28
|
message[:headers] ||= {}
|
|
29
29
|
message[:headers][key] = value
|
|
@@ -33,7 +33,7 @@ module Datadog
|
|
|
33
33
|
propagation_style_inject: tracing.propagation_style_inject,
|
|
34
34
|
propagation_style_extract: tracing.propagation_style_extract,
|
|
35
35
|
propagation_behavior_extract: tracing.propagation_behavior_extract,
|
|
36
|
-
propagation_extract_first: tracing.propagation_extract_first
|
|
36
|
+
propagation_extract_first: tracing.propagation_extract_first,
|
|
37
37
|
)
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -25,7 +25,7 @@ module Datadog
|
|
|
25
25
|
end
|
|
26
26
|
rescue => e
|
|
27
27
|
logger.warn(
|
|
28
|
-
"Failed to collect tracing environment information: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
28
|
+
"Failed to collect tracing environment information: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}",
|
|
29
29
|
)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -44,7 +44,7 @@ module Datadog
|
|
|
44
44
|
record_telemetry_metric(
|
|
45
45
|
"context_header.truncated",
|
|
46
46
|
1,
|
|
47
|
-
{"header_style" => "baggage", "truncation_reason" => "baggage_item_count_exceeded"}
|
|
47
|
+
{"header_style" => "baggage", "truncation_reason" => "baggage_item_count_exceeded"},
|
|
48
48
|
)
|
|
49
49
|
baggage_items = baggage_items.first(DD_TRACE_BAGGAGE_MAX_ITEMS)
|
|
50
50
|
end
|
|
@@ -61,7 +61,7 @@ module Datadog
|
|
|
61
61
|
record_telemetry_metric(
|
|
62
62
|
"context_header.truncated",
|
|
63
63
|
1,
|
|
64
|
-
{"header_style" => "baggage", "truncation_reason" => "baggage_byte_count_exceeded"}
|
|
64
|
+
{"header_style" => "baggage", "truncation_reason" => "baggage_byte_count_exceeded"},
|
|
65
65
|
)
|
|
66
66
|
break # stop adding items when size limit is reached
|
|
67
67
|
end
|
|
@@ -99,7 +99,7 @@ module Datadog
|
|
|
99
99
|
|
|
100
100
|
TraceDigest.new(
|
|
101
101
|
baggage: baggage,
|
|
102
|
-
trace_distributed_tags: baggage_tags
|
|
102
|
+
trace_distributed_tags: baggage_tags,
|
|
103
103
|
)
|
|
104
104
|
end
|
|
105
105
|
|
|
@@ -137,7 +137,7 @@ module Datadog
|
|
|
137
137
|
rescue => e
|
|
138
138
|
set_tags_propagation_error(reason: "encoding_error")
|
|
139
139
|
::Datadog.logger.warn(
|
|
140
|
-
"Failed to inject x-datadog-tags: #{e.class}: #{e.message} at #{Array(e.backtrace).first}"
|
|
140
|
+
"Failed to inject x-datadog-tags: #{e.class}: #{e.message} at #{Array(e.backtrace).first}",
|
|
141
141
|
)
|
|
142
142
|
nil
|
|
143
143
|
end
|
|
@@ -164,7 +164,7 @@ module Datadog
|
|
|
164
164
|
rescue => e
|
|
165
165
|
set_tags_propagation_error(reason: "decoding_error")
|
|
166
166
|
::Datadog.logger.warn(
|
|
167
|
-
"Failed to extract x-datadog-tags: #{e.class}: #{e.message} at #{Array(e.backtrace).first}"
|
|
167
|
+
"Failed to extract x-datadog-tags: #{e.class}: #{e.message} at #{Array(e.backtrace).first}",
|
|
168
168
|
)
|
|
169
169
|
nil
|
|
170
170
|
end
|
|
@@ -188,7 +188,7 @@ module Datadog
|
|
|
188
188
|
::Datadog.logger.warn(
|
|
189
189
|
"Failed to #{scenario} x-datadog-tags: tags are too large for configured limit (bytesize:#{size} >= " \
|
|
190
190
|
"limit:#{max_length}). This limit can be configured " \
|
|
191
|
-
"through the DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH environment variable."
|
|
191
|
+
"through the DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH environment variable.",
|
|
192
192
|
)
|
|
193
193
|
|
|
194
194
|
true
|
|
@@ -81,11 +81,11 @@ module Datadog
|
|
|
81
81
|
rescue => e
|
|
82
82
|
result = nil
|
|
83
83
|
::Datadog.logger.error(
|
|
84
|
-
"Error injecting distributed trace data. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
84
|
+
"Error injecting distributed trace data. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}",
|
|
85
85
|
)
|
|
86
86
|
::Datadog::Core::Telemetry::Logger.report(
|
|
87
87
|
e,
|
|
88
|
-
description: "Error injecting distributed trace data with #{propagator.class.name}"
|
|
88
|
+
description: "Error injecting distributed trace data with #{propagator.class.name}",
|
|
89
89
|
)
|
|
90
90
|
end
|
|
91
91
|
|
|
@@ -149,13 +149,13 @@ module Datadog
|
|
|
149
149
|
trace_otel_random_value: tracecontext_digest.trace_otel_random_value,
|
|
150
150
|
trace_otel_threshold: tracecontext_digest.trace_otel_threshold,
|
|
151
151
|
trace_otel_unknown_fields: tracecontext_digest.trace_otel_unknown_fields,
|
|
152
|
-
trace_distributed_tags: distributed_tags
|
|
152
|
+
trace_distributed_tags: distributed_tags,
|
|
153
153
|
)
|
|
154
154
|
end
|
|
155
155
|
rescue => e
|
|
156
156
|
# TODO: Not to report Telemetry logs for now
|
|
157
157
|
::Datadog.logger.error(
|
|
158
|
-
"Error extracting distributed trace data. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
158
|
+
"Error extracting distributed trace data. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}",
|
|
159
159
|
)
|
|
160
160
|
end
|
|
161
161
|
# Handle baggage after all other styles if present
|
|
@@ -171,7 +171,7 @@ module Datadog
|
|
|
171
171
|
attributes: {
|
|
172
172
|
"reason" => "propagation_behavior_extract",
|
|
173
173
|
"context_headers" => extracted_style_name,
|
|
174
|
-
}
|
|
174
|
+
},
|
|
175
175
|
)
|
|
176
176
|
baggage_tags = extracted_trace_digest.trace_distributed_tags&.select { |k, _| k.start_with?("baggage.") }
|
|
177
177
|
baggage_tags = nil if baggage_tags&.empty?
|
|
@@ -192,7 +192,7 @@ module Datadog
|
|
|
192
192
|
if digest
|
|
193
193
|
extracted_trace_digest.merge(
|
|
194
194
|
baggage: digest.baggage,
|
|
195
|
-
trace_distributed_tags: digest.trace_distributed_tags
|
|
195
|
+
trace_distributed_tags: digest.trace_distributed_tags,
|
|
196
196
|
)
|
|
197
197
|
else
|
|
198
198
|
extracted_trace_digest
|
|
@@ -207,7 +207,7 @@ module Datadog
|
|
|
207
207
|
dd_propagator = @propagation_style_extract.find { |propagator| propagator.is_a?(Datadog) }
|
|
208
208
|
if tracecontext_tags&.fetch(
|
|
209
209
|
Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID,
|
|
210
|
-
Tracing::Metadata::Ext::Distributed::DD_PARENT_ID_DEFAULT
|
|
210
|
+
Tracing::Metadata::Ext::Distributed::DD_PARENT_ID_DEFAULT,
|
|
211
211
|
) != Tracing::Metadata::Ext::Distributed::DD_PARENT_ID_DEFAULT
|
|
212
212
|
# tracecontext headers contain a p value, ensure this value is sent to backend
|
|
213
213
|
tracecontext_tags[Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID]
|
|
@@ -26,7 +26,7 @@ module Datadog
|
|
|
26
26
|
set(
|
|
27
27
|
trace_id: event_trace_op.id,
|
|
28
28
|
span_id: event_span_op.id,
|
|
29
|
-
local_root_span_id: event_trace_op.send(:root_span).id
|
|
29
|
+
local_root_span_id: event_trace_op.send(:root_span).id,
|
|
30
30
|
)
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -75,14 +75,14 @@ module Datadog
|
|
|
75
75
|
set(
|
|
76
76
|
trace_id: trace_op.id,
|
|
77
77
|
span_id: active_span.id,
|
|
78
|
-
local_root_span_id: trace_op.send(:root_span).id
|
|
78
|
+
local_root_span_id: trace_op.send(:root_span).id,
|
|
79
79
|
)
|
|
80
80
|
elsif trace_op.parent_span_id && trace_op.parent_span_id != 0
|
|
81
81
|
# Active distributed trace context, before first local trace is created
|
|
82
82
|
set(
|
|
83
83
|
trace_id: trace_op.id,
|
|
84
84
|
span_id: trace_op.parent_span_id,
|
|
85
|
-
local_root_span_id: UNKNOWN_LOCAL_ROOT_SPAN_ID
|
|
85
|
+
local_root_span_id: UNKNOWN_LOCAL_ROOT_SPAN_ID,
|
|
86
86
|
)
|
|
87
87
|
else
|
|
88
88
|
clear
|
|
@@ -62,6 +62,8 @@ module Datadog
|
|
|
62
62
|
|
|
63
63
|
# @type var parsed: Array[[::Datadog::Core::Remote::Configuration::Content, ::Hash[::String, untyped]]]
|
|
64
64
|
parsed = []
|
|
65
|
+
# @type var unparseable_contents: Array[Datadog::Core::Remote::Configuration::Content]
|
|
66
|
+
unparseable_contents = []
|
|
65
67
|
repository.contents.each do |content|
|
|
66
68
|
next unless content.path.product == PRODUCT
|
|
67
69
|
|
|
@@ -76,9 +78,8 @@ module Datadog
|
|
|
76
78
|
# A present but non-object lib_config (e.g. {"lib_config": []}) is a
|
|
77
79
|
# schema violation the customer can fix. Acknowledging it as applied
|
|
78
80
|
# would tell the backend the config was successfully applied when it
|
|
79
|
-
# was not
|
|
80
|
-
#
|
|
81
|
-
# payload is reported errored instead. A null or absent lib_config
|
|
81
|
+
# was not. Reject it per content so the malformed payload is
|
|
82
|
+
# reported errored instead. A null or absent lib_config
|
|
82
83
|
# carries no overrides and is left as a no-op.
|
|
83
84
|
lib_config = config["lib_config"]
|
|
84
85
|
if !lib_config.nil? && !lib_config.is_a?(Hash)
|
|
@@ -92,6 +93,7 @@ module Datadog
|
|
|
92
93
|
description: "Failed to parse APM_TRACING remote config",
|
|
93
94
|
)
|
|
94
95
|
content.errored("#{e.class}: #{e.message}: #{Array(e.backtrace).join("\n")}")
|
|
96
|
+
unparseable_contents << content
|
|
95
97
|
end
|
|
96
98
|
end
|
|
97
99
|
|
|
@@ -117,10 +119,26 @@ module Datadog
|
|
|
117
119
|
# deterministic merge.
|
|
118
120
|
ordered = applicable.sort_by { |content, config| [-config_priority(config), content.path.config_id] }
|
|
119
121
|
merged = merge_lib_configs(ordered.map { |_content, config| config })
|
|
122
|
+
# The applicable configs carrying a non-null dynamic_instrumentation_enabled
|
|
123
|
+
# value: any of their paths can still supply the signal after a later
|
|
124
|
+
# replacement, so the DI component records them all.
|
|
125
|
+
# @type var enable_signal_paths: Array[Datadog::Core::Remote::Configuration::Path]
|
|
126
|
+
enable_signal_paths = Core::Utils::EnumerableCompat.filter_map(ordered) do |pair|
|
|
127
|
+
content, config = pair
|
|
128
|
+
lib_config = config["lib_config"]
|
|
129
|
+
if lib_config.is_a?(Hash) && !lib_config["dynamic_instrumentation_enabled"].nil?
|
|
130
|
+
content.path
|
|
131
|
+
end
|
|
132
|
+
end
|
|
120
133
|
|
|
121
134
|
# Applied even when the set is empty: an emptied repository (last config
|
|
122
135
|
# removed) reverts the tracing overrides to their non-RC values.
|
|
123
|
-
apply_lib_config(
|
|
136
|
+
apply_lib_config(
|
|
137
|
+
merged,
|
|
138
|
+
repository,
|
|
139
|
+
unparseable_contents: unparseable_contents,
|
|
140
|
+
enable_signal_paths: enable_signal_paths,
|
|
141
|
+
)
|
|
124
142
|
|
|
125
143
|
parsed.each { |content, _config| content.applied }
|
|
126
144
|
nil
|
|
@@ -205,8 +223,10 @@ module Datadog
|
|
|
205
223
|
#
|
|
206
224
|
# @param lib_config [Hash[String, untyped]] the lib_config to apply
|
|
207
225
|
# @param repository [Core::Remote::Configuration::Repository, nil] forwarded to DI enablement
|
|
226
|
+
# @param unparseable_contents [Array<Core::Remote::Configuration::Content>] the APM_TRACING contents that failed to parse
|
|
227
|
+
# @param enable_signal_paths [Array<Core::Remote::Configuration::Path>] the paths of the applicable configs carrying the field
|
|
208
228
|
# @return [nil]
|
|
209
|
-
def apply_lib_config(lib_config, repository)
|
|
229
|
+
def apply_lib_config(lib_config, repository, unparseable_contents:, enable_signal_paths:)
|
|
210
230
|
env_vars = Datadog::Tracing::Configuration::Dynamic::OPTIONS.map do |name, env_var, option|
|
|
211
231
|
value = lib_config[name]
|
|
212
232
|
|
|
@@ -218,13 +238,30 @@ module Datadog
|
|
|
218
238
|
[env_var, telemetry_value]
|
|
219
239
|
end
|
|
220
240
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
241
|
+
di_enabled = lib_config["dynamic_instrumentation_enabled"]
|
|
242
|
+
# allow_initialization: false because this runs on the remote-config worker
|
|
243
|
+
# thread, and the default would build the component tree from that thread.
|
|
244
|
+
components = Datadog.send(:components, allow_initialization: false)
|
|
245
|
+
di_component = components&.dynamic_instrumentation
|
|
246
|
+
if di_enabled.nil? && di_component&.rc_enablement_signal_withdrawn?(unparseable_contents)
|
|
247
|
+
di_enabled = false
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Records the parsed carrier paths and the previously recorded paths whose
|
|
251
|
+
# replacements remain unparseable, on every merge including merges that keep
|
|
252
|
+
# the DI state.
|
|
253
|
+
if di_component
|
|
254
|
+
unparseable_recorded_paths = di_component.rc_enablement_signal_paths.select do |path|
|
|
255
|
+
unparseable_contents.any? { |content| content.path == path }
|
|
256
|
+
end
|
|
257
|
+
di_component.record_rc_enablement_signal_paths(enable_signal_paths + unparseable_recorded_paths)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
unless di_enabled.nil?
|
|
261
|
+
# repository is forwarded for the stopped->started replay in
|
|
262
|
+
# Datadog::DI::Remote.handle_rc_enablement.
|
|
225
263
|
Datadog::DI::Remote.handle_rc_enablement(di_enabled, repository)
|
|
226
264
|
|
|
227
|
-
components = Datadog.send(:components, allow_initialization: false)
|
|
228
265
|
di_products = Datadog::DI::Remote.products +
|
|
229
266
|
Datadog::SymbolDatabase::Remote.deferred_products(Datadog.configuration)
|
|
230
267
|
|
|
@@ -236,7 +273,7 @@ module Datadog
|
|
|
236
273
|
# by DD_DYNAMIC_INSTRUMENTATION_ENABLED=false. Advertising then would
|
|
237
274
|
# report DI as in use when it is not and invite probe configs the
|
|
238
275
|
# tracer must refuse; withdraw the products otherwise.
|
|
239
|
-
if
|
|
276
|
+
if di_component&.started?
|
|
240
277
|
components&.remote&.add_products(*di_products)
|
|
241
278
|
else
|
|
242
279
|
components&.remote&.remove_products(*di_products)
|
|
@@ -249,13 +286,7 @@ module Datadog
|
|
|
249
286
|
Datadog.logger.debug { "APM_TRACING RC: merged dynamic_instrumentation_enabled=#{di_enabled}" }
|
|
250
287
|
end
|
|
251
288
|
|
|
252
|
-
|
|
253
|
-
# worker thread. If components haven't been built yet (e.g. during a
|
|
254
|
-
# teardown/reset window), the default value would synchronously build
|
|
255
|
-
# the entire component tree from this thread. The &. chain matches the
|
|
256
|
-
# pattern used by DI::Remote.handle_rc_enablement in the same dispatch
|
|
257
|
-
# path.
|
|
258
|
-
Datadog.send(:components, allow_initialization: false)&.telemetry&.client_configuration_change!(env_vars)
|
|
289
|
+
components&.telemetry&.client_configuration_change!(env_vars)
|
|
259
290
|
nil
|
|
260
291
|
end
|
|
261
292
|
|
|
@@ -269,7 +300,7 @@ module Datadog
|
|
|
269
300
|
|
|
270
301
|
def receiver(products = [PRODUCT], &block)
|
|
271
302
|
matcher = Core::Remote::Dispatcher::Matcher::Product.new(products)
|
|
272
|
-
[Core::Remote::Dispatcher::Receiver.new(matcher, &block)]
|
|
303
|
+
[Core::Remote::Dispatcher::Receiver.new(matcher, initial_reconcile: true, &block)]
|
|
273
304
|
end
|
|
274
305
|
|
|
275
306
|
private
|
|
@@ -34,7 +34,7 @@ module Datadog
|
|
|
34
34
|
@matcher.match?(trace)
|
|
35
35
|
rescue => e
|
|
36
36
|
Datadog.logger.error(
|
|
37
|
-
"Matcher failed. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
37
|
+
"Matcher failed. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}",
|
|
38
38
|
)
|
|
39
39
|
Datadog::Core::Telemetry::Logger.report(e, description: "Matcher failed")
|
|
40
40
|
nil
|
|
@@ -133,7 +133,7 @@ module Datadog
|
|
|
133
133
|
apply_rule!(trace, rule)
|
|
134
134
|
rescue => e
|
|
135
135
|
Datadog.logger.error(
|
|
136
|
-
"Rule sampling failed. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
136
|
+
"Rule sampling failed. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}",
|
|
137
137
|
)
|
|
138
138
|
Datadog::Core::Telemetry::Logger.report(e, description: "Rule sampling failed")
|
|
139
139
|
|
|
@@ -29,7 +29,7 @@ module Datadog
|
|
|
29
29
|
rescue => e
|
|
30
30
|
Datadog.logger.warn(
|
|
31
31
|
"Error parsing Span Sampling Rules `#{rules.inspect}`: " \
|
|
32
|
-
"#{e.class}: #{e.message} at #{Array(e.backtrace).first}"
|
|
32
|
+
"#{e.class}: #{e.message} at #{Array(e.backtrace).first}",
|
|
33
33
|
)
|
|
34
34
|
return nil
|
|
35
35
|
end
|
|
@@ -61,7 +61,7 @@ module Datadog
|
|
|
61
61
|
rescue => e
|
|
62
62
|
Datadog.logger.warn(
|
|
63
63
|
"Cannot parse Span Sampling Rule #{hash.inspect}: " \
|
|
64
|
-
"#{e.class}: #{e.message} at #{Array(e.backtrace).first}"
|
|
64
|
+
"#{e.class}: #{e.message} at #{Array(e.backtrace).first}",
|
|
65
65
|
)
|
|
66
66
|
return nil
|
|
67
67
|
end
|
|
@@ -207,7 +207,7 @@ module Datadog
|
|
|
207
207
|
trace_otel_threshold: trace_otel_threshold,
|
|
208
208
|
trace_otel_unknown_fields: trace_otel_unknown_fields,
|
|
209
209
|
span_remote: span_remote,
|
|
210
|
-
baggage: baggage, **field_value_pairs
|
|
210
|
+
baggage: baggage, **field_value_pairs,
|
|
211
211
|
)
|
|
212
212
|
end
|
|
213
213
|
end
|
|
@@ -266,7 +266,7 @@ module Datadog
|
|
|
266
266
|
start_time: start_time,
|
|
267
267
|
tags: tags,
|
|
268
268
|
type: type,
|
|
269
|
-
id: id
|
|
269
|
+
id: id,
|
|
270
270
|
)
|
|
271
271
|
|
|
272
272
|
# Start span measurement
|
|
@@ -327,7 +327,7 @@ module Datadog
|
|
|
327
327
|
tags: tags,
|
|
328
328
|
trace_id: trace_id,
|
|
329
329
|
type: type,
|
|
330
|
-
id: id
|
|
330
|
+
id: id,
|
|
331
331
|
)
|
|
332
332
|
rescue => e
|
|
333
333
|
logger.debug { "Failed to build new span: #{e.class}: #{e.message}" }
|
|
@@ -422,7 +422,7 @@ module Datadog
|
|
|
422
422
|
trace_otel_threshold: open_telemetry.threshold,
|
|
423
423
|
trace_otel_unknown_fields: open_telemetry.unknown_fields,
|
|
424
424
|
span_remote: @remote_parent && @active_span.nil?,
|
|
425
|
-
baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
|
|
425
|
+
baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage,
|
|
426
426
|
).freeze
|
|
427
427
|
end
|
|
428
428
|
|
|
@@ -433,7 +433,7 @@ module Datadog
|
|
|
433
433
|
|
|
434
434
|
Correlation::Identifier.new(
|
|
435
435
|
trace_id: @id,
|
|
436
|
-
span_id: span_id
|
|
436
|
+
span_id: span_id,
|
|
437
437
|
)
|
|
438
438
|
end
|
|
439
439
|
|
|
@@ -460,7 +460,7 @@ module Datadog
|
|
|
460
460
|
tags: meta.dup,
|
|
461
461
|
metrics: metrics.dup,
|
|
462
462
|
remote_parent: @remote_parent,
|
|
463
|
-
distributed_sampling_priority: @distributed_sampling_priority
|
|
463
|
+
distributed_sampling_priority: @distributed_sampling_priority,
|
|
464
464
|
)
|
|
465
465
|
end
|
|
466
466
|
|
|
@@ -640,7 +640,7 @@ module Datadog
|
|
|
640
640
|
metrics: metrics,
|
|
641
641
|
root_span_id: (!partial) ? root_span&.id : nil,
|
|
642
642
|
profiling_enabled: @profiling_enabled,
|
|
643
|
-
apm_tracing_enabled: @apm_tracing_enabled
|
|
643
|
+
apm_tracing_enabled: @apm_tracing_enabled,
|
|
644
644
|
)
|
|
645
645
|
end
|
|
646
646
|
|
|
@@ -59,7 +59,7 @@ module Datadog
|
|
|
59
59
|
otel_thread_context: nil,
|
|
60
60
|
sampler: Sampling::PrioritySampler.new(
|
|
61
61
|
base_sampler: Sampling::AllSampler.new,
|
|
62
|
-
post_sampler: Sampling::RuleSampler.new
|
|
62
|
+
post_sampler: Sampling::RuleSampler.new,
|
|
63
63
|
),
|
|
64
64
|
span_sampler: Sampling::Span::Sampler.new,
|
|
65
65
|
tags: {},
|
|
@@ -80,7 +80,7 @@ module Datadog
|
|
|
80
80
|
@otel_thread_context = otel_thread_context
|
|
81
81
|
|
|
82
82
|
@provider = context_provider || DefaultContextProvider.new(
|
|
83
|
-
otel_thread_context: otel_thread_context
|
|
83
|
+
otel_thread_context: otel_thread_context,
|
|
84
84
|
)
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -195,7 +195,7 @@ module Datadog
|
|
|
195
195
|
tags: tags,
|
|
196
196
|
type: type,
|
|
197
197
|
_trace: trace,
|
|
198
|
-
id: id
|
|
198
|
+
id: id,
|
|
199
199
|
)
|
|
200
200
|
end
|
|
201
201
|
end
|
|
@@ -406,7 +406,7 @@ module Datadog
|
|
|
406
406
|
distributed_sampling_priority: !!sampling_priority,
|
|
407
407
|
tracer: self,
|
|
408
408
|
baggage: digest.baggage,
|
|
409
|
-
auto_finish: auto_finish
|
|
409
|
+
auto_finish: auto_finish,
|
|
410
410
|
)
|
|
411
411
|
else
|
|
412
412
|
TraceOperation.new(
|
|
@@ -416,7 +416,7 @@ module Datadog
|
|
|
416
416
|
apm_tracing_enabled: apm_tracing_enabled,
|
|
417
417
|
remote_parent: false,
|
|
418
418
|
tracer: self,
|
|
419
|
-
auto_finish: auto_finish
|
|
419
|
+
auto_finish: auto_finish,
|
|
420
420
|
)
|
|
421
421
|
end
|
|
422
422
|
end
|
|
@@ -516,7 +516,7 @@ module Datadog
|
|
|
516
516
|
start_time: start_time,
|
|
517
517
|
tags: resolve_tags(tags, service),
|
|
518
518
|
type: type,
|
|
519
|
-
id: id
|
|
519
|
+
id: id,
|
|
520
520
|
)
|
|
521
521
|
|
|
522
522
|
span.start(start_time)
|
|
@@ -36,7 +36,7 @@ module Datadog
|
|
|
36
36
|
|
|
37
37
|
def serialization_failed
|
|
38
38
|
@reporter.record(chunks_dropped_serialization_error: @remaining_chunks,
|
|
39
|
-
spans_dropped_serialization_error: @remaining_spans
|
|
39
|
+
spans_dropped_serialization_error: @remaining_spans)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def sent(request, response, chunks, spans, bytes, fallback:)
|