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
|
@@ -2,49 +2,64 @@
|
|
|
2
2
|
|
|
3
3
|
# rubocop:disable Lint/AssignmentInCondition
|
|
4
4
|
|
|
5
|
+
require_relative "fatal_exceptions"
|
|
6
|
+
require_relative "capture_expression_evaluator"
|
|
7
|
+
|
|
5
8
|
module Datadog
|
|
6
9
|
module DI
|
|
7
10
|
# Builds probe status notification and snapshot payloads.
|
|
8
11
|
#
|
|
9
12
|
# @api private
|
|
10
13
|
class ProbeNotificationBuilder
|
|
11
|
-
def initialize(settings, serializer)
|
|
14
|
+
def initialize(settings, serializer, logger, telemetry: nil)
|
|
12
15
|
@settings = settings
|
|
13
16
|
@serializer = serializer
|
|
17
|
+
@logger = logger
|
|
18
|
+
@telemetry = telemetry
|
|
19
|
+
@capture_expression_evaluator = CaptureExpressionEvaluator.new(
|
|
20
|
+
settings: settings, serializer: serializer, logger: logger, telemetry: telemetry,
|
|
21
|
+
)
|
|
14
22
|
end
|
|
15
23
|
|
|
16
24
|
attr_reader :settings
|
|
25
|
+
|
|
17
26
|
attr_reader :serializer
|
|
18
27
|
|
|
28
|
+
attr_reader :logger
|
|
29
|
+
|
|
30
|
+
attr_reader :telemetry
|
|
31
|
+
|
|
32
|
+
attr_reader :capture_expression_evaluator
|
|
33
|
+
|
|
19
34
|
def build_received(probe)
|
|
20
35
|
build_status(probe,
|
|
21
36
|
message: "Probe #{probe.id} has been received correctly",
|
|
22
|
-
status:
|
|
37
|
+
status: "RECEIVED",)
|
|
23
38
|
end
|
|
24
39
|
|
|
25
40
|
def build_installed(probe)
|
|
26
41
|
build_status(probe,
|
|
27
42
|
message: "Probe #{probe.id} has been instrumented correctly",
|
|
28
|
-
status:
|
|
43
|
+
status: "INSTALLED",)
|
|
29
44
|
end
|
|
30
45
|
|
|
31
46
|
def build_emitting(probe)
|
|
32
47
|
build_status(probe,
|
|
33
48
|
message: "Probe #{probe.id} is emitting",
|
|
34
|
-
status:
|
|
49
|
+
status: "EMITTING",)
|
|
35
50
|
end
|
|
36
51
|
|
|
37
52
|
def build_errored(probe, exc)
|
|
38
53
|
build_status(probe,
|
|
39
54
|
message: "Instrumentation for probe #{probe.id} failed: #{exc}",
|
|
40
|
-
status:
|
|
55
|
+
status: "ERROR",
|
|
41
56
|
exception: exc)
|
|
42
57
|
end
|
|
43
58
|
|
|
44
59
|
def build_disabled(probe, duration)
|
|
45
60
|
build_status(probe,
|
|
46
61
|
message: "Probe #{probe.id} was disabled because it consumed #{duration} seconds of CPU time in DI processing",
|
|
47
|
-
status:
|
|
62
|
+
status: "ERROR",)
|
|
48
63
|
end
|
|
49
64
|
|
|
50
65
|
# Duration is in seconds.
|
|
@@ -65,13 +80,13 @@ module Datadog
|
|
|
65
80
|
|
|
66
81
|
# TODO also verify that non-capturing probe does not pass
|
|
67
82
|
# snapshot or vars/args into this method
|
|
83
|
+
capture_expression_evaluation_errors = []
|
|
68
84
|
captures = if probe.capture_snapshot?
|
|
85
|
+
snapshot_limits = probe.snapshot_serializer_limits(settings)
|
|
69
86
|
if probe.method?
|
|
70
87
|
return_arguments = {
|
|
71
|
-
"@return": serializer.serialize_value(context.return_value,
|
|
72
|
-
|
|
73
|
-
attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count),
|
|
74
|
-
self: serializer.serialize_value(context.target_self),
|
|
88
|
+
"@return": serializer.serialize_value(context.return_value, **snapshot_limits),
|
|
89
|
+
self: serializer.serialize_value(context.target_self, **snapshot_limits),
|
|
75
90
|
}
|
|
76
91
|
{
|
|
77
92
|
entry: {
|
|
@@ -87,8 +102,35 @@ module Datadog
|
|
|
87
102
|
lines: (locals = context.serialized_locals) && {
|
|
88
103
|
probe.line_no => {
|
|
89
104
|
locals: locals,
|
|
90
|
-
arguments: {self: serializer.serialize_value(context.target_self)},
|
|
105
|
+
arguments: {self: serializer.serialize_value(context.target_self, **snapshot_limits)},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
end
|
|
110
|
+
elsif probe.capture_expressions?
|
|
111
|
+
if probe.method?
|
|
112
|
+
if probe.evaluate_at_entry?
|
|
113
|
+
captured_block = context.entry_capture_expressions || {}
|
|
114
|
+
capture_expression_evaluation_errors = context.entry_capture_evaluation_errors || []
|
|
115
|
+
{
|
|
116
|
+
entry: {captureExpressions: captured_block},
|
|
117
|
+
}
|
|
118
|
+
else
|
|
119
|
+
captured_block, capture_expression_evaluation_errors =
|
|
120
|
+
capture_expression_evaluator.evaluate(probe, context)
|
|
121
|
+
{
|
|
122
|
+
return: {
|
|
123
|
+
captureExpressions: captured_block,
|
|
124
|
+
throwable: context.exception ? serialize_throwable(context.exception) : nil,
|
|
91
125
|
},
|
|
126
|
+
}
|
|
127
|
+
end
|
|
128
|
+
elsif probe.line?
|
|
129
|
+
captured_block, capture_expression_evaluation_errors =
|
|
130
|
+
capture_expression_evaluator.evaluate(probe, context)
|
|
131
|
+
{
|
|
132
|
+
lines: {
|
|
133
|
+
probe.line_no => {captureExpressions: captured_block},
|
|
92
134
|
},
|
|
93
135
|
}
|
|
94
136
|
end
|
|
@@ -99,6 +141,7 @@ module Datadog
|
|
|
99
141
|
if segments = probe.template_segments
|
|
100
142
|
message, evaluation_errors = evaluate_template(segments, context)
|
|
101
143
|
end
|
|
144
|
+
evaluation_errors.concat(capture_expression_evaluation_errors)
|
|
102
145
|
build_snapshot_base(context,
|
|
103
146
|
evaluation_errors: evaluation_errors, message: message,
|
|
104
147
|
captures: captures)
|
|
@@ -133,9 +176,9 @@ module Datadog
|
|
|
133
176
|
# appears to be completely ignored by the backend.
|
|
134
177
|
# Note: The Go DI implementation does not send the top-level message
|
|
135
178
|
# field at all when sending error statuses.
|
|
136
|
-
if status ==
|
|
179
|
+
if status == "ERROR"
|
|
137
180
|
diagnostics[:exception] = { # steep:ignore
|
|
138
|
-
type: exception ? exception.class.name :
|
|
181
|
+
type: exception ? exception.class.name : "Error",
|
|
139
182
|
message: exception ? exception.message : message
|
|
140
183
|
}
|
|
141
184
|
end
|
|
@@ -144,7 +187,7 @@ module Datadog
|
|
|
144
187
|
service: settings.service,
|
|
145
188
|
timestamp: timestamp_now,
|
|
146
189
|
message: message,
|
|
147
|
-
ddsource:
|
|
190
|
+
ddsource: "dd_debugger",
|
|
148
191
|
debugger: {
|
|
149
192
|
diagnostics: diagnostics,
|
|
150
193
|
},
|
|
@@ -187,7 +230,7 @@ module Datadog
|
|
|
187
230
|
# Non-string constructor argument — return a redacted placeholder
|
|
188
231
|
# rather than calling .to_s which could be customer code.
|
|
189
232
|
# The exception class is already reported via the :type field.
|
|
190
|
-
|
|
233
|
+
"<REDACTED: not a string value>"
|
|
191
234
|
end
|
|
192
235
|
# Prefer backtrace_locations (structured Location objects) over
|
|
193
236
|
# backtrace (formatted strings that need regex parsing).
|
|
@@ -256,7 +299,7 @@ module Datadog
|
|
|
256
299
|
if frame =~ BACKTRACE_FRAME_PATTERN
|
|
257
300
|
{fileName: $1, function: $3, lineNumber: $2.to_i}
|
|
258
301
|
else
|
|
259
|
-
{fileName: frame, function:
|
|
302
|
+
{fileName: frame, function: "", lineNumber: 0}
|
|
260
303
|
end
|
|
261
304
|
end
|
|
262
305
|
end
|
|
@@ -291,7 +334,7 @@ module Datadog
|
|
|
291
334
|
payload = {
|
|
292
335
|
service: settings.service,
|
|
293
336
|
debugger: {
|
|
294
|
-
type:
|
|
337
|
+
type: "snapshot",
|
|
295
338
|
# Product can have three values: di, ld, er.
|
|
296
339
|
# We do not currently implement exception replay.
|
|
297
340
|
# There is currently no specification, and no consensus, for
|
|
@@ -303,7 +346,7 @@ module Datadog
|
|
|
303
346
|
# except there is currently no consensus on said heuristics.
|
|
304
347
|
# .NET always sends ld, other languages send nothing at the moment.
|
|
305
348
|
# Don't send anything for the time being.
|
|
306
|
-
#product: 'di/ld',
|
|
349
|
+
# product: 'di/ld',
|
|
307
350
|
snapshot: {
|
|
308
351
|
id: SecureRandom.uuid,
|
|
309
352
|
timestamp: timestamp,
|
|
@@ -313,7 +356,7 @@ module Datadog
|
|
|
313
356
|
version: 0,
|
|
314
357
|
location: location,
|
|
315
358
|
},
|
|
316
|
-
language:
|
|
359
|
+
language: "ruby",
|
|
317
360
|
# TODO add test coverage for callers being nil
|
|
318
361
|
stack: stack,
|
|
319
362
|
# System tests schema validation requires captures to
|
|
@@ -339,7 +382,7 @@ module Datadog
|
|
|
339
382
|
# TODO add tests that the trace/span id is correctly propagated
|
|
340
383
|
"dd.trace_id": active_trace&.id&.to_s,
|
|
341
384
|
"dd.span_id": active_span&.id&.to_s,
|
|
342
|
-
ddsource:
|
|
385
|
+
ddsource: "dd_debugger",
|
|
343
386
|
message: message,
|
|
344
387
|
timestamp: timestamp,
|
|
345
388
|
}
|
|
@@ -366,12 +409,13 @@ module Datadog
|
|
|
366
409
|
else
|
|
367
410
|
raise ArgumentError, "Invalid template segment type: #{segment}"
|
|
368
411
|
end
|
|
369
|
-
rescue => exc
|
|
412
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
413
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
370
414
|
evaluation_errors << {
|
|
371
415
|
message: "#{exc.class}: #{exc.message}",
|
|
372
416
|
expr: segment.dsl_expr, # steep:ignore NoMethod
|
|
373
417
|
}
|
|
374
|
-
|
|
418
|
+
"[evaluation error]"
|
|
375
419
|
end.join
|
|
376
420
|
[message, evaluation_errors]
|
|
377
421
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "../core/semaphore"
|
|
4
|
+
require_relative "fatal_exceptions"
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module DI
|
|
@@ -62,6 +63,7 @@ module Datadog
|
|
|
62
63
|
# @return [void]
|
|
63
64
|
def start
|
|
64
65
|
return if @thread && @pid == Process.pid
|
|
66
|
+
@stop_requested = false
|
|
65
67
|
logger.trace { "di: starting probe notifier: pid #{$$}" }
|
|
66
68
|
@thread = Thread.new do
|
|
67
69
|
loop do
|
|
@@ -92,10 +94,11 @@ module Datadog
|
|
|
92
94
|
|
|
93
95
|
begin
|
|
94
96
|
more = maybe_send
|
|
95
|
-
rescue => exc
|
|
97
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
98
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
96
99
|
raise if settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
97
100
|
|
|
98
|
-
logger.debug { "di: error in probe notifier worker: #{exc.class}: #{exc.message} (at #{exc.backtrace
|
|
101
|
+
logger.debug { "di: error in probe notifier worker: #{exc.class}: #{exc.message} (at #{exc.backtrace&.first})" }
|
|
99
102
|
telemetry&.report(exc, description: "Error in probe notifier worker")
|
|
100
103
|
end
|
|
101
104
|
@lock.synchronize do
|
|
@@ -228,7 +231,7 @@ module Datadog
|
|
|
228
231
|
payload = probe_notification_builder.build_status(
|
|
229
232
|
probe,
|
|
230
233
|
message: "Probe #{probe.id} disabled: snapshot JSON encoding failed (#{exception.class}: #{exception})",
|
|
231
|
-
status:
|
|
234
|
+
status: "ERROR",
|
|
232
235
|
exception: exception,
|
|
233
236
|
)
|
|
234
237
|
add_status(payload, probe: probe)
|
|
@@ -238,13 +241,13 @@ module Datadog
|
|
|
238
241
|
# DEV: The tags could be cached but they need to be recreated
|
|
239
242
|
# when process forks (since the child receives new runtime IDs).
|
|
240
243
|
Core::TagBuilder.tags(settings).merge(
|
|
241
|
-
|
|
244
|
+
"debugger_version" => Core::Environment::Identity.gem_datadog_version,
|
|
242
245
|
)
|
|
243
246
|
end
|
|
244
247
|
|
|
245
248
|
[
|
|
246
|
-
[:status,
|
|
247
|
-
[:snapshot,
|
|
249
|
+
[:status, "probe status"],
|
|
250
|
+
[:snapshot, "snapshot"],
|
|
248
251
|
].each do |(event_type, event_name)|
|
|
249
252
|
attr_reader "#{event_type}_queue"
|
|
250
253
|
|
|
@@ -257,40 +260,56 @@ module Datadog
|
|
|
257
260
|
# if it has been more than 1 second since the last send of the same
|
|
258
261
|
# event type.
|
|
259
262
|
define_method("add_#{event_type}") do |event, probe: nil|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
263
|
+
# Enqueueing reads DI configuration and writes debug/trace logs, both
|
|
264
|
+
# of which can call stdlib methods (e.g. Set#include? via the
|
|
265
|
+
# configuration layer's supported-configuration lookup). If a customer
|
|
266
|
+
# has a method probe on such a method, firing it here would re-enter
|
|
267
|
+
# the worker through probe_executed_callback and deadlock on @lock
|
|
268
|
+
# (recursive locking). Hold the re-entrancy guard for the duration so
|
|
269
|
+
# those DI-internal calls reach the original method without firing the
|
|
270
|
+
# probe. Restore the prior state afterwards so a caller that already
|
|
271
|
+
# holds the guard (e.g. run_method_probe post-processing calling
|
|
272
|
+
# add_snapshot) is not cleared early.
|
|
273
|
+
was_in_probe = Datadog::DI.in_probe?
|
|
274
|
+
Datadog::DI.enter_probe unless was_in_probe
|
|
275
|
+
begin
|
|
276
|
+
@lock.synchronize do
|
|
277
|
+
queue = send("#{event_type}_queue")
|
|
278
|
+
if queue.length > settings.dynamic_instrumentation.internal.snapshot_queue_capacity
|
|
279
|
+
if event_type == :status && probe
|
|
280
|
+
status = event.dig(:debugger, :diagnostics, :status)
|
|
281
|
+
logger.debug { "di: dropping status for #{probe.type} probe at #{probe.location} (#{probe.id}): #{status} because queue is full" }
|
|
282
|
+
else
|
|
283
|
+
logger.debug { "di: #{self.class.name}: dropping #{event_type} event because queue is full" }
|
|
284
|
+
end
|
|
273
285
|
else
|
|
274
|
-
|
|
286
|
+
if event_type == :status && probe
|
|
287
|
+
status = event.dig(:debugger, :diagnostics, :status)
|
|
288
|
+
logger.trace { "di: queueing status for #{probe.type} probe at #{probe.location} (#{probe.id}): #{status}" }
|
|
289
|
+
else
|
|
290
|
+
logger.trace { "di: #{self.class.name}: queueing #{event_type} event" }
|
|
291
|
+
end
|
|
292
|
+
queue << event
|
|
275
293
|
end
|
|
276
|
-
queue << event
|
|
277
294
|
end
|
|
278
|
-
end
|
|
279
295
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
296
|
+
# Figure out whether to wake up the worker thread.
|
|
297
|
+
# If minimum send interval has elapsed since the last send,
|
|
298
|
+
# wake up immediately.
|
|
299
|
+
@lock.synchronize do
|
|
300
|
+
unless @wake_scheduled
|
|
301
|
+
@wake_scheduled = true
|
|
302
|
+
set_sleep_remaining
|
|
303
|
+
wake.signal
|
|
304
|
+
end
|
|
288
305
|
end
|
|
289
|
-
end
|
|
290
306
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
307
|
+
# Worker could be not running if the process forked - check and
|
|
308
|
+
# start it again in this case.
|
|
309
|
+
start
|
|
310
|
+
ensure
|
|
311
|
+
Datadog::DI.leave_probe unless was_in_probe
|
|
312
|
+
end
|
|
294
313
|
end
|
|
295
314
|
|
|
296
315
|
public "add_#{event_type}"
|
|
@@ -318,9 +337,10 @@ module Datadog
|
|
|
318
337
|
@lock.synchronize do
|
|
319
338
|
@last_sent = time
|
|
320
339
|
end
|
|
321
|
-
rescue => exc
|
|
340
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
341
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
322
342
|
raise if settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
323
|
-
logger.debug { "di: failed to send #{event_name}: #{exc.class}: #{exc.message} (at #{exc.backtrace
|
|
343
|
+
logger.debug { "di: failed to send #{event_name}: #{exc.class}: #{exc.message} (at #{exc.backtrace&.first})" }
|
|
324
344
|
telemetry&.report(exc, description: "Error sending #{event_type}")
|
|
325
345
|
end
|
|
326
346
|
end
|
data/lib/datadog/di/redactor.rb
CHANGED
|
@@ -186,8 +186,23 @@ module Datadog
|
|
|
186
186
|
]
|
|
187
187
|
|
|
188
188
|
# Input can be a string or a symbol.
|
|
189
|
+
#
|
|
190
|
+
# Hash keys captured in snapshots often originate from a Rack environment
|
|
191
|
+
# (Rack/Rails/Sinatra middleware and controllers all keep `env` in scope).
|
|
192
|
+
# Rack rewrites incoming HTTP header names to the CGI form
|
|
193
|
+
# `HTTP_<HEADER>` with dashes converted to underscores — for example,
|
|
194
|
+
# `Authorization` becomes `HTTP_AUTHORIZATION`, `Cookie` becomes
|
|
195
|
+
# `HTTP_COOKIE`, `X-API-Key` becomes `HTTP_X_API_KEY`. Without stripping
|
|
196
|
+
# the prefix here, those keys normalize to `httpauthorization`,
|
|
197
|
+
# `httpcookie`, `httpxapikey`, etc., none of which appear in the default
|
|
198
|
+
# identifier list — so the values would not be matched against entries
|
|
199
|
+
# like `authorization`, `cookie`, or `xapikey`. The `\Ahttp_` anchor
|
|
200
|
+
# limits the strip to the literal CGI form, so identifiers that merely
|
|
201
|
+
# begin with the letters `http` (e.g. `httpinfo`) are unaffected. The
|
|
202
|
+
# strip must run before the punctuation gsub: the gsub removes the
|
|
203
|
+
# underscore, after which `\Ahttp_` could never match.
|
|
189
204
|
def normalize(str)
|
|
190
|
-
str.to_s.strip.downcase.
|
|
205
|
+
str.to_s.strip.downcase.sub(/\Ahttp_/, "").tr("-_$@", "")
|
|
191
206
|
end
|
|
192
207
|
end
|
|
193
208
|
end
|
data/lib/datadog/di/remote.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "fatal_exceptions"
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module DI
|
|
5
7
|
# Provides an interface expected by the core Remote subsystem to
|
|
@@ -13,16 +15,127 @@ module Datadog
|
|
|
13
15
|
# @api private
|
|
14
16
|
module Remote
|
|
15
17
|
class << self
|
|
16
|
-
PRODUCT =
|
|
18
|
+
PRODUCT = "LIVE_DEBUGGING"
|
|
19
|
+
|
|
20
|
+
# Declared here (not in Tracing::Remote::CAPABILITIES) so it is
|
|
21
|
+
# registered only with the gated DI block in Capabilities#register:
|
|
22
|
+
# when DI is explicitly disabled, or the runtime cannot run DI
|
|
23
|
+
# (JRuby, Ruby 2.5), that block — including this bit — is skipped.
|
|
24
|
+
# The enable signal itself is delivered in APM_TRACING payloads and
|
|
25
|
+
# routed here by Tracing::Remote.process_config.
|
|
26
|
+
CAPABILITIES = [
|
|
27
|
+
1 << 38, # APM_TRACING_ENABLE_DYNAMIC_INSTRUMENTATION: Implicit DI enablement
|
|
28
|
+
].freeze
|
|
17
29
|
|
|
18
30
|
def products
|
|
19
|
-
# TODO: do not send our product on unsupported runtimes
|
|
20
|
-
# (Ruby 2.5 / JRuby)
|
|
21
31
|
[PRODUCT]
|
|
22
32
|
end
|
|
23
33
|
|
|
24
34
|
def capabilities
|
|
25
|
-
|
|
35
|
+
CAPABILITIES
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Entry point for the RC-driven DI enable/disable path.
|
|
39
|
+
#
|
|
40
|
+
# Invoked from {Datadog::Tracing::Remote.process_config} when an
|
|
41
|
+
# APM_TRACING payload carries `dynamic_instrumentation_enabled`. Runs
|
|
42
|
+
# on the remote-config thread; never raises.
|
|
43
|
+
#
|
|
44
|
+
# @param enabled [Boolean] desired state from RC: true to start DI,
|
|
45
|
+
# false to stop it. The `DD_DYNAMIC_INSTRUMENTATION_ENABLED=false`
|
|
46
|
+
# env var blocks an enable here (see {.explicitly_disabled?}).
|
|
47
|
+
# @param repository [Datadog::Core::Remote::Configuration::Repository, nil]
|
|
48
|
+
# the RC repository, passed by {Datadog::Tracing::Remote.process_config}
|
|
49
|
+
# so that a stopped->started transition can reconcile against probes that
|
|
50
|
+
# were delivered in an earlier poll. nil when called outside the RC
|
|
51
|
+
# dispatch path (e.g. unit tests), in which case no reconcile happens.
|
|
52
|
+
# @return [void]
|
|
53
|
+
def handle_rc_enablement(enabled, repository = nil)
|
|
54
|
+
# allow_initialization: false because this runs on the remote-config
|
|
55
|
+
# thread (a callback context). The default `true` would synchronously
|
|
56
|
+
# build the entire component tree from the wrong thread if the RC
|
|
57
|
+
# signal lands before Components#initialize completed.
|
|
58
|
+
components = Datadog.send(:components, allow_initialization: false)
|
|
59
|
+
component = components&.dynamic_instrumentation
|
|
60
|
+
unless component
|
|
61
|
+
# The component is nil because Component.build returned nil at
|
|
62
|
+
# startup — a runtime precondition is not met (RC disabled, MRI
|
|
63
|
+
# required, Ruby 2.6+ required, Rails dev env, C extension absent).
|
|
64
|
+
# On disable, silently no-op: RC asking us to turn off something we
|
|
65
|
+
# don't have is fine. On enable, warn with the reason: this is the
|
|
66
|
+
# implicit-enablement counterpart to the warn-on-explicit message
|
|
67
|
+
# at build time. The customer who clicked "create probe" in the UI
|
|
68
|
+
# gets the same visibility a customer who set
|
|
69
|
+
# DD_DYNAMIC_INSTRUMENTATION_ENABLED would have gotten at boot.
|
|
70
|
+
if enabled
|
|
71
|
+
if explicitly_disabled?
|
|
72
|
+
Datadog.logger.warn(
|
|
73
|
+
"di: cannot enable dynamic instrumentation via remote configuration " \
|
|
74
|
+
"because DD_DYNAMIC_INSTRUMENTATION_ENABLED is explicitly set to false",
|
|
75
|
+
)
|
|
76
|
+
else
|
|
77
|
+
reason = DI.unsupported_reason
|
|
78
|
+
Datadog.logger.warn(
|
|
79
|
+
"di: cannot enable dynamic instrumentation via remote configuration: " \
|
|
80
|
+
"#{reason || "dynamic instrumentation was not initialized at startup"}",
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
return
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
if enabled
|
|
88
|
+
if explicitly_disabled?
|
|
89
|
+
Datadog.logger.warn(
|
|
90
|
+
"di: ignoring implicit enablement signal from remote configuration " \
|
|
91
|
+
"because DD_DYNAMIC_INSTRUMENTATION_ENABLED is explicitly set to false. " \
|
|
92
|
+
"To allow remote enablement, unset DD_DYNAMIC_INSTRUMENTATION_ENABLED.",
|
|
93
|
+
)
|
|
94
|
+
return
|
|
95
|
+
end
|
|
96
|
+
# component is non-nil here only because Component.build's preconditions
|
|
97
|
+
# passed, which is the same condition under which di/base.rb is loaded
|
|
98
|
+
# and DI.activate_tracking is defined.
|
|
99
|
+
DI.activate_tracking
|
|
100
|
+
was_started = component.started?
|
|
101
|
+
component.start!
|
|
102
|
+
# A probe delivered in an earlier poll while the component was stopped
|
|
103
|
+
# was dropped by #receivers (which ignores changes while !started?) and
|
|
104
|
+
# never entered the probe repository. RC dispatch only re-delivers a
|
|
105
|
+
# config when its content hash changes (Core::Remote::Client#apply_config
|
|
106
|
+
# skips unchanged content), so the probe would otherwise stay dropped
|
|
107
|
+
# until the customer edits it. On the stopped->started transition,
|
|
108
|
+
# reconcile against the current LIVE_DEBUGGING contents so it installs now.
|
|
109
|
+
replay_current_probes(repository, component) if repository && !was_started
|
|
110
|
+
else
|
|
111
|
+
component.stop!
|
|
112
|
+
end
|
|
113
|
+
rescue => e
|
|
114
|
+
Datadog.logger.debug { "di: error handling implicit enablement: #{e.class}: #{e.message}" }
|
|
115
|
+
Datadog.send(:components, allow_initialization: false)&.telemetry&.report(
|
|
116
|
+
e,
|
|
117
|
+
description: "Error handling DI implicit enablement",
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Symmetric to {DI::Component.explicitly_enabled?} (see there for why
|
|
122
|
+
# using_default? rather than options[:enabled].default_precedence?).
|
|
123
|
+
#
|
|
124
|
+
# Canonical home for the explicit-disable check: it gates
|
|
125
|
+
# {DI::Component.build} and the DI block in
|
|
126
|
+
# {Core::Remote::Client::Capabilities#register}. The latter runs before
|
|
127
|
+
# DI::Component is loaded, so the check lives here on DI::Remote (always
|
|
128
|
+
# required by capabilities.rb) rather than on DI::Component. The
|
|
129
|
+
# `settings` argument lets those startup callers pass the settings being
|
|
130
|
+
# configured; the RC handler omits it and reads the global config.
|
|
131
|
+
#
|
|
132
|
+
# @param settings [Datadog::Core::Configuration::Settings]
|
|
133
|
+
# @return [Boolean] true when the customer set
|
|
134
|
+
# `DD_DYNAMIC_INSTRUMENTATION_ENABLED=false` (or the programmatic
|
|
135
|
+
# equivalent), which blocks DI build and RC-driven enablement.
|
|
136
|
+
def explicitly_disabled?(settings = Datadog.configuration)
|
|
137
|
+
!settings.dynamic_instrumentation.using_default?(:enabled) &&
|
|
138
|
+
!settings.dynamic_instrumentation.enabled
|
|
26
139
|
end
|
|
27
140
|
|
|
28
141
|
def receivers(telemetry)
|
|
@@ -32,17 +145,18 @@ module Datadog
|
|
|
32
145
|
# DEV: Apply this refactor to AppSec as well if implemented.
|
|
33
146
|
|
|
34
147
|
component = DI.component
|
|
35
|
-
|
|
36
|
-
# only add DI product to remote config request if DI is enabled.
|
|
37
|
-
# Ideally, we should be injected with the DI component here
|
|
38
|
-
# rather than having to retrieve it from global state.
|
|
39
|
-
# If the component is nil for some reason, we also don't have a
|
|
40
|
-
# logger instance to report the issue.
|
|
41
|
-
if component
|
|
148
|
+
if component&.started?
|
|
42
149
|
changes.each do |change|
|
|
43
150
|
case change.type
|
|
44
151
|
when :insert
|
|
45
|
-
|
|
152
|
+
# A stopped->started reconcile (#replay_current_probes) may have
|
|
153
|
+
# installed this probe earlier in the same dispatch — the enable
|
|
154
|
+
# signal is carried by the Tracing receiver, which runs before the
|
|
155
|
+
# DI receiver. Skip the redundant install rather than letting
|
|
156
|
+
# probe_manager raise AlreadyInstrumented and report a false error.
|
|
157
|
+
unless probe_in_content_known?(change.content, component) # steep:ignore NoMethod
|
|
158
|
+
add_probe(change.content, component) # steep:ignore NoMethod
|
|
159
|
+
end
|
|
46
160
|
when :update
|
|
47
161
|
# We do not implement updates at the moment, remove the
|
|
48
162
|
# probe and reinstall.
|
|
@@ -89,7 +203,8 @@ module Datadog
|
|
|
89
203
|
# message.
|
|
90
204
|
# TODO assert content state (errored for this example)
|
|
91
205
|
content.errored("Error applying dynamic instrumentation configuration: #{exc.class}: #{exc.message}")
|
|
92
|
-
rescue => exc
|
|
206
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
207
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
93
208
|
raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
94
209
|
|
|
95
210
|
component.logger.debug { "di: unhandled exception adding #{probe.type} probe at #{probe.location} (#{probe.id}) in DI remote receiver: #{exc.class}: #{exc.message}" }
|
|
@@ -113,8 +228,9 @@ module Datadog
|
|
|
113
228
|
# we need to note it as being current so that we do not
|
|
114
229
|
# try to remove instrumentation that is still supposed to be
|
|
115
230
|
# active.
|
|
116
|
-
#current_probe_ids[probe_spec.fetch('id')] = true
|
|
117
|
-
rescue => exc
|
|
231
|
+
# current_probe_ids[probe_spec.fetch('id')] = true
|
|
232
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
233
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
118
234
|
raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
119
235
|
|
|
120
236
|
component.logger.debug { "di: unhandled exception handling a probe in DI remote receiver: #{exc.class}: #{exc.message}" }
|
|
@@ -124,6 +240,50 @@ module Datadog
|
|
|
124
240
|
content.errored("Error applying dynamic instrumentation configuration: #{exc.class}: #{exc.message}")
|
|
125
241
|
end
|
|
126
242
|
|
|
243
|
+
# Reconciles the DI probe repository against the LIVE_DEBUGGING configs
|
|
244
|
+
# currently held by the RC repository. Called on the stopped->started
|
|
245
|
+
# transition to install probes that arrived while DI was stopped: those
|
|
246
|
+
# were dropped by {.receivers} and RC will not re-dispatch them because
|
|
247
|
+
# their content hash is unchanged.
|
|
248
|
+
#
|
|
249
|
+
# Probes already tracked by the component (installed, pending, or failed)
|
|
250
|
+
# are skipped, so a probe handled in the same dispatch by {.receivers} is
|
|
251
|
+
# not added twice.
|
|
252
|
+
def replay_current_probes(repository, component)
|
|
253
|
+
repository.contents.each do |content|
|
|
254
|
+
next unless content.path.product == PRODUCT
|
|
255
|
+
|
|
256
|
+
begin
|
|
257
|
+
probe_id = parse_content(content)["id"]
|
|
258
|
+
rescue => exc
|
|
259
|
+
component.logger.debug { "di: skipping unparseable LIVE_DEBUGGING content on enable reconcile: #{exc.class}: #{exc.message}" }
|
|
260
|
+
next
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
next if probe_id && probe_known?(probe_id, component)
|
|
264
|
+
|
|
265
|
+
add_probe(content, component)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def probe_known?(probe_id, component)
|
|
270
|
+
repo = component.probe_manager.probe_repository
|
|
271
|
+
!!(repo.find_installed(probe_id) ||
|
|
272
|
+
repo.find_pending(probe_id) ||
|
|
273
|
+
repo.find_failed(probe_id))
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# True when the probe carried by +content+ is already tracked by the
|
|
277
|
+
# component. Returns false when the id cannot be determined, so add_probe
|
|
278
|
+
# still runs and reports the parse error through its own handling.
|
|
279
|
+
def probe_in_content_known?(content, component)
|
|
280
|
+
probe_id = parse_content(content)["id"]
|
|
281
|
+
!!(probe_id && probe_known?(probe_id, component))
|
|
282
|
+
rescue => exc
|
|
283
|
+
component.logger.debug { "di: could not check probe id for insert dedup: #{exc.class}: #{exc.message}" }
|
|
284
|
+
false
|
|
285
|
+
end
|
|
286
|
+
|
|
127
287
|
# This method does not mark +previous_content+ as succeeded or errored,
|
|
128
288
|
# because that content is from a previous RC response and has already
|
|
129
289
|
# been marked. Removal of probes happens when an RC entry disappears,
|
|
@@ -131,9 +291,10 @@ module Datadog
|
|
|
131
291
|
def remove_probe(previous_content, component)
|
|
132
292
|
# TODO test exception capture
|
|
133
293
|
probe_spec = parse_content(previous_content)
|
|
134
|
-
probe_id = probe_spec.fetch(
|
|
294
|
+
probe_id = probe_spec.fetch("id")
|
|
135
295
|
component.probe_manager.remove_probe(probe_id)
|
|
136
|
-
rescue => exc
|
|
296
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
297
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
137
298
|
raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
138
299
|
|
|
139
300
|
component.logger.debug { "di: unhandled exception removing probes in DI remote receiver: #{exc.class}: #{exc.message}" }
|