datadog 2.36.0 → 2.40.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 +119 -1
- data/bin/ddprofrb +4 -4
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +5 -12
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +105 -18
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +17 -3
- data/ext/datadog_profiling_native_extension/collectors_stack.c +228 -162
- data/ext/datadog_profiling_native_extension/collectors_stack.h +16 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +357 -217
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -0
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +24 -11
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +261 -62
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +17 -9
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +7 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +2 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +12 -7
- data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
- data/ext/libdatadog_api/datadog_ruby_common.h +7 -0
- data/ext/libdatadog_api/di.c +76 -0
- data/ext/libdatadog_api/extconf.rb +29 -23
- data/ext/libdatadog_api/feature_flags.c +26 -0
- data/ext/libdatadog_api/init.c +4 -0
- data/ext/libdatadog_api/trace_exporter.c +974 -0
- data/ext/libdatadog_api/trace_exporter.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +9 -9
- data/lib/datadog/ai_guard/api_client.rb +8 -6
- data/lib/datadog/ai_guard/component.rb +10 -10
- data/lib/datadog/ai_guard/evaluation.rb +1 -0
- data/lib/datadog/ai_guard/ext.rb +2 -0
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +16 -16
- data/lib/datadog/appsec/actions_handler.rb +6 -6
- data/lib/datadog/appsec/anonymizer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/route_extractor.rb +18 -15
- data/lib/datadog/appsec/api_security/sampler.rb +5 -5
- data/lib/datadog/appsec/api_security.rb +1 -1
- data/lib/datadog/appsec/assets.rb +7 -7
- data/lib/datadog/appsec/autoload.rb +3 -3
- data/lib/datadog/appsec/component.rb +15 -15
- data/lib/datadog/appsec/compressed_json.rb +6 -6
- data/lib/datadog/appsec/configuration.rb +73 -58
- data/lib/datadog/appsec/context.rb +9 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -6
- data/lib/datadog/appsec/contrib/active_record/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -4
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +7 -7
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +36 -34
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +3 -3
- data/lib/datadog/appsec/contrib/devise/ext.rb +20 -20
- data/lib/datadog/appsec/contrib/devise/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/devise/patcher.rb +8 -8
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +12 -12
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +8 -8
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +24 -9
- data/lib/datadog/appsec/contrib/excon/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/excon/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +76 -21
- data/lib/datadog/appsec/contrib/faraday/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +72 -18
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +3 -3
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
- data/lib/datadog/appsec/contrib/graphql/integration.rb +9 -9
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/buffered_input.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +18 -17
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +25 -21
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +9 -22
- data/lib/datadog/appsec/contrib/rack/integration.rb +6 -6
- data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +45 -24
- data/lib/datadog/appsec/contrib/rack/response_body.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +14 -8
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +10 -10
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +3 -3
- data/lib/datadog/appsec/contrib/rails/request.rb +3 -3
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +74 -21
- data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +16 -12
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -11
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +3 -3
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
- data/lib/datadog/appsec/counter_sampler.rb +1 -1
- data/lib/datadog/appsec/event.rb +14 -14
- data/lib/datadog/appsec/ext.rb +11 -10
- data/lib/datadog/appsec/extensions.rb +2 -2
- data/lib/datadog/appsec/instrumentation/gateway.rb +1 -1
- data/lib/datadog/appsec/metrics/collector.rb +18 -1
- data/lib/datadog/appsec/metrics/exporter.rb +17 -11
- data/lib/datadog/appsec/metrics/telemetry.rb +7 -7
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +4 -4
- data/lib/datadog/appsec/metrics.rb +4 -4
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +16 -12
- data/lib/datadog/appsec/monitor.rb +1 -1
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -26
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +15 -9
- data/lib/datadog/appsec/response.rb +21 -21
- data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
- data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
- data/lib/datadog/appsec/route_normalizer.rb +80 -0
- data/lib/datadog/appsec/security_engine/engine.rb +37 -37
- data/lib/datadog/appsec/security_engine/runner.rb +2 -2
- data/lib/datadog/appsec/security_event.rb +2 -2
- data/lib/datadog/appsec/utils/http/body.rb +11 -8
- data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +15 -15
- data/lib/datadog/appsec/utils/http/media_type.rb +4 -4
- data/lib/datadog/appsec/utils/http/url_encoded.rb +80 -25
- data/lib/datadog/appsec.rb +16 -16
- data/lib/datadog/auto_instrument.rb +2 -2
- data/lib/datadog/core/buffer/cruby.rb +1 -1
- data/lib/datadog/core/buffer/thread_safe.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +15 -15
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
- data/lib/datadog/core/configuration/base.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +115 -31
- data/lib/datadog/core/configuration/components_state.rb +6 -1
- data/lib/datadog/core/configuration/config_helper.rb +3 -3
- data/lib/datadog/core/configuration/deprecations.rb +6 -6
- data/lib/datadog/core/configuration/ext.rb +11 -11
- data/lib/datadog/core/configuration/option.rb +16 -16
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +93 -104
- data/lib/datadog/core/configuration/stable_config.rb +1 -1
- data/lib/datadog/core/configuration/supported_configurations.rb +8 -1
- data/lib/datadog/core/configuration.rb +8 -8
- data/lib/datadog/core/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/core/crashtracking/component.rb +9 -9
- data/lib/datadog/core/crashtracking/tag_builder.rb +5 -5
- data/lib/datadog/core/deprecations.rb +1 -1
- data/lib/datadog/core/diagnostics/environment_logger.rb +6 -6
- data/lib/datadog/core/diagnostics/health.rb +2 -2
- data/lib/datadog/core/encoding.rb +4 -4
- data/lib/datadog/core/environment/agent_info.rb +2 -2
- data/lib/datadog/core/environment/cgroup.rb +4 -4
- data/lib/datadog/core/environment/container.rb +9 -9
- data/lib/datadog/core/environment/execution.rb +3 -3
- data/lib/datadog/core/environment/ext.rb +18 -18
- data/lib/datadog/core/environment/gc.rb +1 -1
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/identity.rb +10 -10
- data/lib/datadog/core/environment/platform.rb +8 -8
- data/lib/datadog/core/environment/process.rb +3 -3
- data/lib/datadog/core/environment/socket.rb +2 -2
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/environment/vm_cache.rb +1 -1
- data/lib/datadog/core/environment/yjit.rb +2 -2
- data/lib/datadog/core/error.rb +5 -5
- data/lib/datadog/core/evp.rb +11 -0
- data/lib/datadog/core/extensions.rb +1 -1
- data/lib/datadog/core/feature_flags.rb +2 -2
- data/lib/datadog/core/git/ext.rb +4 -4
- data/lib/datadog/core/knuth_sampler.rb +3 -1
- data/lib/datadog/core/logger.rb +3 -3
- data/lib/datadog/core/logging/ext.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +21 -21
- data/lib/datadog/core/metrics/ext.rb +5 -5
- data/lib/datadog/core/metrics/logging.rb +2 -2
- data/lib/datadog/core/metrics/options.rb +3 -3
- data/lib/datadog/core/pin.rb +1 -1
- data/lib/datadog/core/process_discovery.rb +8 -8
- data/lib/datadog/core/rate_limiter.rb +1 -1
- data/lib/datadog/core/remote/client/capabilities.rb +62 -19
- data/lib/datadog/core/remote/client.rb +16 -16
- data/lib/datadog/core/remote/component.rb +20 -12
- data/lib/datadog/core/remote/configuration/content.rb +3 -3
- data/lib/datadog/core/remote/configuration/digest.rb +1 -1
- data/lib/datadog/core/remote/configuration/path.rb +9 -9
- data/lib/datadog/core/remote/configuration/repository.rb +2 -2
- data/lib/datadog/core/remote/configuration/target.rb +9 -9
- data/lib/datadog/core/remote/configuration.rb +4 -4
- data/lib/datadog/core/remote/ext.rb +3 -3
- data/lib/datadog/core/remote/negotiation.rb +1 -1
- data/lib/datadog/core/remote/tie/tracing.rb +7 -7
- data/lib/datadog/core/remote/transport/config.rb +4 -4
- data/lib/datadog/core/remote/transport/http/config.rb +7 -7
- data/lib/datadog/core/remote/transport/http/negotiation.rb +4 -4
- data/lib/datadog/core/remote/transport/http.rb +10 -10
- data/lib/datadog/core/remote/transport/negotiation.rb +3 -3
- data/lib/datadog/core/remote/worker.rb +5 -5
- data/lib/datadog/core/runtime/ext.rb +22 -22
- data/lib/datadog/core/runtime/metrics.rb +9 -9
- data/lib/datadog/core/tag_builder.rb +18 -18
- data/lib/datadog/core/tag_normalizer.rb +7 -7
- data/lib/datadog/core/telemetry/component.rb +13 -13
- data/lib/datadog/core/telemetry/emitter.rb +4 -4
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +5 -5
- data/lib/datadog/core/telemetry/event/app_closing.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +2 -2
- data/lib/datadog/core/telemetry/event/app_started.rb +41 -34
- data/lib/datadog/core/telemetry/event/base.rb +1 -1
- data/lib/datadog/core/telemetry/event/distributions.rb +2 -2
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +2 -2
- data/lib/datadog/core/telemetry/event/log.rb +4 -4
- data/lib/datadog/core/telemetry/event/message_batch.rb +1 -1
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +3 -3
- data/lib/datadog/core/telemetry/event.rb +16 -16
- data/lib/datadog/core/telemetry/ext.rb +11 -11
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +5 -5
- data/lib/datadog/core/telemetry/metric.rb +7 -7
- data/lib/datadog/core/telemetry/metrics_collection.rb +2 -2
- data/lib/datadog/core/telemetry/metrics_manager.rb +1 -1
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +14 -14
- data/lib/datadog/core/telemetry/transport/http.rb +7 -7
- data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -3
- data/lib/datadog/core/telemetry/worker.rb +6 -6
- data/lib/datadog/core/transport/ext.rb +14 -14
- data/lib/datadog/core/transport/http/adapters/net.rb +4 -4
- data/lib/datadog/core/transport/http/adapters/test.rb +1 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +4 -4
- data/lib/datadog/core/transport/http/api/endpoint.rb +1 -1
- data/lib/datadog/core/transport/http/api/map.rb +1 -1
- data/lib/datadog/core/transport/http/builder.rb +6 -6
- data/lib/datadog/core/transport/http/client.rb +2 -2
- data/lib/datadog/core/transport/http/response.rb +1 -1
- data/lib/datadog/core/transport/http.rb +8 -8
- data/lib/datadog/core/transport/transport.rb +1 -1
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +83 -15
- data/lib/datadog/core/utils/base64_codec.rb +3 -3
- data/lib/datadog/core/utils/duration.rb +1 -1
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/lru_cache.rb +3 -3
- data/lib/datadog/core/utils/network.rb +11 -11
- data/lib/datadog/core/utils/only_once_successful.rb +1 -1
- data/lib/datadog/core/utils/safe_dup.rb +2 -1
- data/lib/datadog/core/utils/sequence.rb +3 -6
- data/lib/datadog/core/utils/spawn_monkey_patch.rb +2 -2
- data/lib/datadog/core/utils/time.rb +18 -52
- data/lib/datadog/core/utils/url.rb +1 -1
- data/lib/datadog/core/utils.rb +4 -4
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
- data/lib/datadog/core.rb +4 -4
- data/lib/datadog/data_streams/configuration.rb +3 -3
- data/lib/datadog/data_streams/ext.rb +1 -1
- data/lib/datadog/data_streams/extensions.rb +2 -2
- data/lib/datadog/data_streams/pathway_context.rb +5 -5
- data/lib/datadog/data_streams/processor.rb +52 -52
- data/lib/datadog/data_streams/transport/http/stats.rb +5 -5
- data/lib/datadog/data_streams/transport/http.rb +5 -5
- data/lib/datadog/data_streams/transport/stats.rb +7 -7
- data/lib/datadog/data_streams.rb +5 -5
- data/lib/datadog/di/base.rb +6 -4
- data/lib/datadog/di/boot.rb +25 -22
- data/lib/datadog/di/capture_expression.rb +21 -0
- data/lib/datadog/di/capture_expression_evaluator.rb +71 -0
- data/lib/datadog/di/capture_limits.rb +41 -0
- data/lib/datadog/di/code_tracker.rb +10 -7
- data/lib/datadog/di/component.rb +122 -40
- data/lib/datadog/di/configuration.rb +7 -1
- data/lib/datadog/di/context.rb +9 -3
- data/lib/datadog/di/contrib/railtie.rb +1 -1
- data/lib/datadog/di/contrib.rb +5 -5
- data/lib/datadog/di/el/compiler.rb +91 -38
- data/lib/datadog/di/el/evaluator.rb +82 -2
- data/lib/datadog/di/el/expression.rb +10 -2
- data/lib/datadog/di/el.rb +3 -3
- data/lib/datadog/di/error.rb +10 -0
- data/lib/datadog/di/fatal_exceptions.rb +26 -0
- data/lib/datadog/di/instrumenter.rb +426 -169
- data/lib/datadog/di/logger.rb +1 -1
- data/lib/datadog/di/preload.rb +1 -1
- data/lib/datadog/di/probe.rb +61 -2
- data/lib/datadog/di/probe_builder.rb +96 -14
- data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +12 -7
- data/lib/datadog/di/probe_manager.rb +67 -9
- data/lib/datadog/di/probe_notification_builder.rb +66 -22
- data/lib/datadog/di/probe_notifier_worker.rb +57 -37
- data/lib/datadog/di/probe_repository.rb +1 -1
- data/lib/datadog/di/redactor.rb +16 -1
- data/lib/datadog/di/remote.rb +178 -17
- data/lib/datadog/di/serializer.rb +47 -28
- data/lib/datadog/di/transport/diagnostics.rb +5 -5
- data/lib/datadog/di/transport/http/diagnostics.rb +3 -3
- data/lib/datadog/di/transport/http/input.rb +2 -2
- data/lib/datadog/di/transport/http.rb +10 -10
- data/lib/datadog/di/transport/input.rb +16 -12
- data/lib/datadog/di/utils.rb +4 -4
- data/lib/datadog/di.rb +66 -3
- data/lib/datadog/error_tracking/collector.rb +2 -2
- data/lib/datadog/error_tracking/component.rb +12 -12
- data/lib/datadog/error_tracking/configuration.rb +2 -2
- data/lib/datadog/error_tracking/ext.rb +7 -7
- data/lib/datadog/error_tracking/extensions.rb +2 -2
- data/lib/datadog/error_tracking/filters.rb +4 -4
- data/lib/datadog/error_tracking.rb +6 -6
- data/lib/datadog/kit/appsec/events/v2.rb +90 -32
- data/lib/datadog/kit/appsec/events.rb +25 -25
- data/lib/datadog/kit/enable_core_dumps.rb +2 -2
- data/lib/datadog/kit/identity.rb +18 -18
- data/lib/datadog/kit/tracing/method_tracer.rb +7 -7
- data/lib/datadog/kit.rb +1 -1
- data/lib/datadog/open_feature/component.rb +53 -21
- data/lib/datadog/open_feature/configuration.rb +22 -1
- data/lib/datadog/open_feature/evaluation_engine.rb +7 -7
- data/lib/datadog/open_feature/exposures/buffer.rb +1 -1
- data/lib/datadog/open_feature/exposures/deduplicator.rb +1 -1
- data/lib/datadog/open_feature/exposures/event.rb +2 -2
- data/lib/datadog/open_feature/exposures/reporter.rb +3 -3
- data/lib/datadog/open_feature/exposures/worker.rb +6 -6
- data/lib/datadog/open_feature/ext.rb +13 -6
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
- data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +102 -0
- data/lib/datadog/open_feature/hooks/{flag_eval_hook.rb → flag_eval_metrics_hook.rb} +4 -2
- data/lib/datadog/open_feature/hooks/span_enrichment_hook/codec.rb +58 -0
- data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state.rb +96 -0
- data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state_store.rb +49 -0
- data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +184 -0
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +24 -24
- data/lib/datadog/open_feature/native_evaluator.rb +23 -1
- data/lib/datadog/open_feature/noop_evaluator.rb +3 -3
- data/lib/datadog/open_feature/provider.rb +97 -30
- data/lib/datadog/open_feature/remote.rb +2 -2
- data/lib/datadog/open_feature/resolution_details.rb +4 -2
- data/lib/datadog/open_feature/transport.rb +65 -11
- data/lib/datadog/open_feature.rb +2 -2
- data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
- data/lib/datadog/opentelemetry/api/context.rb +4 -4
- data/lib/datadog/opentelemetry/configuration/settings.rb +41 -41
- data/lib/datadog/opentelemetry/ext.rb +1 -1
- data/lib/datadog/opentelemetry/logs.rb +5 -5
- data/lib/datadog/opentelemetry/metrics.rb +7 -7
- data/lib/datadog/opentelemetry/sdk/configurator.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +2 -2
- data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +10 -17
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +8 -15
- data/lib/datadog/opentelemetry/sdk/propagator.rb +7 -7
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +15 -15
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +32 -32
- data/lib/datadog/opentelemetry/sdk.rb +19 -0
- data/lib/datadog/opentelemetry/signal_configuration.rb +11 -11
- data/lib/datadog/opentelemetry/trace.rb +1 -1
- data/lib/datadog/opentelemetry.rb +8 -8
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -1
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -3
- data/lib/datadog/profiling/collectors/thread_context.rb +15 -14
- data/lib/datadog/profiling/component.rb +18 -0
- data/lib/datadog/profiling/exporter.rb +1 -1
- data/lib/datadog/profiling/http_transport.rb +1 -1
- data/lib/datadog/profiling/sequence_tracker.rb +1 -1
- data/lib/datadog/profiling/tag_builder.rb +19 -19
- data/lib/datadog/profiling.rb +31 -27
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/symbol_database/component.rb +177 -60
- data/lib/datadog/symbol_database/configuration.rb +15 -7
- data/lib/datadog/symbol_database/extensions.rb +19 -0
- data/lib/datadog/symbol_database/extractor.rb +167 -130
- data/lib/datadog/symbol_database/file_hash.rb +5 -3
- data/lib/datadog/symbol_database/logger.rb +1 -1
- data/lib/datadog/symbol_database/remote.rb +28 -8
- data/lib/datadog/symbol_database/scope.rb +2 -2
- data/lib/datadog/symbol_database/scope_batcher.rb +8 -4
- data/lib/datadog/symbol_database/service_version.rb +4 -4
- data/lib/datadog/symbol_database/symbol.rb +1 -1
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +1 -1
- data/lib/datadog/symbol_database/transport/http.rb +6 -6
- data/lib/datadog/symbol_database/transport.rb +4 -4
- data/lib/datadog/symbol_database/uploader.rb +28 -21
- data/lib/datadog/symbol_database.rb +22 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +5 -5
- data/lib/datadog/tracing/client_ip.rb +4 -4
- data/lib/datadog/tracing/component.rb +28 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +8 -8
- data/lib/datadog/tracing/configuration/ext.rb +43 -42
- data/lib/datadog/tracing/configuration/http.rb +2 -2
- data/lib/datadog/tracing/configuration/settings.rb +32 -16
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +5 -5
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +5 -5
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +18 -18
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +8 -8
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +18 -18
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +8 -8
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -10
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +6 -6
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +6 -6
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/ext.rb +10 -10
- data/lib/datadog/tracing/contrib/action_view/integration.rb +11 -11
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_job/data_streams.rb +62 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +5 -5
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
- data/lib/datadog/tracing/contrib/active_job/ext.rb +23 -23
- data/lib/datadog/tracing/contrib/active_job/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +17 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +6 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +7 -8
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +10 -10
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +8 -8
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +9 -9
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/active_record/integration.rb +11 -11
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +3 -3
- data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -11
- data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_support/ext.rb +16 -16
- data/lib/datadog/tracing/contrib/active_support/integration.rb +8 -8
- data/lib/datadog/tracing/contrib/active_support/notifications/event.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 +1 -1
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/analytics.rb +1 -1
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/ext.rb +25 -25
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/aws/integration.rb +9 -9
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +4 -4
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/service/states.rb +5 -5
- data/lib/datadog/tracing/contrib/aws/services.rb +14 -14
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +2 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/ext.rb +13 -13
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +2 -2
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +14 -14
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +5 -5
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -10
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +8 -8
- data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -13
- data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -3
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -5
- data/lib/datadog/tracing/contrib/excon/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -8
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/extensions.rb +2 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -8
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +6 -6
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +20 -20
- data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/grape/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/ext.rb +9 -9
- data/lib/datadog/tracing/contrib/graphql/integration.rb +9 -9
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +7 -7
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +37 -37
- data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -7
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +7 -7
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +6 -6
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +8 -8
- data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -14
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +7 -7
- data/lib/datadog/tracing/contrib/grpc/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc.rb +6 -6
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +3 -3
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/ext.rb +8 -8
- data/lib/datadog/tracing/contrib/hanami/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +3 -3
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +5 -4
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +8 -8
- data/lib/datadog/tracing/contrib/http/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/http/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/http.rb +6 -6
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/httprb/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +7 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +5 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +5 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +5 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +5 -5
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +10 -5
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +10 -5
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
- data/lib/datadog/tracing/contrib/kafka/ext.rb +40 -40
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +8 -8
- data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +14 -14
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +8 -8
- data/lib/datadog/tracing/contrib/karafka.rb +6 -6
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +9 -9
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +18 -18
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +13 -13
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +22 -22
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +13 -13
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +3 -3
- data/lib/datadog/tracing/contrib/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +18 -18
- data/lib/datadog/tracing/contrib/pg/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/ext.rb +21 -21
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +2 -2
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +17 -17
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +5 -5
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +19 -19
- data/lib/datadog/tracing/contrib/que/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/event.rb +4 -4
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/ext.rb +18 -18
- data/lib/datadog/tracing/contrib/racecar/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/ext.rb +33 -33
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +4 -4
- data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -24
- data/lib/datadog/tracing/contrib/rack/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +11 -11
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +15 -15
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/rails/framework.rb +11 -11
- data/lib/datadog/tracing/contrib/rails/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -8
- data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
- data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/ext.rb +12 -12
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +16 -16
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/redis/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/redis/patcher.rb +10 -10
- data/lib/datadog/tracing/contrib/redis/quantize.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/tags.rb +5 -5
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +5 -5
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/resque/ext.rb +7 -7
- data/lib/datadog/tracing/contrib/resque/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/resque/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -5
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -10
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/roda/ext.rb +6 -6
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/roda/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/roda/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/database.rb +6 -10
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/ext.rb +12 -8
- data/lib/datadog/tracing/contrib/sequel/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/utils.rb +115 -10
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +12 -12
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +8 -8
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +9 -9
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -30
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +8 -8
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +14 -14
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +9 -9
- data/lib/datadog/tracing/contrib/sidekiq.rb +6 -6
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -17
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +10 -10
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +8 -8
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +12 -12
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +7 -7
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +3 -3
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +2 -2
- data/lib/datadog/tracing/contrib/status_range_env_parser.rb +2 -2
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/stripe/ext.rb +12 -12
- data/lib/datadog/tracing/contrib/stripe/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/stripe/request.rb +3 -3
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +13 -13
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/trilogy/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/utils/database.rb +5 -5
- data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +10 -10
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +8 -8
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -4
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +7 -7
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +3 -3
- data/lib/datadog/tracing/contrib/waterdrop.rb +6 -6
- data/lib/datadog/tracing/contrib.rb +54 -54
- data/lib/datadog/tracing/correlation.rb +10 -10
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +9 -9
- data/lib/datadog/tracing/diagnostics/ext.rb +19 -19
- data/lib/datadog/tracing/diagnostics/health.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_multi.rb +8 -8
- data/lib/datadog/tracing/distributed/b3_single.rb +4 -4
- data/lib/datadog/tracing/distributed/baggage.rb +28 -27
- data/lib/datadog/tracing/distributed/datadog.rb +21 -21
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +3 -3
- data/lib/datadog/tracing/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/distributed/helpers.rb +3 -3
- data/lib/datadog/tracing/distributed/propagation.rb +12 -12
- data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +33 -33
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/ext.rb +9 -0
- data/lib/datadog/tracing/metadata/analytics.rb +2 -2
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +69 -69
- data/lib/datadog/tracing/metadata/metastruct.rb +1 -1
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +2 -2
- data/lib/datadog/tracing/metadata.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
- data/lib/datadog/tracing/pipeline.rb +2 -2
- data/lib/datadog/tracing/remote.rb +45 -7
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +8 -8
- data/lib/datadog/tracing/sampling/matcher.rb +4 -4
- data/lib/datadog/tracing/sampling/priority_sampler.rb +4 -4
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +3 -3
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/rule.rb +4 -4
- data/lib/datadog/tracing/sampling/rule_sampler.rb +12 -12
- data/lib/datadog/tracing/sampling/sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/span/ext.rb +3 -3
- data/lib/datadog/tracing/sampling/span/matcher.rb +2 -2
- data/lib/datadog/tracing/sampling/span/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +8 -8
- data/lib/datadog/tracing/span.rb +8 -8
- data/lib/datadog/tracing/span_event.rb +5 -5
- data/lib/datadog/tracing/span_operation.rb +21 -21
- data/lib/datadog/tracing/sync_writer.rb +12 -7
- data/lib/datadog/tracing/trace_operation.rb +11 -11
- data/lib/datadog/tracing/trace_segment.rb +10 -10
- data/lib/datadog/tracing/tracer.rb +23 -15
- data/lib/datadog/tracing/transport/http/client.rb +4 -4
- data/lib/datadog/tracing/transport/http/statistics.rb +2 -2
- data/lib/datadog/tracing/transport/http/traces.rb +8 -8
- data/lib/datadog/tracing/transport/http.rb +10 -10
- data/lib/datadog/tracing/transport/io/client.rb +2 -2
- data/lib/datadog/tracing/transport/io/response.rb +1 -1
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/io.rb +3 -3
- data/lib/datadog/tracing/transport/native/response.rb +71 -0
- data/lib/datadog/tracing/transport/native.rb +363 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
- data/lib/datadog/tracing/transport/statistics.rb +2 -2
- data/lib/datadog/tracing/transport/trace_formatter.rb +10 -10
- data/lib/datadog/tracing/transport/traces.rb +8 -8
- data/lib/datadog/tracing/utils.rb +2 -2
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +21 -8
- data/lib/datadog/tracing.rb +3 -3
- data/lib/datadog/version.rb +4 -4
- data/lib/datadog.rb +13 -12
- metadata +33 -8
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Transport
|
|
8
|
+
module Native
|
|
9
|
+
# Response from the native trace exporter.
|
|
10
|
+
#
|
|
11
|
+
# Constructed by the C extension after a send completes (or fails).
|
|
12
|
+
# Implements the same predicate interface as the HTTP transport's
|
|
13
|
+
# response so callers can treat both uniformly.
|
|
14
|
+
class Response
|
|
15
|
+
SERVICE_RATE_KEY = "rate_by_service"
|
|
16
|
+
|
|
17
|
+
attr_reader :trace_count, :payload
|
|
18
|
+
|
|
19
|
+
def initialize(ok:, internal_error: false, server_error: false, client_error: false,
|
|
20
|
+
not_found: false, unsupported: false, trace_count: 0, payload: nil)
|
|
21
|
+
@ok = ok
|
|
22
|
+
@internal_error = internal_error
|
|
23
|
+
@server_error = server_error
|
|
24
|
+
@client_error = client_error
|
|
25
|
+
@not_found = not_found
|
|
26
|
+
@unsupported = unsupported
|
|
27
|
+
@trace_count = trace_count
|
|
28
|
+
@payload = payload
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ok?
|
|
32
|
+
@ok
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def internal_error?
|
|
36
|
+
@internal_error
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def server_error?
|
|
40
|
+
@server_error
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def client_error?
|
|
44
|
+
@client_error
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def not_found?
|
|
48
|
+
@not_found
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def unsupported?
|
|
52
|
+
@unsupported
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Parse the agent's JSON response body and extract the
|
|
56
|
+
# +rate_by_service+ map. Returns +nil+ when the payload
|
|
57
|
+
# is absent or does not contain sampling rates.
|
|
58
|
+
def service_rates
|
|
59
|
+
payload = @payload
|
|
60
|
+
return nil if payload.nil? || payload.empty?
|
|
61
|
+
|
|
62
|
+
parsed = JSON.parse(payload)
|
|
63
|
+
parsed[SERVICE_RATE_KEY] if parsed.is_a?(Hash)
|
|
64
|
+
rescue JSON::ParserError
|
|
65
|
+
nil
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require_relative "trace_formatter"
|
|
5
|
+
require_relative "statistics"
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Tracing
|
|
9
|
+
module Transport
|
|
10
|
+
# Transport backed by the native trace exporter (Rust via C FFI).
|
|
11
|
+
#
|
|
12
|
+
# Converts Ruby Span objects directly to Rust spans and delegates
|
|
13
|
+
# serialization and sending to the Rust data pipeline, which handles
|
|
14
|
+
# stats computation, msgpack encoding, and HTTP transport with retry
|
|
15
|
+
# logic.
|
|
16
|
+
#
|
|
17
|
+
# Implements the same +send_traces+ / +stats+ interface as
|
|
18
|
+
# {Datadog::Tracing::Transport::Traces::Transport} so it can be used
|
|
19
|
+
# as a drop-in replacement via the +Writer+'s +:transport+ option.
|
|
20
|
+
module Native
|
|
21
|
+
# Returns +nil+ when the native extension is available, or a +String+
|
|
22
|
+
# describing why it is not.
|
|
23
|
+
UNSUPPORTED_REASON = begin
|
|
24
|
+
require "datadog/core"
|
|
25
|
+
Datadog::Core::LIBDATADOG_API_FAILURE
|
|
26
|
+
rescue => e
|
|
27
|
+
e.message
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.supported?
|
|
31
|
+
UNSUPPORTED_REASON.nil?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# +TraceExporter+ and +TracerSpan+ are defined by the C extension in
|
|
35
|
+
# +ext/libdatadog_api/trace_exporter.c+ and become available after the
|
|
36
|
+
# native extension is loaded. +Response+ is a plain Ruby class (see
|
|
37
|
+
# +native/response.rb+); the C side only resolves and instantiates it.
|
|
38
|
+
#
|
|
39
|
+
# The hierarchy is:
|
|
40
|
+
# Datadog::Tracing::Transport::Native::TraceExporter (C)
|
|
41
|
+
# Datadog::Tracing::Transport::Native::TracerSpan (C)
|
|
42
|
+
# Datadog::Tracing::Transport::Native::Response (Ruby)
|
|
43
|
+
|
|
44
|
+
# Drop-in transport that delegates to the native trace exporter.
|
|
45
|
+
class Transport
|
|
46
|
+
include Statistics
|
|
47
|
+
|
|
48
|
+
attr_reader :logger
|
|
49
|
+
|
|
50
|
+
# @param agent_settings [Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings]
|
|
51
|
+
# Agent connection settings (provides +#url+).
|
|
52
|
+
# @param logger [Logger]
|
|
53
|
+
def initialize(agent_settings:, logger:)
|
|
54
|
+
unless Native.supported?
|
|
55
|
+
raise "Native transport is not supported: #{UNSUPPORTED_REASON}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
@logger = logger
|
|
59
|
+
|
|
60
|
+
# Guards the one-shot warning about span fields the native exporter
|
|
61
|
+
# does not yet convert (see #warn_unsupported_fields!).
|
|
62
|
+
@unsupported_fields_warned = false
|
|
63
|
+
|
|
64
|
+
# Serializes native sends and is held across a fork. See the
|
|
65
|
+
# fork-safety note below.
|
|
66
|
+
@send_mutex = Mutex.new
|
|
67
|
+
|
|
68
|
+
url = agent_settings.url
|
|
69
|
+
tracer_version = tracer_version_string
|
|
70
|
+
language = Core::Environment::Ext::LANG
|
|
71
|
+
language_version = Core::Environment::Ext::LANG_VERSION
|
|
72
|
+
language_interpreter = Core::Environment::Ext::LANG_INTERPRETER
|
|
73
|
+
hostname = begin
|
|
74
|
+
Core::Environment::Socket.hostname
|
|
75
|
+
rescue
|
|
76
|
+
nil
|
|
77
|
+
end
|
|
78
|
+
env = Datadog.configuration.env
|
|
79
|
+
service = Datadog.configuration.service
|
|
80
|
+
version = Datadog.configuration.version
|
|
81
|
+
|
|
82
|
+
exporter = Native::TraceExporter._native_new(
|
|
83
|
+
url: url,
|
|
84
|
+
tracer_version: tracer_version,
|
|
85
|
+
language: language,
|
|
86
|
+
language_version: language_version,
|
|
87
|
+
language_interpreter: language_interpreter,
|
|
88
|
+
hostname: hostname,
|
|
89
|
+
env: env,
|
|
90
|
+
service: service,
|
|
91
|
+
version: version
|
|
92
|
+
)
|
|
93
|
+
@exporter = exporter
|
|
94
|
+
|
|
95
|
+
# Fork safety: the native exporter owns a long-lived tokio runtime
|
|
96
|
+
# with background worker threads. Around a fork we must quiesce the
|
|
97
|
+
# runtime before forking and restore it afterwards in both the parent
|
|
98
|
+
# and the child (where the inherited runtime is dead).
|
|
99
|
+
#
|
|
100
|
+
# A libdatadog Rust call must NOT be interrupted by `fork()`. A
|
|
101
|
+
# native send releases the GVL during the Rust
|
|
102
|
+
# `ddog_trace_exporter_send_trace_chunks` call, so if another thread
|
|
103
|
+
# forks while a (typically the writer/`AsyncTransport`) thread is
|
|
104
|
+
# mid-send, the child would inherit a half-completed send and
|
|
105
|
+
# Rust-internal locks, deadlocking or crashing. `_native_before_fork`
|
|
106
|
+
# also tears down and replaces the runtime, so it must not run while
|
|
107
|
+
# a send is still using that runtime.
|
|
108
|
+
#
|
|
109
|
+
# `@send_mutex` serializes sends (see #send_traces) and is held
|
|
110
|
+
# across the fork. The `:before` hook first calls
|
|
111
|
+
# `_native_before_fork` to pause the runtime, THEN locks the mutex.
|
|
112
|
+
# This ordering minimizes the serialized section and is safe to run
|
|
113
|
+
# concurrently with an in-flight send: `block_on` (used by
|
|
114
|
+
# `send_trace_chunks`) only briefly locks the runtime mutex to clone
|
|
115
|
+
# the `Arc<Runtime>` (or build a throwaway `current_thread` runtime
|
|
116
|
+
# if it has been taken) and then drives the send on its own clone
|
|
117
|
+
# holding no mutex, while `_native_before_fork` just `take()`s the
|
|
118
|
+
# shared `Arc` and pauses workers -- so neither deadlocks the other.
|
|
119
|
+
# Locking the mutex AFTER `_native_before_fork` still guarantees the
|
|
120
|
+
# drain: it BLOCKS until any in-flight send finishes (bounded by the
|
|
121
|
+
# exporter's request timeout), which drops the send's last `Arc` and
|
|
122
|
+
# fully shuts the runtime down, and prevents new sends from starting.
|
|
123
|
+
# The lock is released in the `:parent` and `:child` hooks. In
|
|
124
|
+
# practice only one writer thread sends, so serializing adds no real
|
|
125
|
+
# contention.
|
|
126
|
+
#
|
|
127
|
+
# Note: the `:before` block runs before genuine forks (web-server
|
|
128
|
+
# workers, `Process.daemon`) that go through `Process._fork`. It
|
|
129
|
+
# does NOT run for `system`/backtick/`IO.popen`/`Process.spawn`,
|
|
130
|
+
# which spawn via `posix_spawn`/`vfork`+`exec` and replace the
|
|
131
|
+
# process image rather than carrying over the parent's work. Keeping
|
|
132
|
+
# it cheap is still worthwhile since real forks can be frequent.
|
|
133
|
+
#
|
|
134
|
+
# The hooks below are process-global and are never auto-removed by
|
|
135
|
+
# the fork machinery, so each transport must deregister its own
|
|
136
|
+
# hooks when it goes away (see #close and the finalizer): otherwise
|
|
137
|
+
# the closures keep the exporter -- and its runtime threads -- alive
|
|
138
|
+
# forever, and every later fork runs them against every
|
|
139
|
+
# historically-created exporter. The closures intentionally capture
|
|
140
|
+
# only the `exporter`/`send_mutex` locals (NOT `self`), so the
|
|
141
|
+
# Transport stays GC-eligible and its finalizer can fire even when
|
|
142
|
+
# #close was not called explicitly.
|
|
143
|
+
send_mutex = @send_mutex
|
|
144
|
+
before_hook = Core::Utils::AtForkMonkeyPatch.at_fork(:before) do
|
|
145
|
+
# Pause the runtime first (safe to run concurrently with an
|
|
146
|
+
# in-flight send), then drain by locking the mutex. The lock must
|
|
147
|
+
# happen even if `_native_before_fork` raises, so the in-flight
|
|
148
|
+
# send has returned (dropping the runtime's last `Arc`) before the
|
|
149
|
+
# fork. Held across the fork; released in :parent/:child.
|
|
150
|
+
exporter._native_before_fork
|
|
151
|
+
rescue => e
|
|
152
|
+
Datadog.logger.warn { "Native transport before-fork preparation failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
|
|
153
|
+
ensure
|
|
154
|
+
send_mutex.lock
|
|
155
|
+
end
|
|
156
|
+
parent_hook = Core::Utils::AtForkMonkeyPatch.at_fork(:parent) do
|
|
157
|
+
exporter._native_after_fork_in_parent
|
|
158
|
+
rescue => e
|
|
159
|
+
Datadog.logger.warn { "Native transport after-fork reset failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
|
|
160
|
+
ensure
|
|
161
|
+
# `:before`'s ensure always locks the mutex on the forking thread
|
|
162
|
+
# before any fork outcome, so it is normally owned here; the guard
|
|
163
|
+
# only covers `:before` being interrupted mid-lock (e.g. a kill
|
|
164
|
+
# between `_native_before_fork` and the lock). Released even if the
|
|
165
|
+
# native call raised, so a failure can't leave the mutex locked.
|
|
166
|
+
send_mutex.unlock if send_mutex.owned?
|
|
167
|
+
end
|
|
168
|
+
child_hook = Core::Utils::AtForkMonkeyPatch.at_fork(:child) do
|
|
169
|
+
exporter._native_after_fork_in_child
|
|
170
|
+
rescue => e
|
|
171
|
+
Datadog.logger.warn { "Native transport after-fork reset failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
|
|
172
|
+
ensure
|
|
173
|
+
# See the :parent hook: normally owned (the forking thread is the
|
|
174
|
+
# lone survivor in the child); the guard only covers `:before`
|
|
175
|
+
# being interrupted mid-lock.
|
|
176
|
+
send_mutex.unlock if send_mutex.owned?
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
@fork_hooks = {before: before_hook, parent: parent_hook, child: child_hook}
|
|
180
|
+
|
|
181
|
+
# Fallback so a dropped (un-#close'd) transport doesn't leak its
|
|
182
|
+
# global fork hooks (and, through them, the exporter/runtime). The
|
|
183
|
+
# finalizer proc is built by a class method capturing ONLY the
|
|
184
|
+
# stage->block handles, never `self` -- a finalizer that closed over
|
|
185
|
+
# the object it is attached to would keep that object reachable and
|
|
186
|
+
# never run.
|
|
187
|
+
ObjectSpace.define_finalizer(self, self.class.send(:finalizer_for, @fork_hooks))
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Deregister this transport's process-global fork hooks and release the
|
|
191
|
+
# native exporter so its runtime can shut down. Idempotent: safe to
|
|
192
|
+
# call multiple times and safe to call after the finalizer has run.
|
|
193
|
+
def close
|
|
194
|
+
fork_hooks = @fork_hooks
|
|
195
|
+
@fork_hooks = nil
|
|
196
|
+
return if fork_hooks.nil?
|
|
197
|
+
|
|
198
|
+
fork_hooks.each do |stage, block|
|
|
199
|
+
Core::Utils::AtForkMonkeyPatch.remove_at_fork(stage, block)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Drop our reference to the exporter so that, once the hooks above no
|
|
203
|
+
# longer pin it, it can be collected and its runtime shut down
|
|
204
|
+
# cleanly in this (parent) process.
|
|
205
|
+
@exporter = nil
|
|
206
|
+
|
|
207
|
+
# The finalizer only exists to deregister the hooks for a transport
|
|
208
|
+
# dropped without #close. We have just done that, so remove it;
|
|
209
|
+
# otherwise its captured hook blocks keep the exporter (and its
|
|
210
|
+
# runtime threads) alive until this still-reachable transport is
|
|
211
|
+
# itself collected.
|
|
212
|
+
ObjectSpace.undefine_finalizer(self)
|
|
213
|
+
|
|
214
|
+
nil
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Builds the finalizer proc for a transport's fork hooks.
|
|
218
|
+
#
|
|
219
|
+
# Defined as a class method so the proc closes over ONLY the
|
|
220
|
+
# stage->block handles passed in and never over a Transport instance
|
|
221
|
+
# (which would keep the instance reachable and prevent the finalizer
|
|
222
|
+
# from ever running). Removing the hooks unpins the exporter captured
|
|
223
|
+
# by those closures, allowing it (and its runtime) to be freed.
|
|
224
|
+
def self.finalizer_for(fork_hooks)
|
|
225
|
+
proc do
|
|
226
|
+
fork_hooks.each do |stage, block|
|
|
227
|
+
Core::Utils::AtForkMonkeyPatch.remove_at_fork(stage, block)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
private_class_method :finalizer_for
|
|
232
|
+
|
|
233
|
+
# Send a list of traces to the agent.
|
|
234
|
+
#
|
|
235
|
+
# Each trace is a {Datadog::Tracing::TraceSegment} whose +#spans+
|
|
236
|
+
# returns an +Array+ of {Datadog::Tracing::Span}.
|
|
237
|
+
#
|
|
238
|
+
# @param traces [Array<Datadog::Tracing::TraceSegment>]
|
|
239
|
+
# @return [Array<Response>] one response per batch sent
|
|
240
|
+
def send_traces(traces)
|
|
241
|
+
return [] if traces.empty?
|
|
242
|
+
|
|
243
|
+
# A closed transport has released its exporter; there is nothing to
|
|
244
|
+
# send through. Raising here is caught below and surfaced as an
|
|
245
|
+
# InternalErrorResponse, matching the other failure paths.
|
|
246
|
+
exporter = @exporter
|
|
247
|
+
raise "Native transport has been closed" if exporter.nil?
|
|
248
|
+
|
|
249
|
+
# Apply trace-level tags to root spans (same as the HTTP transport)
|
|
250
|
+
traces.each { |trace| TraceFormatter.format!(trace) }
|
|
251
|
+
|
|
252
|
+
# Build the Array<Array<Span>> structure expected by the C extension.
|
|
253
|
+
# Each trace segment becomes one inner array (one trace chunk).
|
|
254
|
+
chunks = traces.map(&:spans)
|
|
255
|
+
|
|
256
|
+
# The native exporter only serializes scalar fields plus meta and
|
|
257
|
+
# metrics; span events, span links, and meta_struct are not yet
|
|
258
|
+
# converted and would be dropped. Warn (once) so the loss is visible.
|
|
259
|
+
warn_unsupported_fields!(chunks)
|
|
260
|
+
|
|
261
|
+
# Serialize the native send and hold the mutex across it so a
|
|
262
|
+
# concurrent fork's :before hook blocks until this send drains
|
|
263
|
+
# (and `_native_before_fork` cannot tear down the runtime mid-send).
|
|
264
|
+
# `Mutex#synchronize` releases on exception / `rb_jump_tag` via its
|
|
265
|
+
# ensure, so interrupt propagation stays correct.
|
|
266
|
+
responses = @send_mutex.synchronize { exporter._native_send_traces(chunks) }
|
|
267
|
+
|
|
268
|
+
# Update statistics from the response
|
|
269
|
+
responses.each { |response| update_stats_from_response!(response) }
|
|
270
|
+
|
|
271
|
+
responses
|
|
272
|
+
rescue => e
|
|
273
|
+
logger.debug { "Native transport error: #{e.class} #{e.message}" }
|
|
274
|
+
update_stats_from_exception!(e)
|
|
275
|
+
[InternalErrorResponse.new(e)]
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
private
|
|
279
|
+
|
|
280
|
+
# Warn, at most once per transport, when a batch contains span fields
|
|
281
|
+
# the native exporter does not yet convert (span events, span links,
|
|
282
|
+
# meta_struct). These are silently dropped by the native path; full
|
|
283
|
+
# support is tracked separately. The check is cheap: the fields are
|
|
284
|
+
# already-materialized collections on each Span.
|
|
285
|
+
def warn_unsupported_fields!(chunks)
|
|
286
|
+
return if @unsupported_fields_warned
|
|
287
|
+
|
|
288
|
+
unsupported = []
|
|
289
|
+
chunks.each do |spans|
|
|
290
|
+
spans.each do |span|
|
|
291
|
+
unsupported << "span events" if span.events.any?
|
|
292
|
+
unsupported << "span links" if span.links.any?
|
|
293
|
+
unsupported << "meta_struct" unless span.metastruct.to_h.empty?
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
return if unsupported.empty?
|
|
297
|
+
|
|
298
|
+
@unsupported_fields_warned = true
|
|
299
|
+
fields = unsupported.uniq.join(", ")
|
|
300
|
+
logger.warn do
|
|
301
|
+
"Native transport does not yet support: #{fields}. This data will not be sent to Datadog. " \
|
|
302
|
+
"Unset DD_EXPERIMENTAL_NATIVE_TRANSPORT_ENABLED to use the default transport if you rely on these."
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def tracer_version_string
|
|
307
|
+
defined?(Datadog::VERSION::STRING) ? Datadog::VERSION::STRING : "unknown"
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# Response for internal errors (exceptions raised before reaching
|
|
312
|
+
# the native transport).
|
|
313
|
+
class InternalErrorResponse
|
|
314
|
+
attr_reader :error
|
|
315
|
+
|
|
316
|
+
def initialize(error)
|
|
317
|
+
@error = error
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def ok?
|
|
321
|
+
false
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def internal_error?
|
|
325
|
+
true
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def server_error?
|
|
329
|
+
false
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def client_error?
|
|
333
|
+
false
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
def not_found?
|
|
337
|
+
false
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def unsupported?
|
|
341
|
+
false
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def payload
|
|
345
|
+
nil
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def trace_count
|
|
349
|
+
0
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def service_rates
|
|
353
|
+
nil
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
def inspect
|
|
357
|
+
"#<#{self.class} error=#{error.inspect}>"
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "json"
|
|
4
|
+
require "msgpack"
|
|
5
|
+
require "datadog/tracing/utils"
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Tracing
|
|
@@ -76,10 +76,10 @@ module Datadog
|
|
|
76
76
|
if span.stopped?
|
|
77
77
|
packer.write_map_header(number_of_elements_to_write + 2) # Set header with how many elements in the map
|
|
78
78
|
|
|
79
|
-
packer.write(
|
|
79
|
+
packer.write("start")
|
|
80
80
|
packer.write(time_nano(span.start_time))
|
|
81
81
|
|
|
82
|
-
packer.write(
|
|
82
|
+
packer.write("duration")
|
|
83
83
|
packer.write(duration_nano(span.duration))
|
|
84
84
|
else
|
|
85
85
|
packer.write_map_header(number_of_elements_to_write) # Set header with how many elements in the map
|
|
@@ -88,40 +88,40 @@ module Datadog
|
|
|
88
88
|
if span.events.any?
|
|
89
89
|
if @native_events_supported
|
|
90
90
|
# Use top-level field for native events
|
|
91
|
-
packer.write(
|
|
91
|
+
packer.write("span_events")
|
|
92
92
|
packer.write(span.events.map(&:to_native_format))
|
|
93
93
|
else
|
|
94
94
|
# Serialize span events as meta tags
|
|
95
|
-
span.set_tag(
|
|
95
|
+
span.set_tag("events", span.events.map(&:to_hash).to_json)
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
# DEV: We use strings as keys here, instead of symbols, as
|
|
100
100
|
# DEV: MessagePack will ultimately convert them to strings.
|
|
101
101
|
# DEV: By providing strings directly, we skip this indirection operation.
|
|
102
|
-
packer.write(
|
|
102
|
+
packer.write("span_id")
|
|
103
103
|
packer.write(span.id)
|
|
104
|
-
packer.write(
|
|
104
|
+
packer.write("parent_id")
|
|
105
105
|
packer.write(span.parent_id)
|
|
106
|
-
packer.write(
|
|
106
|
+
packer.write("trace_id")
|
|
107
107
|
packer.write(@trace_id)
|
|
108
|
-
packer.write(
|
|
108
|
+
packer.write("name")
|
|
109
109
|
packer.write(span.name)
|
|
110
|
-
packer.write(
|
|
110
|
+
packer.write("service")
|
|
111
111
|
packer.write(span.service)
|
|
112
|
-
packer.write(
|
|
112
|
+
packer.write("resource")
|
|
113
113
|
packer.write(span.resource)
|
|
114
|
-
packer.write(
|
|
114
|
+
packer.write("type")
|
|
115
115
|
packer.write(span.type)
|
|
116
|
-
packer.write(
|
|
116
|
+
packer.write("meta")
|
|
117
117
|
packer.write(span.meta)
|
|
118
|
-
packer.write(
|
|
118
|
+
packer.write("metrics")
|
|
119
119
|
packer.write(span.metrics)
|
|
120
|
-
packer.write(
|
|
120
|
+
packer.write("meta_struct")
|
|
121
121
|
packer.write(span.metastruct)
|
|
122
|
-
packer.write(
|
|
122
|
+
packer.write("span_links")
|
|
123
123
|
packer.write(span.links.map(&:to_hash))
|
|
124
|
-
packer.write(
|
|
124
|
+
packer.write("error")
|
|
125
125
|
packer.write(span.status)
|
|
126
126
|
packer
|
|
127
127
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
3
|
+
require_relative "../../core/environment/identity"
|
|
4
|
+
require_relative "../../core/environment/process"
|
|
5
|
+
require_relative "../../core/environment/socket"
|
|
6
|
+
require_relative "../../core/environment/git"
|
|
7
|
+
require_relative "../../core/git/ext"
|
|
8
|
+
require_relative "../../core/runtime/ext"
|
|
9
|
+
require_relative "../metadata/ext"
|
|
10
|
+
require_relative "../trace_segment"
|
|
11
11
|
|
|
12
12
|
module Datadog
|
|
13
13
|
module Tracing
|
|
@@ -117,7 +117,7 @@ module Datadog
|
|
|
117
117
|
|
|
118
118
|
root_span.set_tag(
|
|
119
119
|
Tracing::Metadata::Ext::Distributed::TAG_KNUTH_SAMPLING_RATE,
|
|
120
|
-
format(
|
|
120
|
+
format("%.6f", (rate * 1e6).round / 1e6).sub(/\.?0+\z/, "")
|
|
121
121
|
)
|
|
122
122
|
end
|
|
123
123
|
|
|
@@ -213,7 +213,7 @@ module Datadog
|
|
|
213
213
|
def tag_apm_tracing_disabled!
|
|
214
214
|
return if trace.apm_tracing_enabled
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
trace.spans.each { |span| span.set_metric(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0) }
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
def tag_git_repository_url!
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
3
|
+
require_relative "../../core/chunker"
|
|
4
|
+
require_relative "../../core/transport/parcel"
|
|
5
|
+
require_relative "../../core/transport/request"
|
|
6
|
+
require_relative "../../core/transport/transport"
|
|
7
|
+
require_relative "../../core/utils/enumerable_compat"
|
|
8
|
+
require_relative "http/client"
|
|
9
|
+
require_relative "serializable_trace"
|
|
10
|
+
require_relative "trace_formatter"
|
|
11
11
|
|
|
12
12
|
module Datadog
|
|
13
13
|
module Tracing
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
3
|
+
require_relative "event"
|
|
4
|
+
require_relative "runtime/metrics"
|
|
5
|
+
require_relative "workers"
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
7
|
+
require_relative "transport/http"
|
|
8
8
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
@@ -122,7 +122,7 @@ module Datadog
|
|
|
122
122
|
if worker_local
|
|
123
123
|
worker_local.enqueue_trace(trace)
|
|
124
124
|
elsif !@stopped
|
|
125
|
-
logger.debug(
|
|
125
|
+
logger.debug("Writer either failed to start or was stopped before #write could complete")
|
|
126
126
|
end
|
|
127
127
|
end
|
|
128
128
|
|
|
@@ -173,10 +173,23 @@ module Datadog
|
|
|
173
173
|
def stop_worker
|
|
174
174
|
@stopped = true
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
if @worker
|
|
177
|
+
@worker.stop
|
|
178
|
+
@worker = nil
|
|
179
|
+
end
|
|
177
180
|
|
|
178
|
-
|
|
179
|
-
|
|
181
|
+
# Stopping a writer is permanent: once `@stopped` is set, `#start`
|
|
182
|
+
# refuses to spin up a new worker, so this writer (and the transport it
|
|
183
|
+
# owns) is being discarded for good. Forks do not stop the writer
|
|
184
|
+
# (`#start` re-creates the worker for the new pid while reusing the same
|
|
185
|
+
# transport), so this only runs on real teardown/reconfiguration.
|
|
186
|
+
#
|
|
187
|
+
# Deterministically release transports that hold native resources
|
|
188
|
+
# (e.g. the native trace exporter's Rust runtime and process-global
|
|
189
|
+
# fork hooks) instead of waiting on the GC finalizer. The default HTTP
|
|
190
|
+
# transport has no `#close` and is left untouched. `#close` is
|
|
191
|
+
# idempotent, so repeated `#stop` calls are safe.
|
|
192
|
+
@transport.close if @transport.respond_to?(:close)
|
|
180
193
|
|
|
181
194
|
true
|
|
182
195
|
end
|