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
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
3
|
+
require_relative "scope"
|
|
4
|
+
require_relative "symbol"
|
|
5
|
+
require_relative "file_hash"
|
|
6
|
+
require_relative "../core/utils/enumerable_compat"
|
|
7
|
+
require_relative "../di/fatal_exceptions"
|
|
7
8
|
|
|
8
9
|
module Datadog
|
|
9
10
|
module SymbolDatabase
|
|
@@ -67,7 +68,7 @@ module Datadog
|
|
|
67
68
|
# PostgreSQL signed INT_MAX (2^31 - 1). Means "entire file" or "unknown end."
|
|
68
69
|
UNKNOWN_MAX_LINE = 2147483647
|
|
69
70
|
|
|
70
|
-
EXCLUDED_COMMON_MODULES = [
|
|
71
|
+
EXCLUDED_COMMON_MODULES = ["Kernel", "PP::", "JSON::", "Enumerable", "Comparable"].freeze
|
|
71
72
|
|
|
72
73
|
# RubyVM::InstructionSequence#trace_points event types included when
|
|
73
74
|
# computing targetable lines on METHOD scopes.
|
|
@@ -89,6 +90,26 @@ module Datadog
|
|
|
89
90
|
# so we bind the original Module#name to get the real module name safely.
|
|
90
91
|
MODULE_NAME = Module.instance_method(:name)
|
|
91
92
|
|
|
93
|
+
# Cached UnboundMethods for the remaining class/module/object introspection
|
|
94
|
+
# used during extraction. Like MODULE_NAME, these bind the original
|
|
95
|
+
# implementations and are dispatched explicitly so that application code
|
|
96
|
+
# which overrides any of them (per-class, on a subclass, or in a singleton
|
|
97
|
+
# class) can neither intercept extraction nor be executed as a side effect
|
|
98
|
+
# of it. KERNEL_CLASS recovers an object's real class without calling a
|
|
99
|
+
# possibly-overridden #class.
|
|
100
|
+
CLASS_SUPERCLASS = Class.instance_method(:superclass)
|
|
101
|
+
MODULE_INCLUDED_MODULES = Module.instance_method(:included_modules)
|
|
102
|
+
MODULE_ANCESTORS = Module.instance_method(:ancestors)
|
|
103
|
+
MODULE_CLASS_VARIABLES = Module.instance_method(:class_variables)
|
|
104
|
+
MODULE_CONSTANTS = Module.instance_method(:constants)
|
|
105
|
+
MODULE_AUTOLOAD_P = Module.instance_method(:autoload?)
|
|
106
|
+
MODULE_CONST_GET = Module.instance_method(:const_get)
|
|
107
|
+
MODULE_CONST_DEFINED = Module.instance_method(:const_defined?)
|
|
108
|
+
KERNEL_CLASS = ::Kernel.instance_method(:class)
|
|
109
|
+
private_constant :CLASS_SUPERCLASS, :MODULE_INCLUDED_MODULES, :MODULE_ANCESTORS,
|
|
110
|
+
:MODULE_CLASS_VARIABLES, :MODULE_CONSTANTS, :MODULE_AUTOLOAD_P, :MODULE_CONST_GET,
|
|
111
|
+
:MODULE_CONST_DEFINED, :KERNEL_CLASS
|
|
112
|
+
|
|
92
113
|
# @param logger [Logger] Logger instance (SymbolDatabase::Logger facade or compatible)
|
|
93
114
|
# @param settings [Configuration::Settings] Tracer settings
|
|
94
115
|
def initialize(logger:, settings:)
|
|
@@ -109,7 +130,7 @@ module Datadog
|
|
|
109
130
|
# @param mod [Module, Class] The module or class to extract from
|
|
110
131
|
# @return [Scope, nil] FILE scope wrapping extracted scope, or nil if filtered out
|
|
111
132
|
def extract(mod)
|
|
112
|
-
return nil unless mod
|
|
133
|
+
return nil unless Module === mod
|
|
113
134
|
mod_name = safe_mod_name(mod)
|
|
114
135
|
return nil unless mod_name
|
|
115
136
|
|
|
@@ -118,15 +139,16 @@ module Datadog
|
|
|
118
139
|
source_file = find_source_file(mod)
|
|
119
140
|
return nil unless source_file
|
|
120
141
|
|
|
121
|
-
inner_scope = if mod
|
|
142
|
+
inner_scope = if Class === mod
|
|
122
143
|
extract_class_scope(mod)
|
|
123
144
|
else
|
|
124
145
|
extract_module_scope(mod)
|
|
125
146
|
end
|
|
126
147
|
|
|
127
148
|
wrap_in_file_scope(source_file, [inner_scope])
|
|
128
|
-
rescue => e
|
|
129
|
-
|
|
149
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
150
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
151
|
+
@logger.debug { "symdb: failed to extract #{mod_name || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
130
152
|
nil
|
|
131
153
|
end
|
|
132
154
|
|
|
@@ -174,7 +196,7 @@ module Datadog
|
|
|
174
196
|
# returns [key, value] on a non-empty hash and nil when empty, so the
|
|
175
197
|
# `while (pair = ...)` form is the drain. Indexing pair[0]/pair[1] rather
|
|
176
198
|
# than destructuring avoids introducing names into method scope that would
|
|
177
|
-
# then shadow the else-branch's block parameters
|
|
199
|
+
# then shadow the else-branch's block parameters.
|
|
178
200
|
while (pair = index.shift)
|
|
179
201
|
scope = build_file_scope(pair[0], pair[1])
|
|
180
202
|
yield scope if scope
|
|
@@ -190,7 +212,8 @@ module Datadog
|
|
|
190
212
|
end
|
|
191
213
|
result
|
|
192
214
|
end
|
|
193
|
-
rescue => e
|
|
215
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
216
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
194
217
|
@logger.debug { "symdb: error in extract_all: #{e.class}: #{e.message}" }
|
|
195
218
|
block_given? ? nil : []
|
|
196
219
|
end
|
|
@@ -204,7 +227,8 @@ module Datadog
|
|
|
204
227
|
# @return [String, nil] Module name or nil
|
|
205
228
|
def safe_mod_name(mod)
|
|
206
229
|
MODULE_NAME.bind(mod).call
|
|
207
|
-
rescue => e
|
|
230
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
231
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
208
232
|
@logger.debug { "symdb: safe_mod_name failed: #{e.class}: #{e.message}" }
|
|
209
233
|
nil
|
|
210
234
|
end
|
|
@@ -228,33 +252,23 @@ module Datadog
|
|
|
228
252
|
# subclass with its own binding resolves through the binding, an
|
|
229
253
|
# inherited autoload triggers nothing.
|
|
230
254
|
#
|
|
231
|
-
#
|
|
232
|
-
#
|
|
233
|
-
# registered directly on this namespace?"
|
|
234
|
-
#
|
|
235
|
-
# branch uses `current.autoload?(sym)` which also reports inherited
|
|
236
|
-
# autoloads. The consequence on 2.5/2.6: a subclass binding whose
|
|
237
|
-
# name collides with an ancestor's pending autoload is conservatively
|
|
238
|
-
# treated as stale and dropped from extraction. The minimum supported
|
|
239
|
-
# Ruby is 2.5 per lib/datadog/version.rb, so this fallback ships.
|
|
255
|
+
# Uses `current.autoload?(sym, false)` (the inherit=false form, added
|
|
256
|
+
# in Ruby 2.7) so the question is strictly "is there an autoload
|
|
257
|
+
# registered directly on this namespace?" and ancestors' pending
|
|
258
|
+
# autoloads at the same name do not affect the result.
|
|
240
259
|
# @param mod_name [String]
|
|
241
260
|
# @param mod [Module]
|
|
242
261
|
# @return [Boolean]
|
|
243
262
|
def resolves_to_same_module?(mod_name, mod)
|
|
244
263
|
current = Object
|
|
245
|
-
mod_name.split(
|
|
264
|
+
mod_name.split("::").each do |seg|
|
|
246
265
|
sym = seg.to_sym
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
current.autoload?(sym)
|
|
251
|
-
end
|
|
252
|
-
return false if pending_autoload
|
|
253
|
-
return false unless current.const_defined?(sym, false)
|
|
254
|
-
current = current.const_get(sym, false)
|
|
266
|
+
return false if MODULE_AUTOLOAD_P.bind(current).call(sym, false)
|
|
267
|
+
return false unless MODULE_CONST_DEFINED.bind(current).call(sym, false)
|
|
268
|
+
current = MODULE_CONST_GET.bind(current).call(sym, false)
|
|
255
269
|
end
|
|
256
270
|
current.equal?(mod)
|
|
257
|
-
rescue NameError, ArgumentError
|
|
271
|
+
rescue NameError, ArgumentError, TypeError
|
|
258
272
|
# Expected "no" outcome for stale/detached classes — the whole point
|
|
259
273
|
# of this predicate. Per the rescue convention in this file's header
|
|
260
274
|
# comment: inner per-item rescues are expected failures, no logging.
|
|
@@ -273,7 +287,7 @@ module Datadog
|
|
|
273
287
|
# Matches Python: packages.is_user_code() excludes ddtrace.*
|
|
274
288
|
# Note: bare 'Datadog' must be checked separately — start_with?('Datadog::')
|
|
275
289
|
# doesn't match the root module itself.
|
|
276
|
-
return false if mod_name ==
|
|
290
|
+
return false if mod_name == "Datadog" || mod_name.start_with?("Datadog::")
|
|
277
291
|
|
|
278
292
|
# Exclude Ruby root classes. These are never user code, but
|
|
279
293
|
# find_source_file can return a user-code path for them via
|
|
@@ -295,24 +309,24 @@ module Datadog
|
|
|
295
309
|
def user_code_path?(path)
|
|
296
310
|
# Only absolute paths are real source files. Pseudo-paths like '<main>',
|
|
297
311
|
# '<internal:...>', '(eval)' are not user code.
|
|
298
|
-
return false unless path.start_with?(
|
|
312
|
+
return false unless path.start_with?("/")
|
|
299
313
|
# Only .rb files are Ruby source. Excludes the Ruby binary
|
|
300
314
|
# (/usr/local/bin/ruby), C extensions (.so/.bundle), and other
|
|
301
315
|
# non-source files that appear in method source_location.
|
|
302
|
-
return false unless path.end_with?(
|
|
316
|
+
return false unless path.end_with?(".rb")
|
|
303
317
|
# Exclude gem paths
|
|
304
|
-
return false if path.include?(
|
|
318
|
+
return false if path.include?("/gems/")
|
|
305
319
|
# Exclude Ruby stdlib
|
|
306
|
-
return false if path.include?(
|
|
307
|
-
return false if path.start_with?(
|
|
308
|
-
return false if path.include?(
|
|
320
|
+
return false if path.include?("/ruby/")
|
|
321
|
+
return false if path.start_with?("<internal:")
|
|
322
|
+
return false if path.include?("(eval)")
|
|
309
323
|
# Exclude test code (not application code)
|
|
310
|
-
return false if path.include?(
|
|
311
|
-
return false if path.include?(
|
|
324
|
+
return false if path.include?("/spec/")
|
|
325
|
+
return false if path.include?("/test/")
|
|
312
326
|
# Exclude Datadog's own library code (e.g., monkey-patched methods from tracing contrib).
|
|
313
327
|
# Without this, stdlib classes like Net::HTTP appear as user code when dd-trace-rb
|
|
314
328
|
# instruments them, because the patched method source points to lib/datadog/tracing/contrib/.
|
|
315
|
-
return false if path.include?(
|
|
329
|
+
return false if path.include?("/lib/datadog/")
|
|
316
330
|
|
|
317
331
|
true
|
|
318
332
|
end
|
|
@@ -324,15 +338,10 @@ module Datadog
|
|
|
324
338
|
# AR models get filtered out as gem code.
|
|
325
339
|
#
|
|
326
340
|
# For namespace-only modules (no instance or singleton methods), falls back to
|
|
327
|
-
# Module#const_source_location
|
|
341
|
+
# Module#const_source_location to locate the module via its constants.
|
|
328
342
|
# This handles patterns like `module ApplicationCable; class Channel...; end; end`
|
|
329
343
|
# where the namespace module itself has no methods but defines user-code classes.
|
|
330
344
|
#
|
|
331
|
-
# On Ruby 2.6 (where const_source_location is unavailable), namespace-only modules
|
|
332
|
-
# and classes whose only methods are generated (e.g., AR models with only associations)
|
|
333
|
-
# may not be found — the extraction silently omits them. This is a graceful degradation:
|
|
334
|
-
# fewer symbols uploaded, no errors.
|
|
335
|
-
#
|
|
336
345
|
# @param mod [Module] The module
|
|
337
346
|
# @return [String, nil] Source file path or nil
|
|
338
347
|
def find_source_file(mod)
|
|
@@ -362,18 +371,19 @@ module Datadog
|
|
|
362
371
|
fallback ||= path # steep:ignore
|
|
363
372
|
end
|
|
364
373
|
|
|
365
|
-
#
|
|
374
|
+
# Use const_source_location to find where this class/module is declared.
|
|
366
375
|
# This handles two cases:
|
|
367
376
|
# 1. Classes with no user-defined methods (e.g. AR models with only associations) whose
|
|
368
377
|
# generated methods point to gem code — we find the `class Foo` declaration instead.
|
|
369
378
|
# 2. Namespace-only modules (`module Foo; class Bar; end; end`) with no methods at all.
|
|
370
|
-
|
|
379
|
+
mod_name = safe_mod_name(mod)
|
|
380
|
+
if mod_name
|
|
371
381
|
# Look up the class/module by its last name component in its enclosing namespace.
|
|
372
|
-
parts =
|
|
382
|
+
parts = mod_name.split("::")
|
|
373
383
|
const_name = parts.last
|
|
374
384
|
namespace = if parts.length > 1
|
|
375
385
|
begin
|
|
376
|
-
Object.
|
|
386
|
+
MODULE_CONST_GET.bind(Object).call(parts[0..-2].join("::")) # steep:ignore
|
|
377
387
|
rescue NameError
|
|
378
388
|
nil
|
|
379
389
|
end
|
|
@@ -384,7 +394,8 @@ module Datadog
|
|
|
384
394
|
if namespace
|
|
385
395
|
location = begin
|
|
386
396
|
namespace.const_source_location(const_name)
|
|
387
|
-
rescue => e
|
|
397
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
398
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
388
399
|
@logger.debug { "symdb: const_source_location(#{const_name}) failed: #{e.class}: #{e.message}" }
|
|
389
400
|
nil
|
|
390
401
|
end
|
|
@@ -397,10 +408,11 @@ module Datadog
|
|
|
397
408
|
end
|
|
398
409
|
|
|
399
410
|
# Also scan constants defined by mod itself (namespace-only modules).
|
|
400
|
-
mod.
|
|
411
|
+
MODULE_CONSTANTS.bind(mod).call(false).each do |child_const_name|
|
|
401
412
|
location = begin
|
|
402
413
|
mod.const_source_location(child_const_name)
|
|
403
|
-
rescue => e
|
|
414
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
415
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
404
416
|
@logger.debug { "symdb: const_source_location(#{child_const_name}) failed: #{e.class}: #{e.message}" }
|
|
405
417
|
nil
|
|
406
418
|
end
|
|
@@ -416,8 +428,9 @@ module Datadog
|
|
|
416
428
|
end
|
|
417
429
|
|
|
418
430
|
fallback
|
|
419
|
-
rescue => e
|
|
420
|
-
|
|
431
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
432
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
433
|
+
@logger.debug { "symdb: error finding source file for #{safe_mod_name(mod) || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
421
434
|
nil
|
|
422
435
|
end
|
|
423
436
|
|
|
@@ -434,7 +447,7 @@ module Datadog
|
|
|
434
447
|
lang[:file_hash] = file_hash if file_hash
|
|
435
448
|
|
|
436
449
|
Scope.new(
|
|
437
|
-
scope_type:
|
|
450
|
+
scope_type: "FILE",
|
|
438
451
|
name: file_path,
|
|
439
452
|
source_file: file_path,
|
|
440
453
|
start_line: UNKNOWN_MIN_LINE,
|
|
@@ -452,8 +465,8 @@ module Datadog
|
|
|
452
465
|
source_file = find_source_file(mod)
|
|
453
466
|
|
|
454
467
|
Scope.new(
|
|
455
|
-
scope_type:
|
|
456
|
-
name: mod
|
|
468
|
+
scope_type: "MODULE",
|
|
469
|
+
name: safe_mod_name(mod),
|
|
457
470
|
source_file: source_file,
|
|
458
471
|
start_line: UNKNOWN_MIN_LINE,
|
|
459
472
|
end_line: UNKNOWN_MAX_LINE,
|
|
@@ -470,8 +483,8 @@ module Datadog
|
|
|
470
483
|
source_file = find_source_file(klass)
|
|
471
484
|
|
|
472
485
|
Scope.new(
|
|
473
|
-
scope_type:
|
|
474
|
-
name: klass
|
|
486
|
+
scope_type: "CLASS",
|
|
487
|
+
name: safe_mod_name(klass),
|
|
475
488
|
source_file: source_file,
|
|
476
489
|
start_line: start_line,
|
|
477
490
|
end_line: end_line,
|
|
@@ -502,8 +515,9 @@ module Datadog
|
|
|
502
515
|
return [UNKNOWN_MIN_LINE, UNKNOWN_MAX_LINE] if starts.empty?
|
|
503
516
|
|
|
504
517
|
[starts.min, ends.max]
|
|
505
|
-
rescue => e
|
|
506
|
-
|
|
518
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
519
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
520
|
+
@logger.debug { "symdb: error calculating line range for #{safe_mod_name(klass)}: #{e.class}: #{e.message}" }
|
|
507
521
|
[UNKNOWN_MIN_LINE, UNKNOWN_MAX_LINE]
|
|
508
522
|
end
|
|
509
523
|
|
|
@@ -517,8 +531,9 @@ module Datadog
|
|
|
517
531
|
# Emitted as an array named super_classes — consistent with Java, .NET, and Python.
|
|
518
532
|
# Array allows for multiple entries if future Ruby versions or mixins expand the chain.
|
|
519
533
|
# Anonymous superclasses (class Foo < Class.new { ... }) have nil name; compact to skip.
|
|
520
|
-
|
|
521
|
-
|
|
534
|
+
superclass = CLASS_SUPERCLASS.bind(klass).call
|
|
535
|
+
if superclass && !superclass.equal?(Object) && !superclass.equal?(BasicObject)
|
|
536
|
+
super_name = safe_mod_name(superclass)
|
|
522
537
|
specifics[:super_classes] = [super_name] if super_name
|
|
523
538
|
end
|
|
524
539
|
|
|
@@ -526,7 +541,7 @@ module Datadog
|
|
|
526
541
|
# included_modules returns the entire ancestor chain's mixins, not only directly
|
|
527
542
|
# included ones. This is intentional: the field reports "modules this class
|
|
528
543
|
# responds to," which is what the consumer (UI navigation, probe context) needs.
|
|
529
|
-
included = klass.
|
|
544
|
+
included = MODULE_INCLUDED_MODULES.bind(klass).call.map { |m| safe_mod_name(m) }.reject do |name|
|
|
530
545
|
name.nil? || EXCLUDED_COMMON_MODULES.any? { |prefix| name.start_with?(prefix) }
|
|
531
546
|
end
|
|
532
547
|
specifics[:included_modules] = included unless included.empty?
|
|
@@ -537,16 +552,17 @@ module Datadog
|
|
|
537
552
|
# Single-pass collection avoids the intermediate arrays from take_while.map.compact.
|
|
538
553
|
# Test coverage: spec/datadog/symbol_database/extractor_spec.rb tests prepend behavior.
|
|
539
554
|
prepended = []
|
|
540
|
-
klass.
|
|
541
|
-
break if a
|
|
542
|
-
name = a
|
|
555
|
+
MODULE_ANCESTORS.bind(klass).call.each do |a|
|
|
556
|
+
break if a.equal?(klass)
|
|
557
|
+
name = safe_mod_name(a)
|
|
543
558
|
prepended << name if name
|
|
544
559
|
end
|
|
545
560
|
specifics[:prepended_modules] = prepended unless prepended.empty?
|
|
546
561
|
|
|
547
562
|
specifics
|
|
548
|
-
rescue => e
|
|
549
|
-
|
|
563
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
564
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
565
|
+
@logger.debug { "symdb: error building language specifics for #{safe_mod_name(klass)}: #{e.class}: #{e.message}" }
|
|
550
566
|
{}
|
|
551
567
|
end
|
|
552
568
|
|
|
@@ -568,8 +584,9 @@ module Datadog
|
|
|
568
584
|
end
|
|
569
585
|
|
|
570
586
|
scopes
|
|
571
|
-
rescue => e
|
|
572
|
-
|
|
587
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
588
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
589
|
+
@logger.debug { "symdb: failed to extract methods from #{safe_mod_name(klass)}: #{e.class}: #{e.message}" }
|
|
573
590
|
[]
|
|
574
591
|
end
|
|
575
592
|
|
|
@@ -590,7 +607,7 @@ module Datadog
|
|
|
590
607
|
targetable_lines, end_line = extract_targetable_lines(method, line)
|
|
591
608
|
|
|
592
609
|
Scope.new(
|
|
593
|
-
scope_type:
|
|
610
|
+
scope_type: "METHOD",
|
|
594
611
|
name: method_name.to_s,
|
|
595
612
|
source_file: source_file,
|
|
596
613
|
start_line: line,
|
|
@@ -603,8 +620,9 @@ module Datadog
|
|
|
603
620
|
},
|
|
604
621
|
symbols: extract_method_parameters(method)
|
|
605
622
|
)
|
|
606
|
-
rescue => e
|
|
607
|
-
|
|
623
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
624
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
625
|
+
@logger.debug { "symdb: failed to extract method #{safe_mod_name(klass)}##{method_name}: #{e.class}: #{e.message}" }
|
|
608
626
|
nil
|
|
609
627
|
end
|
|
610
628
|
|
|
@@ -614,11 +632,11 @@ module Datadog
|
|
|
614
632
|
# @return [String] 'public', 'private', or 'protected'
|
|
615
633
|
def method_visibility(klass, method_name)
|
|
616
634
|
if klass.private_instance_methods(false).include?(method_name)
|
|
617
|
-
|
|
635
|
+
"private"
|
|
618
636
|
elsif klass.protected_instance_methods(false).include?(method_name)
|
|
619
|
-
|
|
637
|
+
"protected"
|
|
620
638
|
else
|
|
621
|
-
|
|
639
|
+
"public"
|
|
622
640
|
end
|
|
623
641
|
end
|
|
624
642
|
|
|
@@ -644,7 +662,7 @@ module Datadog
|
|
|
644
662
|
end_line = lines.max || start_line
|
|
645
663
|
ranges = build_targetable_ranges(lines)
|
|
646
664
|
result = ranges.empty? ? nil : ranges
|
|
647
|
-
@logger.debug { "symdb: #{method.name} targetable lines: #{result ? "#{ranges.size} range(s), lines #{lines.first}..#{lines.last}" :
|
|
665
|
+
@logger.debug { "symdb: #{method.name} targetable lines: #{result ? "#{ranges.size} range(s), lines #{lines.first}..#{lines.last}" : "none (no matching events)"}" }
|
|
648
666
|
[result, end_line]
|
|
649
667
|
end
|
|
650
668
|
|
|
@@ -681,9 +699,10 @@ module Datadog
|
|
|
681
699
|
def extract_method_parameters(method)
|
|
682
700
|
method_name = begin
|
|
683
701
|
method.name.to_s
|
|
684
|
-
rescue => e
|
|
702
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
703
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
685
704
|
@logger.debug { "symdb: method.name failed: #{e.class}: #{e.message}" }
|
|
686
|
-
|
|
705
|
+
"unknown"
|
|
687
706
|
end
|
|
688
707
|
params = method.parameters
|
|
689
708
|
|
|
@@ -698,12 +717,13 @@ module Datadog
|
|
|
698
717
|
next if param_name.nil?
|
|
699
718
|
|
|
700
719
|
Symbol.new(
|
|
701
|
-
symbol_type:
|
|
720
|
+
symbol_type: "ARG",
|
|
702
721
|
name: param_name.to_s,
|
|
703
722
|
line: UNKNOWN_MIN_LINE, # Parameters available in entire method
|
|
704
723
|
)
|
|
705
724
|
end
|
|
706
|
-
rescue => e
|
|
725
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
726
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
707
727
|
@logger.debug { "symdb: failed to extract parameters from #{method_name}: #{e.class}: #{e.message}" }
|
|
708
728
|
[]
|
|
709
729
|
end
|
|
@@ -743,11 +763,7 @@ module Datadog
|
|
|
743
763
|
ObjectSpace.each_object(Module) do |mod|
|
|
744
764
|
# Singleton classes (per-object metaclasses) are never user-code classes.
|
|
745
765
|
# They're not const-referenced, DI cannot instrument methods on a singular
|
|
746
|
-
# object instance,
|
|
747
|
-
# singleton classes with long ancestor chains (e.g. through monkey-patches
|
|
748
|
-
# prepended into Kernel, common in dd-trace-rb test processes) is O(ancestors)
|
|
749
|
-
# — measured ~20ms per call, which dominates extract_all on heavily-loaded
|
|
750
|
-
# processes. Ruby 2.7+ optimized this path; the skip is a no-op there.
|
|
766
|
+
# object instance, so skipping them is both correct and cheap.
|
|
751
767
|
next if MODULE_SINGLETON_CLASS_PRED.bind(mod).call
|
|
752
768
|
|
|
753
769
|
seen += 1
|
|
@@ -772,8 +788,9 @@ module Datadog
|
|
|
772
788
|
file_to_names.each do |file_path, method_names|
|
|
773
789
|
(index[file_path] ||= []) << [mod_name, mod, method_names]
|
|
774
790
|
end
|
|
775
|
-
rescue => e
|
|
776
|
-
|
|
791
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
792
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
793
|
+
@logger.debug { "symdb: error indexing #{mod_name || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
777
794
|
end
|
|
778
795
|
|
|
779
796
|
index
|
|
@@ -797,13 +814,15 @@ module Datadog
|
|
|
797
814
|
next unless user_code_path?(loc[0])
|
|
798
815
|
|
|
799
816
|
result[loc[0]] << method_name
|
|
800
|
-
rescue => e
|
|
817
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
818
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
801
819
|
@logger.debug { "symdb: error indexing method #{method_name}: #{e.class}: #{e.message}" }
|
|
802
820
|
end
|
|
803
821
|
end
|
|
804
822
|
|
|
805
823
|
result
|
|
806
|
-
rescue => e
|
|
824
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
825
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
807
826
|
@logger.debug { "symdb: error indexing methods: #{e.class}: #{e.message}" }
|
|
808
827
|
{}
|
|
809
828
|
end
|
|
@@ -821,12 +840,12 @@ module Datadog
|
|
|
821
840
|
return nil if entries.empty?
|
|
822
841
|
|
|
823
842
|
root = {
|
|
824
|
-
name: file_path, type:
|
|
843
|
+
name: file_path, type: "FILE", children: {},
|
|
825
844
|
methods: [], mod: nil, source_file: file_path, fqn: nil,
|
|
826
845
|
}
|
|
827
846
|
|
|
828
847
|
# Sort by FQN depth so parent namespaces are placed before children.
|
|
829
|
-
sorted = entries.sort_by { |(mod_name, _, _)| mod_name.count(
|
|
848
|
+
sorted = entries.sort_by { |(mod_name, _, _)| mod_name.count(":") }
|
|
830
849
|
|
|
831
850
|
sorted.each do |mod_name, mod, method_names|
|
|
832
851
|
# Resolve UnboundMethods for this (mod, file) just-in-time. These objects
|
|
@@ -844,7 +863,8 @@ module Datadog
|
|
|
844
863
|
loc = method.source_location
|
|
845
864
|
next nil unless loc && loc[0] == file_path
|
|
846
865
|
{name: name, method: method, type: :instance}
|
|
847
|
-
rescue => e
|
|
866
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
867
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
848
868
|
@logger.debug { "symdb: error resolving #{mod_name}##{name}: #{e.class}: #{e.message}" }
|
|
849
869
|
nil
|
|
850
870
|
end
|
|
@@ -855,9 +875,10 @@ module Datadog
|
|
|
855
875
|
# the module no longer lives in.
|
|
856
876
|
next if method_names.any? && method_infos.empty?
|
|
857
877
|
|
|
858
|
-
parts = mod_name.split(
|
|
878
|
+
parts = mod_name.split("::")
|
|
859
879
|
place_in_tree(root, parts, mod, mod_name, method_infos, file_path)
|
|
860
|
-
rescue => e
|
|
880
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
881
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
861
882
|
@logger.debug { "symdb: error placing #{mod_name} in tree: #{e.class}: #{e.message}" }
|
|
862
883
|
end
|
|
863
884
|
|
|
@@ -880,7 +901,7 @@ module Datadog
|
|
|
880
901
|
|
|
881
902
|
# Create/find intermediate nodes for each namespace segment except the last
|
|
882
903
|
name_parts[0..-2].each_with_index do |part, idx| # steep:ignore
|
|
883
|
-
fqn = name_parts[0..idx].join(
|
|
904
|
+
fqn = name_parts[0..idx].join("::") # steep:ignore
|
|
884
905
|
current[:children][part] ||= {
|
|
885
906
|
name: fqn, type: resolve_scope_type(fqn),
|
|
886
907
|
children: {}, methods: [], mod: nil,
|
|
@@ -895,12 +916,12 @@ module Datadog
|
|
|
895
916
|
if leaf
|
|
896
917
|
# Node exists (was created as intermediate or from another entry).
|
|
897
918
|
# Update type and mod — the actual module object is authoritative.
|
|
898
|
-
leaf[:type] =
|
|
919
|
+
leaf[:type] = (Class === mod) ? "CLASS" : "MODULE"
|
|
899
920
|
leaf[:mod] = mod
|
|
900
921
|
else
|
|
901
922
|
leaf = {
|
|
902
923
|
name: mod_name,
|
|
903
|
-
type:
|
|
924
|
+
type: (Class === mod) ? "CLASS" : "MODULE",
|
|
904
925
|
children: {}, methods: [],
|
|
905
926
|
mod: mod, source_file: file_path,
|
|
906
927
|
fqn: mod_name
|
|
@@ -917,11 +938,23 @@ module Datadog
|
|
|
917
938
|
# @param fqn [String] Fully-qualified name (e.g. "Authentication::Strategies")
|
|
918
939
|
# @return [String] 'CLASS' or 'MODULE'
|
|
919
940
|
def resolve_scope_type(fqn)
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
941
|
+
current = Object
|
|
942
|
+
fqn.split("::").each do |seg|
|
|
943
|
+
sym = seg.to_sym
|
|
944
|
+
pending_autoload = if RubyVersion.is?(">= 2.7")
|
|
945
|
+
MODULE_AUTOLOAD_P.bind(current).call(sym, false)
|
|
946
|
+
else
|
|
947
|
+
MODULE_AUTOLOAD_P.bind(current).call(sym)
|
|
948
|
+
end
|
|
949
|
+
return "MODULE" if pending_autoload
|
|
950
|
+
return "MODULE" unless MODULE_CONST_DEFINED.bind(current).call(sym, false)
|
|
951
|
+
current = MODULE_CONST_GET.bind(current).call(sym, false)
|
|
952
|
+
end
|
|
953
|
+
(Class === current) ? "CLASS" : "MODULE"
|
|
954
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
955
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
923
956
|
@logger.debug { "symdb: resolve_scope_type(#{fqn}) failed: #{e.class}: #{e.message}, defaulting to MODULE" }
|
|
924
|
-
|
|
957
|
+
"MODULE"
|
|
925
958
|
end
|
|
926
959
|
|
|
927
960
|
# Convert a single file tree (built by build_file_scope) to a FILE Scope.
|
|
@@ -934,7 +967,7 @@ module Datadog
|
|
|
934
967
|
lang[:file_hash] = file_hash if file_hash
|
|
935
968
|
|
|
936
969
|
Scope.new(
|
|
937
|
-
scope_type:
|
|
970
|
+
scope_type: "FILE",
|
|
938
971
|
name: file_path,
|
|
939
972
|
source_file: file_path,
|
|
940
973
|
start_line: UNKNOWN_MIN_LINE,
|
|
@@ -968,7 +1001,7 @@ module Datadog
|
|
|
968
1001
|
symbols = node[:mod] ? extract_scope_symbols(node[:mod]) : []
|
|
969
1002
|
|
|
970
1003
|
# Build language specifics
|
|
971
|
-
lang = if node[:type] ==
|
|
1004
|
+
lang = if node[:type] == "CLASS" && node[:mod]
|
|
972
1005
|
build_class_language_specifics(node[:mod])
|
|
973
1006
|
else
|
|
974
1007
|
{}
|
|
@@ -1001,21 +1034,22 @@ module Datadog
|
|
|
1001
1034
|
targetable_lines, end_line = extract_targetable_lines(method, line)
|
|
1002
1035
|
|
|
1003
1036
|
Scope.new(
|
|
1004
|
-
scope_type:
|
|
1037
|
+
scope_type: "METHOD",
|
|
1005
1038
|
name: method_name.to_s,
|
|
1006
1039
|
source_file: source_file,
|
|
1007
1040
|
start_line: line,
|
|
1008
1041
|
end_line: end_line,
|
|
1009
1042
|
targetable_lines: targetable_lines,
|
|
1010
1043
|
language_specifics: {
|
|
1011
|
-
visibility: klass ? method_visibility(klass, method_name) :
|
|
1012
|
-
method_type:
|
|
1044
|
+
visibility: klass ? method_visibility(klass, method_name) : "public", # steep:ignore
|
|
1045
|
+
method_type: "instance",
|
|
1013
1046
|
arity: method.arity
|
|
1014
1047
|
},
|
|
1015
1048
|
symbols: extract_method_parameters(method)
|
|
1016
1049
|
)
|
|
1017
|
-
rescue => e
|
|
1018
|
-
|
|
1050
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
1051
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
1052
|
+
klass_name = klass ? (safe_mod_name(klass) || "<unknown>") : "<unknown>"
|
|
1019
1053
|
@logger.debug { "symdb: failed to build method scope #{klass_name}##{method_name}: #{e.class}: #{e.message}" }
|
|
1020
1054
|
nil
|
|
1021
1055
|
end
|
|
@@ -1028,10 +1062,10 @@ module Datadog
|
|
|
1028
1062
|
symbols = []
|
|
1029
1063
|
|
|
1030
1064
|
# Class variables (only for classes)
|
|
1031
|
-
if mod
|
|
1032
|
-
mod.
|
|
1065
|
+
if Class === mod
|
|
1066
|
+
MODULE_CLASS_VARIABLES.bind(mod).call(false).each do |var_name|
|
|
1033
1067
|
symbols << Symbol.new(
|
|
1034
|
-
symbol_type:
|
|
1068
|
+
symbol_type: "STATIC_FIELD",
|
|
1035
1069
|
name: var_name.to_s,
|
|
1036
1070
|
line: UNKNOWN_MIN_LINE
|
|
1037
1071
|
)
|
|
@@ -1040,31 +1074,34 @@ module Datadog
|
|
|
1040
1074
|
|
|
1041
1075
|
# Constants (excluding nested modules/classes).
|
|
1042
1076
|
# Skip autoloaded constants to avoid triggering loading as a side effect.
|
|
1043
|
-
mod.
|
|
1044
|
-
next if mod.
|
|
1045
|
-
const_value = mod.
|
|
1046
|
-
next if const_value
|
|
1077
|
+
MODULE_CONSTANTS.bind(mod).call(false).each do |const_name|
|
|
1078
|
+
next if MODULE_AUTOLOAD_P.bind(mod).call(const_name)
|
|
1079
|
+
const_value = MODULE_CONST_GET.bind(mod).call(const_name)
|
|
1080
|
+
next if Module === const_value
|
|
1047
1081
|
|
|
1048
1082
|
symbols << Symbol.new(
|
|
1049
|
-
symbol_type:
|
|
1083
|
+
symbol_type: "STATIC_FIELD",
|
|
1050
1084
|
name: const_name.to_s,
|
|
1051
1085
|
line: UNKNOWN_MIN_LINE,
|
|
1052
|
-
type: const_value.
|
|
1086
|
+
type: safe_mod_name(KERNEL_CLASS.bind(const_value).call)
|
|
1053
1087
|
)
|
|
1054
|
-
rescue NameError, LoadError, NoMethodError => e # standard:disable Lint/ShadowedException
|
|
1055
|
-
# Expected: constant removed/undefined, autoload failure,
|
|
1056
|
-
#
|
|
1057
|
-
#
|
|
1058
|
-
#
|
|
1059
|
-
#
|
|
1088
|
+
rescue NameError, LoadError, NoMethodError, TypeError => e # standard:disable Lint/ShadowedException
|
|
1089
|
+
# Expected: constant removed/undefined (NameError), autoload failure (LoadError),
|
|
1090
|
+
# or a value whose class cannot be read (NoMethodError/TypeError). Skipping one
|
|
1091
|
+
# constant here keeps the rest of the module's symbols. Logged separately from
|
|
1092
|
+
# unexpected errors so the latter stand out in triage. Lint/ShadowedException
|
|
1093
|
+
# disabled: these descend from StandardError, but Ruby's rescue-clause-order
|
|
1094
|
+
# semantics ensure the catch-all rescue below only catches exceptions not matched here.
|
|
1060
1095
|
@logger.debug { "symdb: skipping module constant #{const_name}: #{e.class}: #{e.message}" }
|
|
1061
|
-
rescue => e
|
|
1096
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
1097
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
1062
1098
|
@logger.debug { "symdb: unexpected error reading module constant #{const_name}: #{e.class}: #{e.message}" }
|
|
1063
1099
|
end
|
|
1064
1100
|
|
|
1065
1101
|
symbols
|
|
1066
|
-
rescue => e
|
|
1067
|
-
|
|
1102
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
1103
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
1104
|
+
mod_name = safe_mod_name(mod) || "<unknown>"
|
|
1068
1105
|
@logger.debug { "symdb: failed to extract symbols from #{mod_name}: #{e.class}: #{e.message}" }
|
|
1069
1106
|
[]
|
|
1070
1107
|
end
|