datadog 2.38.0 → 2.47.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 +279 -35
- data/README.md +3 -0
- data/bin/ddprofrb +4 -4
- data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +12 -24
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +256 -117
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -5
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +0 -2
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +19 -20
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +5 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +267 -171
- data/ext/datadog_profiling_native_extension/collectors_stack.h +17 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +307 -217
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +10 -5
- 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 -10
- data/ext/datadog_profiling_native_extension/extconf.rb +68 -100
- data/ext/datadog_profiling_native_extension/heap_recorder.c +353 -257
- data/ext/datadog_profiling_native_extension/heap_recorder.h +50 -31
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -27
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +853 -496
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +42 -15
- data/ext/datadog_profiling_native_extension/profiling.c +30 -23
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +4 -80
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +4 -7
- data/ext/datadog_profiling_native_extension/stack_recorder.c +116 -89
- data/ext/datadog_profiling_native_extension/stack_recorder.h +12 -5
- data/ext/datadog_profiling_native_extension/time_helpers.c +2 -4
- data/ext/datadog_profiling_native_extension/time_helpers.h +15 -15
- data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
- data/ext/libdatadog_api/datadog_ruby_common.h +7 -10
- data/ext/libdatadog_api/di.c +43 -3
- data/ext/libdatadog_api/extconf.rb +29 -24
- data/ext/libdatadog_api/feature_flags.c +34 -0
- data/ext/libdatadog_api/init.c +9 -1
- data/ext/libdatadog_api/otel_thread_context.c +274 -0
- data/ext/libdatadog_api/otel_thread_context.h +5 -0
- data/ext/libdatadog_api/process_discovery.c +15 -1
- data/ext/libdatadog_api/trace_exporter.c +2078 -0
- data/ext/libdatadog_api/trace_exporter.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +22 -17
- data/lib/datadog/ai_guard/component.rb +24 -15
- data/lib/datadog/ai_guard/configuration/ext.rb +2 -0
- data/lib/datadog/ai_guard/configuration.rb +13 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +48 -55
- data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +76 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +1 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +135 -0
- data/lib/datadog/ai_guard/evaluation/client.rb +50 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +12 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -7
- data/lib/datadog/ai_guard/evaluation/message_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +6 -6
- data/lib/datadog/ai_guard/evaluation/outcome.rb +24 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +8 -64
- data/lib/datadog/ai_guard/evaluation/response.rb +33 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +11 -18
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +15 -2
- data/lib/datadog/ai_guard/evaluation.rb +36 -14
- data/lib/datadog/ai_guard/ext.rb +4 -1
- data/lib/datadog/ai_guard/{api_client.rb → http_client.rb} +9 -7
- data/lib/datadog/ai_guard/metrics/telemetry.rb +43 -0
- data/lib/datadog/ai_guard/redaction/replacements.rb +97 -0
- data/lib/datadog/ai_guard/redaction/result.rb +29 -0
- data/lib/datadog/ai_guard/redaction.rb +80 -0
- data/lib/datadog/ai_guard.rb +58 -57
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +22 -43
- 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 +2 -2
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +2 -2
- data/lib/datadog/appsec/api_security/route_extractor.rb +11 -11
- data/lib/datadog/appsec/api_security/sampler.rb +5 -5
- data/lib/datadog/appsec/api_security.rb +1 -1
- data/lib/datadog/appsec/assets/blocked.html +1 -108
- 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 +70 -61
- data/lib/datadog/appsec/context.rb +7 -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/configuration.rb +1 -1
- 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 +26 -26
- 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 +22 -22
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +2 -2
- 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 +14 -18
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +24 -24
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +6 -6
- 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 +26 -26
- data/lib/datadog/appsec/contrib/rack/response_body.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +10 -10
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +38 -11
- 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 +10 -9
- 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 +23 -23
- 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 +28 -16
- 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 +10 -9
- 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 -11
- data/lib/datadog/appsec/extensions.rb +2 -2
- data/lib/datadog/appsec/instrumentation/gateway.rb +1 -1
- data/lib/datadog/appsec/metrics/exporter.rb +8 -8
- 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 +32 -32
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +6 -6
- data/lib/datadog/appsec/response.rb +22 -22
- data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +11 -11
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +18 -18
- data/lib/datadog/appsec/route_normalizer/route_text.rb +3 -3
- data/lib/datadog/appsec/route_normalizer.rb +15 -15
- data/lib/datadog/appsec/security_engine/engine.rb +41 -40
- 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 +1 -1
- 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/base.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +82 -47
- data/lib/datadog/core/configuration/components_state.rb +8 -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 +5 -5
- data/lib/datadog/core/configuration/options.rb +2 -2
- data/lib/datadog/core/configuration/settings.rb +95 -100
- data/lib/datadog/core/configuration/stable_config.rb +1 -1
- data/lib/datadog/core/configuration/supported_configurations.rb +20 -3
- 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 +14 -10
- 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 +42 -7
- 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 +2 -2
- 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/logger.rb +3 -3
- data/lib/datadog/core/logging/ext.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +20 -20
- data/lib/datadog/core/metrics/ext.rb +5 -5
- data/lib/datadog/core/metrics/helpers.rb +1 -1
- data/lib/datadog/core/metrics/logging.rb +2 -2
- data/lib/datadog/core/metrics/options.rb +5 -5
- data/lib/datadog/core/pin.rb +1 -1
- data/lib/datadog/core/process_discovery.rb +13 -9
- data/lib/datadog/core/rate_limiter.rb +1 -1
- data/lib/datadog/core/remote/client/capabilities.rb +60 -33
- data/lib/datadog/core/remote/client.rb +61 -20
- data/lib/datadog/core/remote/component.rb +48 -17
- 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 +4 -4
- data/lib/datadog/core/remote/configuration/target.rb +9 -9
- data/lib/datadog/core/remote/configuration.rb +4 -4
- data/lib/datadog/core/remote/dispatcher.rb +47 -6
- 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 +13 -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/configuration_value.rb +38 -0
- data/lib/datadog/core/telemetry/emitter.rb +4 -4
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +8 -6
- 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 +3 -3
- 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 +36 -55
- 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 +3 -3
- data/lib/datadog/core/telemetry/event/log.rb +6 -6
- 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 +9 -9
- 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 +6 -6
- 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 +5 -5
- 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 +9 -9
- data/lib/datadog/core/transport/transport.rb +2 -2
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +172 -20
- 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 +16 -54
- 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 +5 -5
- 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 +25 -27
- data/lib/datadog/data_streams/processor.rb +92 -61
- 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 +4 -4
- data/lib/datadog/di/boot.rb +26 -25
- data/lib/datadog/di/capture_expression_evaluator/result.rb +30 -0
- data/lib/datadog/di/capture_expression_evaluator.rb +39 -9
- data/lib/datadog/di/code_tracker.rb +6 -6
- data/lib/datadog/di/component.rb +119 -6
- data/lib/datadog/di/configuration.rb +54 -3
- data/lib/datadog/di/context.rb +7 -2
- data/lib/datadog/di/contrib/active_record.rb +8 -2
- data/lib/datadog/di/contrib/railtie.rb +1 -1
- data/lib/datadog/di/contrib.rb +5 -5
- data/lib/datadog/di/el/compiler.rb +113 -37
- data/lib/datadog/di/el/evaluator.rb +82 -2
- data/lib/datadog/di/el/expression.rb +13 -2
- data/lib/datadog/di/el.rb +3 -3
- data/lib/datadog/di/evaluation_failure.rb +28 -0
- data/lib/datadog/di/guardrails_telemetry/reason.rb +87 -0
- data/lib/datadog/di/guardrails_telemetry.rb +203 -0
- data/lib/datadog/di/instrumenter.rb +124 -23
- data/lib/datadog/di/logger.rb +32 -10
- data/lib/datadog/di/preload.rb +1 -1
- data/lib/datadog/di/probe.rb +9 -1
- data/lib/datadog/di/probe_builder.rb +25 -24
- data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +5 -5
- data/lib/datadog/di/probe_manager.rb +57 -9
- data/lib/datadog/di/probe_notification_builder.rb +46 -43
- data/lib/datadog/di/probe_notifier_worker.rb +62 -12
- data/lib/datadog/di/probe_repository.rb +1 -1
- data/lib/datadog/di/proc_responder.rb +1 -1
- data/lib/datadog/di/remote.rb +52 -8
- data/lib/datadog/di/serializer.rb +185 -68
- data/lib/datadog/di/snapshot_event.rb +38 -0
- 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 +23 -13
- data/lib/datadog/di/transport/input.rb +41 -16
- data/lib/datadog/di/utils.rb +4 -4
- data/lib/datadog/di.rb +5 -5
- 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 +40 -40
- 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/activation.rb +268 -0
- data/lib/datadog/open_feature/agentless/configuration_source.rb +246 -0
- data/lib/datadog/open_feature/agentless/parser.rb +43 -0
- data/lib/datadog/open_feature/agentless/response.rb +19 -0
- data/lib/datadog/open_feature/agentless/transport.rb +103 -0
- data/lib/datadog/open_feature/component.rb +112 -31
- data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +90 -0
- data/lib/datadog/open_feature/configuration/source/resolution.rb +22 -0
- data/lib/datadog/open_feature/configuration/source.rb +43 -0
- data/lib/datadog/open_feature/configuration.rb +139 -2
- data/lib/datadog/open_feature/evaluation_engine.rb +36 -10
- data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
- 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 +17 -10
- 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 +32 -8
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +242 -86
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +211 -100
- data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
- data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +28 -24
- data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +3 -1
- 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 +24 -10
- data/lib/datadog/open_feature/noop_evaluator.rb +8 -3
- data/lib/datadog/open_feature/provider.rb +357 -17
- data/lib/datadog/open_feature/remote.rb +7 -7
- data/lib/datadog/open_feature/resolution_details.rb +4 -2
- data/lib/datadog/open_feature/transport.rb +19 -14
- data/lib/datadog/open_feature.rb +33 -3
- 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 +6 -6
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +5 -5
- data/lib/datadog/opentelemetry/sdk/propagator.rb +8 -8
- 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 +2 -2
- data/lib/datadog/opentelemetry/signal_configuration.rb +20 -16
- data/lib/datadog/opentelemetry/trace.rb +4 -1
- data/lib/datadog/opentelemetry.rb +8 -8
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +10 -2
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -7
- data/lib/datadog/profiling/collectors/info.rb +40 -13
- data/lib/datadog/profiling/collectors/thread_context.rb +6 -17
- data/lib/datadog/profiling/component.rb +33 -39
- data/lib/datadog/profiling/exporter.rb +11 -11
- 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/tasks/exec.rb +1 -1
- data/lib/datadog/profiling.rb +31 -27
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/symbol_database/component.rb +15 -15
- data/lib/datadog/symbol_database/configuration.rb +3 -3
- data/lib/datadog/symbol_database/extensions.rb +2 -2
- data/lib/datadog/symbol_database/extractor.rb +141 -159
- data/lib/datadog/symbol_database/file_hash.rb +3 -3
- data/lib/datadog/symbol_database/logger.rb +1 -1
- data/lib/datadog/symbol_database/remote.rb +21 -6
- data/lib/datadog/symbol_database/scope.rb +2 -2
- data/lib/datadog/symbol_database/scope_batcher.rb +2 -2
- 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 +22 -22
- data/lib/datadog/symbol_database.rb +2 -2
- 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 +51 -9
- data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +13 -11
- data/lib/datadog/tracing/configuration/ext.rb +46 -42
- data/lib/datadog/tracing/configuration/http.rb +2 -2
- data/lib/datadog/tracing/configuration/settings.rb +52 -16
- data/lib/datadog/tracing/context.rb +25 -3
- data/lib/datadog/tracing/context_provider.rb +19 -7
- 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 +5 -5
- 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 +3 -3
- 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 +9 -9
- 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 +3 -3
- 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 +2 -2
- 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 +7 -7
- 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 +6 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +3 -3
- 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 +7 -7
- 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 +10 -9
- data/lib/datadog/tracing/contrib/active_record/events.rb +3 -3
- 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 +12 -12
- 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 +26 -26
- 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 +3 -3
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +18 -13
- 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 +17 -10
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +18 -18
- 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 +17 -11
- 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 +51 -24
- 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 +8 -8
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +8 -8
- 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 +9 -9
- 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 +22 -7
- 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 +13 -7
- 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 +16 -10
- 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 +10 -10
- 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 +9 -9
- 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 +23 -23
- 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 +4 -4
- data/lib/datadog/tracing/contrib/patchable.rb +1 -1
- data/lib/datadog/tracing/contrib/patcher.rb +3 -3
- 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 +6 -6
- 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 +2 -2
- 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 +4 -4
- 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 +3 -3
- 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 +16 -16
- 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 +3 -3
- 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 +39 -5
- data/lib/datadog/tracing/contrib/redis/tags.rb +5 -5
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +14 -8
- 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 +15 -8
- 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/jdbc_connection_string.rb +140 -0
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/utils.rb +101 -9
- 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 +10 -10
- 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 +13 -13
- 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 +3 -3
- 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 +1 -1
- 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 +4 -4
- 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 +2 -2
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +118 -13
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +9 -9
- 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 +12 -12
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +12 -11
- 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 +27 -29
- data/lib/datadog/tracing/distributed/datadog.rb +23 -23
- 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 +15 -12
- data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +21 -278
- data/lib/datadog/tracing/distributed/trace_state/datadog.rb +233 -0
- data/lib/datadog/tracing/distributed/trace_state/ext.rb +44 -0
- data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +156 -0
- data/lib/datadog/tracing/distributed/trace_state.rb +121 -0
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/ext.rb +1 -1
- 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 +72 -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 +3 -3
- data/lib/datadog/tracing/metadata.rb +4 -4
- data/lib/datadog/tracing/otel_thread_context.rb +97 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
- data/lib/datadog/tracing/pipeline.rb +2 -2
- data/lib/datadog/tracing/remote.rb +250 -44
- 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 +14 -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 +9 -9
- data/lib/datadog/tracing/span_event.rb +5 -5
- data/lib/datadog/tracing/span_operation.rb +22 -22
- data/lib/datadog/tracing/sync_writer.rb +12 -7
- data/lib/datadog/tracing/trace_digest.rb +22 -4
- data/lib/datadog/tracing/trace_operation.rb +33 -21
- data/lib/datadog/tracing/trace_segment.rb +10 -10
- data/lib/datadog/tracing/tracer.rb +43 -22
- 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/telemetry.rb +94 -0
- data/lib/datadog/tracing/transport/http/traces.rb +10 -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 +5 -5
- 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/telemetry.rb +17 -0
- data/lib/datadog/tracing/transport/native.rb +395 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
- data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
- data/lib/datadog/tracing/transport/statistics.rb +2 -2
- data/lib/datadog/tracing/transport/telemetry.rb +62 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +23 -13
- data/lib/datadog/tracing/transport/traces.rb +93 -46
- data/lib/datadog/tracing/utils.rb +2 -2
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +22 -9
- data/lib/datadog/tracing.rb +3 -3
- data/lib/datadog/version.rb +4 -4
- data/lib/datadog.rb +13 -13
- metadata +55 -13
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +0 -31
- data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -69
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
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"
|
|
8
8
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module SymbolDatabase
|
|
@@ -43,7 +43,7 @@ module Datadog
|
|
|
43
43
|
# These are expected failures — no logging needed.
|
|
44
44
|
#
|
|
45
45
|
# 2. **Method-level rescues** (`rescue => e` with logging):
|
|
46
|
-
# Catch failures in
|
|
46
|
+
# Catch failures in build_class_method_scopes, find_source_file, etc. Log at debug
|
|
47
47
|
# for post-hoc diagnosis, return nil or empty array. One bad method/module
|
|
48
48
|
# doesn't kill the entire class extraction.
|
|
49
49
|
#
|
|
@@ -68,7 +68,7 @@ module Datadog
|
|
|
68
68
|
# PostgreSQL signed INT_MAX (2^31 - 1). Means "entire file" or "unknown end."
|
|
69
69
|
UNKNOWN_MAX_LINE = 2147483647
|
|
70
70
|
|
|
71
|
-
EXCLUDED_COMMON_MODULES = [
|
|
71
|
+
EXCLUDED_COMMON_MODULES = ["Kernel", "PP::", "JSON::", "Enumerable", "Comparable"].freeze
|
|
72
72
|
|
|
73
73
|
# RubyVM::InstructionSequence#trace_points event types included when
|
|
74
74
|
# computing targetable lines on METHOD scopes.
|
|
@@ -133,22 +133,22 @@ module Datadog
|
|
|
133
133
|
return nil unless Module === mod
|
|
134
134
|
mod_name = safe_mod_name(mod)
|
|
135
135
|
return nil unless mod_name
|
|
136
|
-
|
|
137
|
-
return nil unless user_code_module?(mod)
|
|
136
|
+
return nil unless user_code_module_name?(mod)
|
|
138
137
|
|
|
139
138
|
source_file = find_source_file(mod)
|
|
140
139
|
return nil unless source_file
|
|
140
|
+
return nil unless user_code_path?(source_file)
|
|
141
141
|
|
|
142
142
|
inner_scope = if Class === mod
|
|
143
|
-
extract_class_scope(mod)
|
|
143
|
+
extract_class_scope(mod, source_file)
|
|
144
144
|
else
|
|
145
|
-
extract_module_scope(mod)
|
|
145
|
+
extract_module_scope(mod, source_file)
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
wrap_in_file_scope(source_file, [inner_scope])
|
|
149
149
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
150
150
|
Datadog::DI.reraise_if_fatal(e)
|
|
151
|
-
@logger.debug { "symdb: failed to extract #{mod_name ||
|
|
151
|
+
@logger.debug { "symdb: failed to extract #{mod_name || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
152
152
|
nil
|
|
153
153
|
end
|
|
154
154
|
|
|
@@ -261,7 +261,7 @@ module Datadog
|
|
|
261
261
|
# @return [Boolean]
|
|
262
262
|
def resolves_to_same_module?(mod_name, mod)
|
|
263
263
|
current = Object
|
|
264
|
-
mod_name.split(
|
|
264
|
+
mod_name.split("::").each do |seg|
|
|
265
265
|
sym = seg.to_sym
|
|
266
266
|
return false if MODULE_AUTOLOAD_P.bind(current).call(sym, false)
|
|
267
267
|
return false unless MODULE_CONST_DEFINED.bind(current).call(sym, false)
|
|
@@ -275,10 +275,12 @@ module Datadog
|
|
|
275
275
|
false
|
|
276
276
|
end
|
|
277
277
|
|
|
278
|
-
#
|
|
279
|
-
#
|
|
280
|
-
#
|
|
281
|
-
|
|
278
|
+
# Return whether +mod+ passes the name-based user-code exclusions
|
|
279
|
+
# (named, outside Datadog, not a Ruby root class). Does not resolve
|
|
280
|
+
# a source file.
|
|
281
|
+
# @param mod [Module]
|
|
282
|
+
# @return [Boolean]
|
|
283
|
+
def user_code_module_name?(mod)
|
|
282
284
|
mod_name = safe_mod_name(mod)
|
|
283
285
|
return false unless mod_name
|
|
284
286
|
|
|
@@ -287,7 +289,7 @@ module Datadog
|
|
|
287
289
|
# Matches Python: packages.is_user_code() excludes ddtrace.*
|
|
288
290
|
# Note: bare 'Datadog' must be checked separately — start_with?('Datadog::')
|
|
289
291
|
# doesn't match the root module itself.
|
|
290
|
-
return false if mod_name ==
|
|
292
|
+
return false if mod_name == "Datadog" || mod_name.start_with?("Datadog::")
|
|
291
293
|
|
|
292
294
|
# Exclude Ruby root classes. These are never user code, but
|
|
293
295
|
# find_source_file can return a user-code path for them via
|
|
@@ -297,6 +299,15 @@ module Datadog
|
|
|
297
299
|
return false if mod.equal?(Object) || mod.equal?(BasicObject) ||
|
|
298
300
|
mod.equal?(Kernel) || mod.equal?(Module) || mod.equal?(Class)
|
|
299
301
|
|
|
302
|
+
true
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Check if module is from user code (not gems or stdlib)
|
|
306
|
+
# @param mod [Module] The module to check
|
|
307
|
+
# @return [Boolean] true if user code
|
|
308
|
+
def user_code_module?(mod)
|
|
309
|
+
return false unless user_code_module_name?(mod)
|
|
310
|
+
|
|
300
311
|
source_file = find_source_file(mod)
|
|
301
312
|
return false unless source_file
|
|
302
313
|
|
|
@@ -309,28 +320,47 @@ module Datadog
|
|
|
309
320
|
def user_code_path?(path)
|
|
310
321
|
# Only absolute paths are real source files. Pseudo-paths like '<main>',
|
|
311
322
|
# '<internal:...>', '(eval)' are not user code.
|
|
312
|
-
return false unless path.start_with?(
|
|
323
|
+
return false unless path.start_with?("/")
|
|
313
324
|
# Only .rb files are Ruby source. Excludes the Ruby binary
|
|
314
325
|
# (/usr/local/bin/ruby), C extensions (.so/.bundle), and other
|
|
315
326
|
# non-source files that appear in method source_location.
|
|
316
|
-
return false unless path.end_with?(
|
|
327
|
+
return false unless path.end_with?(".rb")
|
|
317
328
|
# Exclude gem paths
|
|
318
|
-
return false if path.include?(
|
|
329
|
+
return false if path.include?("/gems/")
|
|
319
330
|
# Exclude Ruby stdlib
|
|
320
|
-
return false if path.include?(
|
|
321
|
-
return false if path.start_with?(
|
|
322
|
-
return false if path.include?(
|
|
331
|
+
return false if path.include?("/ruby/")
|
|
332
|
+
return false if path.start_with?("<internal:")
|
|
333
|
+
return false if path.include?("(eval)")
|
|
323
334
|
# Exclude test code (not application code)
|
|
324
|
-
return false if path.include?(
|
|
325
|
-
return false if path.include?(
|
|
335
|
+
return false if path.include?("/spec/")
|
|
336
|
+
return false if path.include?("/test/")
|
|
326
337
|
# Exclude Datadog's own library code (e.g., monkey-patched methods from tracing contrib).
|
|
327
338
|
# Without this, stdlib classes like Net::HTTP appear as user code when dd-trace-rb
|
|
328
339
|
# instruments them, because the patched method source points to lib/datadog/tracing/contrib/.
|
|
329
|
-
return false if path.include?(
|
|
340
|
+
return false if path.include?("/lib/datadog/")
|
|
330
341
|
|
|
331
342
|
true
|
|
332
343
|
end
|
|
333
344
|
|
|
345
|
+
# Resolve the UnboundMethod +mod+ itself declares for +method_name+,
|
|
346
|
+
# skipping prepended wrapper modules (e.g. a DI method-logpoint wrapper)
|
|
347
|
+
# that shadow it.
|
|
348
|
+
#
|
|
349
|
+
# @param mod [Module] Module or class expected to declare the method
|
|
350
|
+
# @param method_name [Symbol] Name of the method to resolve
|
|
351
|
+
# @return [UnboundMethod] Method whose owner is +mod+, or the
|
|
352
|
+
# prepend-resolved method when +mod+ owns no method in the super chain
|
|
353
|
+
def declared_instance_method(mod, method_name)
|
|
354
|
+
original_method = mod.instance_method(method_name)
|
|
355
|
+
method = original_method
|
|
356
|
+
until method.owner.equal?(mod)
|
|
357
|
+
super_method = method.super_method
|
|
358
|
+
return original_method unless super_method
|
|
359
|
+
method = super_method
|
|
360
|
+
end
|
|
361
|
+
method
|
|
362
|
+
end
|
|
363
|
+
|
|
334
364
|
# Find source file for a module.
|
|
335
365
|
# Prefers user code paths over gem/stdlib paths. ActiveRecord models have
|
|
336
366
|
# generated methods (autosave callbacks) whose source is in the gem, but
|
|
@@ -349,7 +379,7 @@ module Datadog
|
|
|
349
379
|
|
|
350
380
|
# Try instance methods first
|
|
351
381
|
mod.instance_methods(false).each do |method_name|
|
|
352
|
-
method = mod
|
|
382
|
+
method = declared_instance_method(mod, method_name)
|
|
353
383
|
location = method.source_location
|
|
354
384
|
next unless location
|
|
355
385
|
|
|
@@ -357,10 +387,15 @@ module Datadog
|
|
|
357
387
|
return path if user_code_path?(path)
|
|
358
388
|
|
|
359
389
|
fallback ||= path # steep:ignore
|
|
390
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
391
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
392
|
+
@logger.debug { "symdb: error resolving #{safe_mod_name(mod)}##{method_name}: #{e.class}: #{e.message}" }
|
|
360
393
|
end
|
|
361
394
|
|
|
362
395
|
# Try singleton methods
|
|
363
396
|
mod.singleton_methods(false).each do |method_name|
|
|
397
|
+
# Method-logpoint probes prepend instance methods only, so singleton
|
|
398
|
+
# methods are never shadowed by a DI wrapper.
|
|
364
399
|
method = mod.method(method_name)
|
|
365
400
|
location = method.source_location
|
|
366
401
|
next unless location
|
|
@@ -369,6 +404,9 @@ module Datadog
|
|
|
369
404
|
return path if user_code_path?(path)
|
|
370
405
|
|
|
371
406
|
fallback ||= path # steep:ignore
|
|
407
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
408
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
409
|
+
@logger.debug { "symdb: error resolving #{safe_mod_name(mod)}.#{method_name}: #{e.class}: #{e.message}" }
|
|
372
410
|
end
|
|
373
411
|
|
|
374
412
|
# Use const_source_location to find where this class/module is declared.
|
|
@@ -379,11 +417,11 @@ module Datadog
|
|
|
379
417
|
mod_name = safe_mod_name(mod)
|
|
380
418
|
if mod_name
|
|
381
419
|
# Look up the class/module by its last name component in its enclosing namespace.
|
|
382
|
-
parts = mod_name.split(
|
|
420
|
+
parts = mod_name.split("::")
|
|
383
421
|
const_name = parts.last
|
|
384
422
|
namespace = if parts.length > 1
|
|
385
423
|
begin
|
|
386
|
-
MODULE_CONST_GET.bind(Object).call(parts[0..-2].join(
|
|
424
|
+
MODULE_CONST_GET.bind(Object).call(parts[0..-2].join("::")) # steep:ignore
|
|
387
425
|
rescue NameError
|
|
388
426
|
nil
|
|
389
427
|
end
|
|
@@ -430,7 +468,7 @@ module Datadog
|
|
|
430
468
|
fallback
|
|
431
469
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
432
470
|
Datadog::DI.reraise_if_fatal(e)
|
|
433
|
-
@logger.debug { "symdb: error finding source file for #{safe_mod_name(mod) ||
|
|
471
|
+
@logger.debug { "symdb: error finding source file for #{safe_mod_name(mod) || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
434
472
|
nil
|
|
435
473
|
end
|
|
436
474
|
|
|
@@ -447,7 +485,7 @@ module Datadog
|
|
|
447
485
|
lang[:file_hash] = file_hash if file_hash
|
|
448
486
|
|
|
449
487
|
Scope.new(
|
|
450
|
-
scope_type:
|
|
488
|
+
scope_type: "FILE",
|
|
451
489
|
name: file_path,
|
|
452
490
|
source_file: file_path,
|
|
453
491
|
start_line: UNKNOWN_MIN_LINE,
|
|
@@ -460,12 +498,11 @@ module Datadog
|
|
|
460
498
|
# Extract MODULE scope (without file_hash — that belongs on the FILE root scope).
|
|
461
499
|
# Does not include nested classes — nesting is handled by extract_all via FQN splitting.
|
|
462
500
|
# @param mod [Module] The module
|
|
501
|
+
# @param source_file [String] Source file resolved by the caller
|
|
463
502
|
# @return [Scope] The module scope
|
|
464
|
-
def extract_module_scope(mod)
|
|
465
|
-
source_file = find_source_file(mod)
|
|
466
|
-
|
|
503
|
+
def extract_module_scope(mod, source_file)
|
|
467
504
|
Scope.new(
|
|
468
|
-
scope_type:
|
|
505
|
+
scope_type: "MODULE",
|
|
469
506
|
name: safe_mod_name(mod),
|
|
470
507
|
source_file: source_file,
|
|
471
508
|
start_line: UNKNOWN_MIN_LINE,
|
|
@@ -476,49 +513,33 @@ module Datadog
|
|
|
476
513
|
|
|
477
514
|
# Extract CLASS scope
|
|
478
515
|
# @param klass [Class] The class
|
|
516
|
+
# @param source_file [String] Source file resolved by the caller
|
|
479
517
|
# @return [Scope] The class scope
|
|
480
|
-
def extract_class_scope(klass)
|
|
481
|
-
|
|
482
|
-
start_line, end_line =
|
|
483
|
-
source_file = find_source_file(klass)
|
|
518
|
+
def extract_class_scope(klass, source_file)
|
|
519
|
+
method_scopes = build_class_method_scopes(klass)
|
|
520
|
+
start_line, end_line = line_range_from_scopes(method_scopes)
|
|
484
521
|
|
|
485
522
|
Scope.new(
|
|
486
|
-
scope_type:
|
|
523
|
+
scope_type: "CLASS",
|
|
487
524
|
name: safe_mod_name(klass),
|
|
488
525
|
source_file: source_file,
|
|
489
526
|
start_line: start_line,
|
|
490
527
|
end_line: end_line,
|
|
491
528
|
language_specifics: build_class_language_specifics(klass),
|
|
492
|
-
scopes:
|
|
529
|
+
scopes: method_scopes,
|
|
493
530
|
symbols: extract_scope_symbols(klass)
|
|
494
531
|
)
|
|
495
532
|
end
|
|
496
533
|
|
|
497
|
-
#
|
|
498
|
-
#
|
|
499
|
-
#
|
|
500
|
-
# @param
|
|
501
|
-
# @param methods [Array<Symbol>] Method names
|
|
534
|
+
# Derive a [start_line, end_line] range from method scopes, ignoring
|
|
535
|
+
# UNKNOWN sentinel values. The end is the max of method end_lines so a
|
|
536
|
+
# multi-line method's last line is not truncated to its start_line.
|
|
537
|
+
# @param method_scopes [Array<Scope>]
|
|
502
538
|
# @return [Array<Integer, Integer>] [start_line, end_line]
|
|
503
|
-
def
|
|
504
|
-
starts =
|
|
505
|
-
ends =
|
|
506
|
-
|
|
507
|
-
method = klass.instance_method(method_name)
|
|
508
|
-
location = method.source_location
|
|
509
|
-
next unless location && location[0]
|
|
510
|
-
starts << location[1]
|
|
511
|
-
_ranges, method_end = extract_targetable_lines(method, location[1])
|
|
512
|
-
ends << method_end
|
|
513
|
-
end
|
|
514
|
-
|
|
515
|
-
return [UNKNOWN_MIN_LINE, UNKNOWN_MAX_LINE] if starts.empty?
|
|
516
|
-
|
|
517
|
-
[starts.min, ends.max]
|
|
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}" }
|
|
521
|
-
[UNKNOWN_MIN_LINE, UNKNOWN_MAX_LINE]
|
|
539
|
+
def line_range_from_scopes(method_scopes)
|
|
540
|
+
starts = method_scopes.map(&:start_line).reject { |line| line == UNKNOWN_MIN_LINE }
|
|
541
|
+
ends = method_scopes.map(&:end_line).reject { |line| line == UNKNOWN_MAX_LINE }
|
|
542
|
+
[starts.min || UNKNOWN_MIN_LINE, ends.max || UNKNOWN_MAX_LINE]
|
|
522
543
|
end
|
|
523
544
|
|
|
524
545
|
# Build language specifics for CLASS
|
|
@@ -566,77 +587,44 @@ module Datadog
|
|
|
566
587
|
{}
|
|
567
588
|
end
|
|
568
589
|
|
|
569
|
-
#
|
|
570
|
-
#
|
|
571
|
-
# @
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
# Get all instance methods (public, protected, private)
|
|
576
|
-
all_instance_methods = klass.instance_methods(false) +
|
|
590
|
+
# Build a METHOD scope for each user-code instance method +klass+
|
|
591
|
+
# declares.
|
|
592
|
+
# @param klass [Class]
|
|
593
|
+
# @return [Array<Scope>]
|
|
594
|
+
def build_class_method_scopes(klass)
|
|
595
|
+
method_names = (klass.instance_methods(false) +
|
|
577
596
|
klass.protected_instance_methods(false) +
|
|
578
|
-
klass.private_instance_methods(false)
|
|
579
|
-
all_instance_methods.uniq!
|
|
597
|
+
klass.private_instance_methods(false)).uniq
|
|
580
598
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
599
|
+
Core::Utils::EnumerableCompat.filter_map(method_names) do |method_name|
|
|
600
|
+
method = declared_instance_method(klass, method_name)
|
|
601
|
+
location = method.source_location
|
|
602
|
+
next unless location
|
|
603
|
+
next unless user_code_path?(location[0])
|
|
585
604
|
|
|
586
|
-
|
|
605
|
+
build_instance_method_scope(klass, method_name, method)
|
|
606
|
+
rescue Exception => e # standard:disable Lint/RescueException
|
|
607
|
+
Datadog::DI.reraise_if_fatal(e)
|
|
608
|
+
@logger.debug { "symdb: error resolving #{safe_mod_name(klass)}##{method_name}: #{e.class}: #{e.message}" }
|
|
609
|
+
nil
|
|
610
|
+
end
|
|
587
611
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
588
612
|
Datadog::DI.reraise_if_fatal(e)
|
|
589
613
|
@logger.debug { "symdb: failed to extract methods from #{safe_mod_name(klass)}: #{e.class}: #{e.message}" }
|
|
590
614
|
[]
|
|
591
615
|
end
|
|
592
616
|
|
|
593
|
-
# Extract a single method scope
|
|
594
|
-
# @param klass [Class] The class
|
|
595
|
-
# @param method_name [Symbol] Method name
|
|
596
|
-
# @param method_type [Symbol] :instance or :class
|
|
597
|
-
# @return [Scope, nil] Method scope or nil
|
|
598
|
-
def extract_method_scope(klass, method_name, method_type)
|
|
599
|
-
method = klass.instance_method(method_name)
|
|
600
|
-
location = method.source_location
|
|
601
|
-
|
|
602
|
-
return nil unless location # Skip methods without source location
|
|
603
|
-
|
|
604
|
-
source_file, line = location
|
|
605
|
-
return nil unless user_code_path?(source_file) # Skip gem/stdlib methods
|
|
606
|
-
|
|
607
|
-
targetable_lines, end_line = extract_targetable_lines(method, line)
|
|
608
|
-
|
|
609
|
-
Scope.new(
|
|
610
|
-
scope_type: 'METHOD',
|
|
611
|
-
name: method_name.to_s,
|
|
612
|
-
source_file: source_file,
|
|
613
|
-
start_line: line,
|
|
614
|
-
end_line: end_line,
|
|
615
|
-
targetable_lines: targetable_lines,
|
|
616
|
-
language_specifics: {
|
|
617
|
-
visibility: method_visibility(klass, method_name),
|
|
618
|
-
method_type: method_type.to_s,
|
|
619
|
-
arity: method.arity
|
|
620
|
-
},
|
|
621
|
-
symbols: extract_method_parameters(method)
|
|
622
|
-
)
|
|
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}" }
|
|
626
|
-
nil
|
|
627
|
-
end
|
|
628
|
-
|
|
629
617
|
# Get method visibility
|
|
630
618
|
# @param klass [Class] The class
|
|
631
619
|
# @param method_name [Symbol] Method name
|
|
632
620
|
# @return [String] 'public', 'private', or 'protected'
|
|
633
621
|
def method_visibility(klass, method_name)
|
|
634
622
|
if klass.private_instance_methods(false).include?(method_name)
|
|
635
|
-
|
|
623
|
+
"private"
|
|
636
624
|
elsif klass.protected_instance_methods(false).include?(method_name)
|
|
637
|
-
|
|
625
|
+
"protected"
|
|
638
626
|
else
|
|
639
|
-
|
|
627
|
+
"public"
|
|
640
628
|
end
|
|
641
629
|
end
|
|
642
630
|
|
|
@@ -647,7 +635,7 @@ module Datadog
|
|
|
647
635
|
# @param start_line [Integer] Fallback end_line if iseq unavailable
|
|
648
636
|
# @return [Array(Array<Hash>, Integer), Array(nil, Integer)]
|
|
649
637
|
def extract_targetable_lines(method, start_line)
|
|
650
|
-
iseq = RubyVM::InstructionSequence.of(method)
|
|
638
|
+
iseq = RubyVM::InstructionSequence.of(method)
|
|
651
639
|
unless iseq
|
|
652
640
|
@logger.debug { "symdb: no iseq for #{method.name} (C extension or native), skipping targetable lines" }
|
|
653
641
|
return [nil, start_line]
|
|
@@ -662,7 +650,7 @@ module Datadog
|
|
|
662
650
|
end_line = lines.max || start_line
|
|
663
651
|
ranges = build_targetable_ranges(lines)
|
|
664
652
|
result = ranges.empty? ? nil : ranges
|
|
665
|
-
@logger.debug { "symdb: #{method.name} targetable lines: #{result ? "#{ranges.size} range(s), lines #{lines.first}..#{lines.last}" :
|
|
653
|
+
@logger.debug { "symdb: #{method.name} targetable lines: #{result ? "#{ranges.size} range(s), lines #{lines.first}..#{lines.last}" : "none (no matching events)"}" }
|
|
666
654
|
[result, end_line]
|
|
667
655
|
end
|
|
668
656
|
|
|
@@ -702,7 +690,7 @@ module Datadog
|
|
|
702
690
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
703
691
|
Datadog::DI.reraise_if_fatal(e)
|
|
704
692
|
@logger.debug { "symdb: method.name failed: #{e.class}: #{e.message}" }
|
|
705
|
-
|
|
693
|
+
"unknown"
|
|
706
694
|
end
|
|
707
695
|
params = method.parameters
|
|
708
696
|
|
|
@@ -717,7 +705,7 @@ module Datadog
|
|
|
717
705
|
next if param_name.nil?
|
|
718
706
|
|
|
719
707
|
Symbol.new(
|
|
720
|
-
symbol_type:
|
|
708
|
+
symbol_type: "ARG",
|
|
721
709
|
name: param_name.to_s,
|
|
722
710
|
line: UNKNOWN_MIN_LINE, # Parameters available in entire method
|
|
723
711
|
)
|
|
@@ -790,7 +778,7 @@ module Datadog
|
|
|
790
778
|
end
|
|
791
779
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
792
780
|
Datadog::DI.reraise_if_fatal(e)
|
|
793
|
-
@logger.debug { "symdb: error indexing #{mod_name ||
|
|
781
|
+
@logger.debug { "symdb: error indexing #{mod_name || "<unknown>"}: #{e.class}: #{e.message}" }
|
|
794
782
|
end
|
|
795
783
|
|
|
796
784
|
index
|
|
@@ -801,14 +789,14 @@ module Datadog
|
|
|
801
789
|
# objects allocated to read `source_location` are not retained between
|
|
802
790
|
# passes, so they can be GC'd as soon as the inner loop ends.
|
|
803
791
|
def collect_method_names_by_file(mod)
|
|
804
|
-
result = Hash.new { |h, k| h[k] = [] }
|
|
792
|
+
result = Hash.new { |h, k| h[k] = [] }
|
|
805
793
|
|
|
806
794
|
# Module#instance_methods(false) already returns both public and protected
|
|
807
795
|
# methods, so iterating it plus private_instance_methods covers all three
|
|
808
796
|
# visibilities without an intermediate merged array.
|
|
809
797
|
[mod.instance_methods(false), mod.private_instance_methods(false)].each do |method_names|
|
|
810
798
|
method_names.each do |method_name|
|
|
811
|
-
method = mod
|
|
799
|
+
method = declared_instance_method(mod, method_name)
|
|
812
800
|
loc = method.source_location
|
|
813
801
|
next unless loc
|
|
814
802
|
next unless user_code_path?(loc[0])
|
|
@@ -840,19 +828,19 @@ module Datadog
|
|
|
840
828
|
return nil if entries.empty?
|
|
841
829
|
|
|
842
830
|
root = {
|
|
843
|
-
name: file_path, type:
|
|
831
|
+
name: file_path, type: "FILE", children: {},
|
|
844
832
|
methods: [], mod: nil, source_file: file_path, fqn: nil,
|
|
845
833
|
}
|
|
846
834
|
|
|
847
835
|
# Sort by FQN depth so parent namespaces are placed before children.
|
|
848
|
-
sorted = entries.sort_by { |(mod_name, _, _)| mod_name.count(
|
|
836
|
+
sorted = entries.sort_by { |(mod_name, _, _)| mod_name.count(":") }
|
|
849
837
|
|
|
850
838
|
sorted.each do |mod_name, mod, method_names|
|
|
851
839
|
# Resolve UnboundMethods for this (mod, file) just-in-time. These objects
|
|
852
840
|
# live only as long as the tree node holds them; they are released when
|
|
853
841
|
# convert_tree_to_scope finishes building the file's Scope.
|
|
854
842
|
method_infos = Core::Utils::EnumerableCompat.filter_map(method_names) do |name|
|
|
855
|
-
method = mod
|
|
843
|
+
method = declared_instance_method(mod, name)
|
|
856
844
|
# Pass 1 (build_per_file_index) recorded this method under file_path.
|
|
857
845
|
# If the method has been redefined in another file between the two
|
|
858
846
|
# passes (e.g. a class reopened during a Rails reload while extract_all
|
|
@@ -875,7 +863,7 @@ module Datadog
|
|
|
875
863
|
# the module no longer lives in.
|
|
876
864
|
next if method_names.any? && method_infos.empty?
|
|
877
865
|
|
|
878
|
-
parts = mod_name.split(
|
|
866
|
+
parts = mod_name.split("::")
|
|
879
867
|
place_in_tree(root, parts, mod, mod_name, method_infos, file_path)
|
|
880
868
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
881
869
|
Datadog::DI.reraise_if_fatal(e)
|
|
@@ -901,11 +889,11 @@ module Datadog
|
|
|
901
889
|
|
|
902
890
|
# Create/find intermediate nodes for each namespace segment except the last
|
|
903
891
|
name_parts[0..-2].each_with_index do |part, idx| # steep:ignore
|
|
904
|
-
fqn = name_parts[0..idx].join(
|
|
892
|
+
fqn = name_parts[0..idx].join("::") # steep:ignore
|
|
905
893
|
current[:children][part] ||= {
|
|
906
894
|
name: fqn, type: resolve_scope_type(fqn),
|
|
907
895
|
children: {}, methods: [], mod: nil,
|
|
908
|
-
source_file: file_path, fqn: fqn
|
|
896
|
+
source_file: file_path, fqn: fqn,
|
|
909
897
|
}
|
|
910
898
|
current = current[:children][part]
|
|
911
899
|
end
|
|
@@ -916,15 +904,15 @@ module Datadog
|
|
|
916
904
|
if leaf
|
|
917
905
|
# Node exists (was created as intermediate or from another entry).
|
|
918
906
|
# Update type and mod — the actual module object is authoritative.
|
|
919
|
-
leaf[:type] = (Class === mod) ?
|
|
907
|
+
leaf[:type] = (Class === mod) ? "CLASS" : "MODULE"
|
|
920
908
|
leaf[:mod] = mod
|
|
921
909
|
else
|
|
922
910
|
leaf = {
|
|
923
911
|
name: mod_name,
|
|
924
|
-
type: (Class === mod) ?
|
|
912
|
+
type: (Class === mod) ? "CLASS" : "MODULE",
|
|
925
913
|
children: {}, methods: [],
|
|
926
914
|
mod: mod, source_file: file_path,
|
|
927
|
-
fqn: mod_name
|
|
915
|
+
fqn: mod_name,
|
|
928
916
|
}
|
|
929
917
|
current[:children][leaf_name] = leaf
|
|
930
918
|
end
|
|
@@ -939,22 +927,22 @@ module Datadog
|
|
|
939
927
|
# @return [String] 'CLASS' or 'MODULE'
|
|
940
928
|
def resolve_scope_type(fqn)
|
|
941
929
|
current = Object
|
|
942
|
-
fqn.split(
|
|
930
|
+
fqn.split("::").each do |seg|
|
|
943
931
|
sym = seg.to_sym
|
|
944
|
-
pending_autoload = if RubyVersion.is?(
|
|
932
|
+
pending_autoload = if RubyVersion.is?(">= 2.7")
|
|
945
933
|
MODULE_AUTOLOAD_P.bind(current).call(sym, false)
|
|
946
934
|
else
|
|
947
935
|
MODULE_AUTOLOAD_P.bind(current).call(sym)
|
|
948
936
|
end
|
|
949
|
-
return
|
|
950
|
-
return
|
|
937
|
+
return "MODULE" if pending_autoload
|
|
938
|
+
return "MODULE" unless MODULE_CONST_DEFINED.bind(current).call(sym, false)
|
|
951
939
|
current = MODULE_CONST_GET.bind(current).call(sym, false)
|
|
952
940
|
end
|
|
953
|
-
(Class === current) ?
|
|
941
|
+
(Class === current) ? "CLASS" : "MODULE"
|
|
954
942
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
955
943
|
Datadog::DI.reraise_if_fatal(e)
|
|
956
944
|
@logger.debug { "symdb: resolve_scope_type(#{fqn}) failed: #{e.class}: #{e.message}, defaulting to MODULE" }
|
|
957
|
-
|
|
945
|
+
"MODULE"
|
|
958
946
|
end
|
|
959
947
|
|
|
960
948
|
# Convert a single file tree (built by build_file_scope) to a FILE Scope.
|
|
@@ -967,7 +955,7 @@ module Datadog
|
|
|
967
955
|
lang[:file_hash] = file_hash if file_hash
|
|
968
956
|
|
|
969
957
|
Scope.new(
|
|
970
|
-
scope_type:
|
|
958
|
+
scope_type: "FILE",
|
|
971
959
|
name: file_path,
|
|
972
960
|
source_file: file_path,
|
|
973
961
|
start_line: UNKNOWN_MIN_LINE,
|
|
@@ -989,19 +977,13 @@ module Datadog
|
|
|
989
977
|
# Recurse into child scopes (nested modules/classes)
|
|
990
978
|
child_scopes = node[:children].values.map { |child| convert_node_to_scope(child) }
|
|
991
979
|
|
|
992
|
-
|
|
993
|
-
# method end. Using max(start_line) would underreport the class's end_line for
|
|
994
|
-
# classes whose last method spans multiple lines.
|
|
995
|
-
starts = method_scopes.map(&:start_line).reject { |l| l == UNKNOWN_MIN_LINE } # steep:ignore
|
|
996
|
-
ends = method_scopes.map(&:end_line).reject { |l| l == UNKNOWN_MAX_LINE } # steep:ignore
|
|
997
|
-
start_line = starts.empty? ? UNKNOWN_MIN_LINE : starts.min
|
|
998
|
-
end_line = ends.empty? ? UNKNOWN_MAX_LINE : ends.max
|
|
980
|
+
start_line, end_line = line_range_from_scopes(method_scopes)
|
|
999
981
|
|
|
1000
982
|
# Extract symbols (constants, class variables) if we have the actual module object
|
|
1001
983
|
symbols = node[:mod] ? extract_scope_symbols(node[:mod]) : []
|
|
1002
984
|
|
|
1003
985
|
# Build language specifics
|
|
1004
|
-
lang = if node[:type] ==
|
|
986
|
+
lang = if node[:type] == "CLASS" && node[:mod]
|
|
1005
987
|
build_class_language_specifics(node[:mod])
|
|
1006
988
|
else
|
|
1007
989
|
{}
|
|
@@ -1034,22 +1016,22 @@ module Datadog
|
|
|
1034
1016
|
targetable_lines, end_line = extract_targetable_lines(method, line)
|
|
1035
1017
|
|
|
1036
1018
|
Scope.new(
|
|
1037
|
-
scope_type:
|
|
1019
|
+
scope_type: "METHOD",
|
|
1038
1020
|
name: method_name.to_s,
|
|
1039
1021
|
source_file: source_file,
|
|
1040
1022
|
start_line: line,
|
|
1041
1023
|
end_line: end_line,
|
|
1042
1024
|
targetable_lines: targetable_lines,
|
|
1043
1025
|
language_specifics: {
|
|
1044
|
-
visibility: klass ? method_visibility(klass, method_name) :
|
|
1045
|
-
method_type:
|
|
1046
|
-
arity: method.arity
|
|
1026
|
+
visibility: klass ? method_visibility(klass, method_name) : "public", # steep:ignore
|
|
1027
|
+
method_type: "instance",
|
|
1028
|
+
arity: method.arity,
|
|
1047
1029
|
},
|
|
1048
1030
|
symbols: extract_method_parameters(method)
|
|
1049
1031
|
)
|
|
1050
1032
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
1051
1033
|
Datadog::DI.reraise_if_fatal(e)
|
|
1052
|
-
klass_name = klass ? (safe_mod_name(klass) ||
|
|
1034
|
+
klass_name = klass ? (safe_mod_name(klass) || "<unknown>") : "<unknown>"
|
|
1053
1035
|
@logger.debug { "symdb: failed to build method scope #{klass_name}##{method_name}: #{e.class}: #{e.message}" }
|
|
1054
1036
|
nil
|
|
1055
1037
|
end
|
|
@@ -1065,7 +1047,7 @@ module Datadog
|
|
|
1065
1047
|
if Class === mod
|
|
1066
1048
|
MODULE_CLASS_VARIABLES.bind(mod).call(false).each do |var_name|
|
|
1067
1049
|
symbols << Symbol.new(
|
|
1068
|
-
symbol_type:
|
|
1050
|
+
symbol_type: "STATIC_FIELD",
|
|
1069
1051
|
name: var_name.to_s,
|
|
1070
1052
|
line: UNKNOWN_MIN_LINE
|
|
1071
1053
|
)
|
|
@@ -1080,7 +1062,7 @@ module Datadog
|
|
|
1080
1062
|
next if Module === const_value
|
|
1081
1063
|
|
|
1082
1064
|
symbols << Symbol.new(
|
|
1083
|
-
symbol_type:
|
|
1065
|
+
symbol_type: "STATIC_FIELD",
|
|
1084
1066
|
name: const_name.to_s,
|
|
1085
1067
|
line: UNKNOWN_MIN_LINE,
|
|
1086
1068
|
type: safe_mod_name(KERNEL_CLASS.bind(const_value).call)
|
|
@@ -1101,7 +1083,7 @@ module Datadog
|
|
|
1101
1083
|
symbols
|
|
1102
1084
|
rescue Exception => e # standard:disable Lint/RescueException
|
|
1103
1085
|
Datadog::DI.reraise_if_fatal(e)
|
|
1104
|
-
mod_name = safe_mod_name(mod) ||
|
|
1086
|
+
mod_name = safe_mod_name(mod) || "<unknown>"
|
|
1105
1087
|
@logger.debug { "symdb: failed to extract symbols from #{mod_name}: #{e.class}: #{e.message}" }
|
|
1106
1088
|
[]
|
|
1107
1089
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require_relative
|
|
3
|
+
require "digest/sha1"
|
|
4
|
+
require_relative "../di/fatal_exceptions"
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module SymbolDatabase
|
|
@@ -30,7 +30,7 @@ module Datadog
|
|
|
30
30
|
return nil unless file_path
|
|
31
31
|
return nil unless File.exist?(file_path)
|
|
32
32
|
|
|
33
|
-
content = File.read(file_path, mode:
|
|
33
|
+
content = File.read(file_path, mode: "rb")
|
|
34
34
|
size = content.bytesize
|
|
35
35
|
git_blob = "blob #{size}\0#{content}"
|
|
36
36
|
|