datadog 2.28.0 → 2.41.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 +412 -1
- data/bin/ddprofrb +4 -4
- data/ext/datadog_profiling_native_extension/clock_id.h +9 -1
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +66 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +281 -57
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +18 -4
- data/ext/datadog_profiling_native_extension/collectors_stack.c +245 -160
- data/ext/datadog_profiling_native_extension/collectors_stack.h +23 -4
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +725 -432
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +19 -6
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +44 -19
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +17 -12
- data/ext/datadog_profiling_native_extension/extconf.rb +44 -40
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
- data/ext/datadog_profiling_native_extension/heap_recorder.c +230 -81
- data/ext/datadog_profiling_native_extension/heap_recorder.h +12 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +61 -69
- data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -16
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +300 -108
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +17 -9
- data/ext/datadog_profiling_native_extension/profiling.c +44 -5
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +40 -34
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +26 -8
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -3
- data/ext/datadog_profiling_native_extension/stack_recorder.c +94 -69
- data/ext/datadog_profiling_native_extension/stack_recorder.h +3 -1
- data/ext/datadog_profiling_native_extension/time_helpers.h +13 -7
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +4 -2
- data/ext/libdatadog_api/crashtracker.c +12 -8
- data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +44 -19
- data/ext/libdatadog_api/datadog_ruby_common.h +17 -12
- data/ext/libdatadog_api/di.c +203 -0
- data/ext/libdatadog_api/extconf.rb +38 -44
- data/ext/libdatadog_api/feature_flags.c +26 -0
- data/ext/libdatadog_api/init.c +9 -2
- data/ext/libdatadog_api/trace_exporter.c +1312 -0
- data/ext/libdatadog_api/trace_exporter.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +98 -15
- data/lib/datadog/ai_guard/api_client.rb +9 -7
- data/lib/datadog/ai_guard/autoload.rb +10 -0
- data/lib/datadog/ai_guard/component.rb +11 -9
- data/lib/datadog/ai_guard/configuration.rb +106 -2
- data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
- data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
- data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +97 -0
- data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +41 -3
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +3 -1
- data/lib/datadog/ai_guard/evaluation/request.rb +22 -17
- data/lib/datadog/ai_guard/evaluation/result.rb +3 -1
- data/lib/datadog/ai_guard/evaluation.rb +51 -7
- data/lib/datadog/ai_guard/ext.rb +15 -0
- data/lib/datadog/ai_guard.rb +34 -8
- 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 +26 -14
- 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 +2 -1
- data/lib/datadog/appsec/assets.rb +7 -7
- data/lib/datadog/appsec/autoload.rb +4 -4
- data/lib/datadog/appsec/component.rb +29 -22
- data/lib/datadog/appsec/compressed_json.rb +7 -7
- data/lib/datadog/appsec/configuration.rb +436 -1
- data/lib/datadog/appsec/context.rb +49 -12
- 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 +7 -4
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +146 -0
- 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 +5 -5
- data/lib/datadog/appsec/contrib/devise/patcher.rb +8 -8
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +14 -13
- 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 +3 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +118 -14
- data/lib/datadog/appsec/contrib/faraday/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +119 -12
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +76 -26
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
- data/lib/datadog/appsec/contrib/graphql/integration.rb +10 -9
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +56 -21
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +46 -30
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +79 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +7 -7
- 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 +63 -52
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +43 -4
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +25 -9
- data/lib/datadog/appsec/contrib/rails/integration.rb +6 -6
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +3 -1
- 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 +3 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +131 -13
- 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 +35 -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 +25 -0
- data/lib/datadog/appsec/default_header_tags.rb +52 -0
- data/lib/datadog/appsec/event.rb +15 -31
- data/lib/datadog/appsec/ext.rb +11 -10
- data/lib/datadog/appsec/extensions.rb +2 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +3 -16
- 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 +15 -3
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +20 -2
- data/lib/datadog/appsec/metrics.rb +4 -4
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +18 -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 +15 -9
- data/lib/datadog/appsec/response.rb +22 -22
- 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 +54 -33
- data/lib/datadog/appsec/security_engine/runner.rb +3 -3
- data/lib/datadog/appsec/security_event.rb +2 -2
- data/lib/datadog/appsec/trace_keeper.rb +18 -6
- data/lib/datadog/appsec/utils/http/body.rb +41 -0
- data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +17 -16
- data/lib/datadog/appsec/utils/http/media_type.rb +28 -36
- data/lib/datadog/appsec/utils/http/url_encoded.rb +107 -0
- data/lib/datadog/appsec.rb +21 -24
- 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 +19 -7
- data/lib/datadog/core/configuration/components.rb +166 -36
- data/lib/datadog/core/configuration/components_state.rb +6 -1
- data/lib/datadog/core/configuration/config_helper.rb +12 -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 +48 -22
- data/lib/datadog/core/configuration/option_definition.rb +43 -17
- data/lib/datadog/core/configuration/options.rb +43 -9
- data/lib/datadog/core/configuration/settings.rb +155 -106
- data/lib/datadog/core/configuration/stable_config.rb +1 -1
- data/lib/datadog/core/configuration/supported_configurations.rb +44 -1
- data/lib/datadog/core/configuration.rb +11 -11
- data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
- data/lib/datadog/core/contrib/rails/utils.rb +7 -3
- data/lib/datadog/core/crashtracking/component.rb +78 -26
- 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 +45 -8
- 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 +65 -1
- data/lib/datadog/core/environment/cgroup.rb +4 -4
- data/lib/datadog/core/environment/container.rb +11 -11
- data/lib/datadog/core/environment/execution.rb +3 -3
- data/lib/datadog/core/environment/ext.rb +21 -15
- 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 +47 -11
- data/lib/datadog/core/environment/platform.rb +8 -8
- data/lib/datadog/core/environment/process.rb +54 -19
- data/lib/datadog/core/environment/socket.rb +15 -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 +3 -3
- data/lib/datadog/core/git/ext.rb +4 -4
- data/lib/datadog/core/knuth_sampler.rb +3 -1
- data/lib/datadog/core/logger.rb +4 -4
- data/lib/datadog/core/logging/ext.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +26 -26
- 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 +3 -3
- data/lib/datadog/core/metrics/options.rb +5 -5
- data/lib/datadog/core/pin.rb +1 -1
- data/lib/datadog/core/process_discovery.rb +23 -22
- data/lib/datadog/core/rate_limiter.rb +3 -1
- data/lib/datadog/core/remote/client/capabilities.rb +67 -15
- data/lib/datadog/core/remote/client.rb +18 -18
- data/lib/datadog/core/remote/component.rb +70 -34
- 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/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 +9 -15
- data/lib/datadog/core/remote/transport/http/config.rb +10 -10
- 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 +11 -12
- 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 +16 -26
- data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
- data/lib/datadog/core/telemetry/emitter.rb +5 -5
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +10 -9
- 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 +32 -0
- 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 +142 -193
- 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 -22
- data/lib/datadog/core/telemetry/ext.rb +11 -10
- 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 -8
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +16 -11
- data/lib/datadog/core/telemetry/transport/http.rb +7 -7
- data/lib/datadog/core/telemetry/transport/telemetry.rb +8 -9
- data/lib/datadog/core/telemetry/worker.rb +26 -6
- data/lib/datadog/core/transport/ext.rb +14 -13
- 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 +5 -1
- data/lib/datadog/core/transport/http.rb +9 -7
- data/lib/datadog/core/transport/parcel.rb +61 -9
- data/lib/datadog/core/transport/response.rb +1 -1
- 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 +23 -0
- data/lib/datadog/core/utils/duration.rb +1 -1
- data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
- data/lib/datadog/core/utils/fnv.rb +26 -0
- data/lib/datadog/core/utils/forking.rb +3 -1
- data/lib/datadog/core/utils/hash.rb +0 -23
- 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.rb +1 -1
- 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 +68 -0
- data/lib/datadog/core/utils/time.rb +18 -52
- data/lib/datadog/core/utils/url.rb +1 -1
- data/lib/datadog/core/utils.rb +5 -5
- data/lib/datadog/core/workers/async.rb +2 -2
- data/lib/datadog/core/workers/interval_loop.rb +13 -6
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/queue.rb +0 -4
- data/lib/datadog/core/workers/runtime_metrics.rb +13 -5
- data/lib/datadog/core.rb +13 -6
- data/lib/datadog/data_streams/configuration.rb +40 -1
- 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 +8 -8
- data/lib/datadog/data_streams/processor.rb +87 -85
- data/lib/datadog/data_streams/transport/http/stats.rb +9 -3
- data/lib/datadog/data_streams/transport/http.rb +5 -9
- data/lib/datadog/data_streams/transport/stats.rb +10 -17
- data/lib/datadog/data_streams.rb +5 -5
- data/lib/datadog/di/base.rb +16 -8
- data/lib/datadog/di/boot.rb +25 -23
- 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 +218 -16
- data/lib/datadog/di/component.rb +137 -39
- data/lib/datadog/di/configuration.rb +241 -2
- data/lib/datadog/di/context.rb +15 -3
- data/lib/datadog/di/contrib/active_record.rb +6 -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 +114 -38
- 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/error.rb +10 -0
- data/lib/datadog/di/fatal_exceptions.rb +26 -0
- data/lib/datadog/di/instrumenter.rb +608 -255
- data/lib/datadog/di/logger.rb +1 -1
- data/lib/datadog/di/preload.rb +1 -1
- data/lib/datadog/di/probe.rb +71 -3
- data/lib/datadog/di/probe_builder.rb +98 -15
- data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +16 -11
- data/lib/datadog/di/probe_manager.rb +153 -73
- data/lib/datadog/di/probe_notification_builder.rb +218 -38
- data/lib/datadog/di/probe_notifier_worker.rb +111 -35
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/proc_responder.rb +4 -0
- data/lib/datadog/di/redactor.rb +16 -1
- data/lib/datadog/di/remote.rb +193 -33
- data/lib/datadog/di/serializer.rb +201 -39
- data/lib/datadog/di/transport/diagnostics.rb +10 -12
- data/lib/datadog/di/transport/http/diagnostics.rb +5 -3
- data/lib/datadog/di/transport/http/input.rb +3 -3
- data/lib/datadog/di/transport/http.rb +22 -13
- data/lib/datadog/di/transport/input.rb +65 -24
- data/lib/datadog/di/utils.rb +43 -15
- data/lib/datadog/di.rb +147 -3
- data/lib/datadog/error_tracking/collector.rb +3 -2
- data/lib/datadog/error_tracking/component.rb +12 -12
- data/lib/datadog/error_tracking/configuration.rb +55 -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 +91 -33
- data/lib/datadog/kit/appsec/events.rb +25 -25
- data/lib/datadog/kit/enable_core_dumps.rb +3 -3
- data/lib/datadog/kit/identity.rb +18 -18
- data/lib/datadog/kit/tracing/method_tracer.rb +135 -0
- data/lib/datadog/kit.rb +1 -1
- data/lib/datadog/open_feature/component.rb +62 -13
- data/lib/datadog/open_feature/configuration.rb +24 -1
- data/lib/datadog/open_feature/evaluation_engine.rb +9 -9
- 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 +7 -7
- 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_metrics_hook.rb +51 -0
- 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 +149 -0
- 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 +106 -21
- data/lib/datadog/open_feature/remote.rb +3 -3
- data/lib/datadog/open_feature/resolution_details.rb +4 -2
- data/lib/datadog/open_feature/transport.rb +73 -22
- 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 +95 -28
- data/lib/datadog/opentelemetry/ext.rb +9 -0
- data/lib/datadog/opentelemetry/logs.rb +98 -0
- data/lib/datadog/opentelemetry/metrics.rb +17 -44
- data/lib/datadog/opentelemetry/sdk/configurator.rb +46 -6
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +30 -0
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +9 -16
- data/lib/datadog/opentelemetry/sdk/propagator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +18 -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 +53 -0
- data/lib/datadog/opentelemetry/trace.rb +1 -1
- data/lib/datadog/opentelemetry.rb +8 -7
- data/lib/datadog/profiling/collectors/code_provenance.rb +36 -11
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +50 -3
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +12 -4
- data/lib/datadog/profiling/collectors/info.rb +17 -4
- data/lib/datadog/profiling/collectors/thread_context.rb +16 -18
- data/lib/datadog/profiling/component.rb +62 -33
- data/lib/datadog/profiling/exporter.rb +38 -13
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +6 -5
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +21 -12
- data/lib/datadog/profiling/http_transport.rb +18 -8
- data/lib/datadog/profiling/load_native_extension.rb +2 -2
- data/lib/datadog/profiling/profiler.rb +28 -13
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/sequence_tracker.rb +1 -1
- data/lib/datadog/profiling/stack_recorder.rb +0 -8
- data/lib/datadog/profiling/tag_builder.rb +19 -19
- data/lib/datadog/profiling/tasks/exec.rb +9 -4
- data/lib/datadog/profiling/tasks/help.rb +1 -0
- data/lib/datadog/profiling/tasks/setup.rb +2 -2
- data/lib/datadog/profiling.rb +32 -29
- data/lib/datadog/ruby_version.rb +25 -0
- data/lib/datadog/single_step_instrument.rb +2 -2
- data/lib/datadog/symbol_database/component.rb +734 -0
- data/lib/datadog/symbol_database/configuration.rb +73 -0
- data/lib/datadog/symbol_database/extensions.rb +19 -0
- data/lib/datadog/symbol_database/extractor.rb +1110 -0
- data/lib/datadog/symbol_database/file_hash.rb +48 -0
- data/lib/datadog/symbol_database/logger.rb +43 -0
- data/lib/datadog/symbol_database/remote.rb +195 -0
- data/lib/datadog/symbol_database/scope.rb +102 -0
- data/lib/datadog/symbol_database/scope_batcher.rb +292 -0
- data/lib/datadog/symbol_database/service_version.rb +66 -0
- data/lib/datadog/symbol_database/symbol.rb +69 -0
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
- data/lib/datadog/symbol_database/transport/http.rb +45 -0
- data/lib/datadog/symbol_database/transport.rb +54 -0
- data/lib/datadog/symbol_database/uploader.rb +230 -0
- data/lib/datadog/symbol_database.rb +71 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +8 -8
- data/lib/datadog/tracing/client_ip.rb +4 -4
- data/lib/datadog/tracing/component.rb +39 -7
- 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 +52 -38
- data/lib/datadog/tracing/configuration/http.rb +2 -2
- data/lib/datadog/tracing/configuration/settings.rb +51 -17
- 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 +9 -6
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +8 -5
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +9 -6
- 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 +8 -5
- 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 +7 -4
- 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 +15 -12
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +31 -3
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +5 -3
- 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 +10 -7
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +11 -8
- 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 +62 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +10 -7
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +10 -7
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +10 -7
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +10 -7
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +10 -7
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +10 -7
- 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 +7 -7
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +8 -9
- 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 +9 -9
- 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 +9 -9
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +11 -14
- 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 +4 -4
- data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +14 -17
- data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +5 -8
- 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 +3 -3
- 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 +7 -11
- 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/component.rb +1 -1
- 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 +20 -5
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +14 -4
- 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 +6 -10
- data/lib/datadog/tracing/contrib/dalli/integration.rb +10 -7
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +3 -3
- 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 +7 -5
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
- 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 +12 -16
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +4 -4
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +9 -13
- data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -12
- data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +4 -11
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/excon/ext.rb +11 -10
- data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/excon/middleware.rb +10 -14
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/extensions.rb +11 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -10
- data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +10 -14
- 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 +30 -27
- data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +15 -10
- data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/grape/patcher.rb +10 -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 +38 -37
- data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +7 -4
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -15
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +11 -15
- 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 +11 -9
- data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -13
- 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 +7 -6
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +4 -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 +4 -3
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +6 -4
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +10 -8
- data/lib/datadog/tracing/contrib/http/ext.rb +11 -10
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +10 -14
- data/lib/datadog/tracing/contrib/http/integration.rb +7 -9
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/http.rb +7 -6
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -10
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +12 -12
- 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 +9 -6
- data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -10
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +10 -14
- 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 +4 -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 +4 -4
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +6 -6
- 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 +7 -3
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +11 -9
- data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -12
- 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 +9 -9
- data/lib/datadog/tracing/contrib/karafka.rb +7 -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 +9 -9
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -21
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +9 -3
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +9 -12
- 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 +15 -19
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- 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 +9 -3
- data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +21 -24
- 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 +8 -10
- 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 +26 -13
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +7 -3
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +29 -5
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +7 -4
- data/lib/datadog/tracing/contrib/que/ext.rb +19 -18
- 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 +3 -2
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -9
- 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 +14 -4
- data/lib/datadog/tracing/contrib/rack/ext.rb +43 -15
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +24 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +28 -25
- data/lib/datadog/tracing/contrib/rack/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -4
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +27 -13
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +124 -6
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +8 -5
- data/lib/datadog/tracing/contrib/rails/ext.rb +15 -14
- 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/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -9
- data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
- data/lib/datadog/tracing/contrib/rails/runner.rb +4 -2
- 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 +9 -7
- 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 +40 -6
- data/lib/datadog/tracing/contrib/redis/tags.rb +6 -11
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +16 -8
- data/lib/datadog/tracing/contrib/registerable.rb +11 -0
- 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 +6 -5
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +7 -4
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -9
- 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 +6 -10
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/roda/ext.rb +6 -5
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +8 -5
- 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 +7 -10
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +6 -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 +116 -16
- 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 +3 -2
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -8
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +12 -10
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -29
- 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_internal_tracer/heartbeat.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +15 -14
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +10 -10
- data/lib/datadog/tracing/contrib/sidekiq.rb +7 -6
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +8 -4
- data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -16
- 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 +11 -10
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +9 -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 +19 -8
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -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 +4 -0
- 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 +4 -4
- 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 +5 -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 +9 -3
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +10 -12
- 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.rb → hash_formatter.rb} +3 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +10 -10
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +11 -9
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -3
- 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 +7 -6
- data/lib/datadog/tracing/contrib.rb +62 -54
- data/lib/datadog/tracing/correlation.rb +12 -12
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +14 -12
- 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 +82 -28
- data/lib/datadog/tracing/distributed/datadog.rb +32 -30
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +4 -17
- 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 +43 -11
- data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +108 -85
- data/lib/datadog/tracing/event.rb +2 -2
- 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 +79 -65
- 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 +5 -5
- data/lib/datadog/tracing/metadata.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
- data/lib/datadog/tracing/pipeline.rb +3 -3
- data/lib/datadog/tracing/remote.rb +48 -10
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +9 -7
- data/lib/datadog/tracing/sampling/matcher.rb +4 -4
- data/lib/datadog/tracing/sampling/priority_sampler.rb +17 -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 +5 -5
- data/lib/datadog/tracing/sampling/rule_sampler.rb +66 -37
- 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 +10 -10
- data/lib/datadog/tracing/span.rb +9 -9
- data/lib/datadog/tracing/span_event.rb +5 -5
- data/lib/datadog/tracing/span_operation.rb +39 -26
- data/lib/datadog/tracing/sync_writer.rb +12 -8
- data/lib/datadog/tracing/trace_digest.rb +7 -0
- data/lib/datadog/tracing/trace_operation.rb +90 -21
- data/lib/datadog/tracing/trace_segment.rb +10 -10
- data/lib/datadog/tracing/tracer.rb +63 -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/traces.rb +8 -8
- data/lib/datadog/tracing/transport/http.rb +10 -10
- data/lib/datadog/tracing/transport/io/client.rb +8 -11
- data/lib/datadog/tracing/transport/io/response.rb +1 -1
- data/lib/datadog/tracing/transport/io/traces.rb +33 -39
- 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 +387 -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 +20 -9
- data/lib/datadog/tracing/transport/traces.rb +13 -19
- data/lib/datadog/tracing/utils.rb +2 -2
- data/lib/datadog/tracing/workers.rb +4 -3
- data/lib/datadog/tracing/writer.rb +22 -10
- data/lib/datadog/tracing.rb +3 -3
- data/lib/datadog/version.rb +4 -4
- data/lib/datadog.rb +15 -11
- metadata +91 -23
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
- data/lib/datadog/ai_guard/configuration/settings.rb +0 -110
- data/lib/datadog/appsec/configuration/settings.rb +0 -409
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
- data/lib/datadog/core/utils/base64.rb +0 -22
- data/lib/datadog/data_streams/configuration/settings.rb +0 -49
- data/lib/datadog/di/configuration/settings.rb +0 -234
- data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -204
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
3
|
+
require_relative "../../core/chunker"
|
|
4
|
+
require_relative "../../core/encoding"
|
|
5
|
+
require_relative "../../core/tag_builder"
|
|
6
|
+
require_relative "../../core/transport/parcel"
|
|
7
|
+
require_relative "../../core/transport/request"
|
|
8
|
+
require_relative "../../core/transport/transport"
|
|
9
|
+
require_relative "../error"
|
|
10
|
+
require_relative "../fatal_exceptions"
|
|
11
|
+
require_relative "http/input"
|
|
11
12
|
|
|
12
13
|
module Datadog
|
|
13
14
|
module DI
|
|
14
15
|
module Transport
|
|
15
16
|
module Input
|
|
16
|
-
class EncodedParcel
|
|
17
|
-
include Datadog::Core::Transport::Parcel
|
|
18
|
-
end
|
|
19
|
-
|
|
20
17
|
class Request < Datadog::Core::Transport::Request
|
|
21
18
|
attr_reader :serialized_tags
|
|
22
19
|
|
|
@@ -28,6 +25,13 @@ module Datadog
|
|
|
28
25
|
end
|
|
29
26
|
|
|
30
27
|
class Transport < Core::Transport::Transport
|
|
28
|
+
attr_reader :telemetry
|
|
29
|
+
|
|
30
|
+
def initialize(apis, default_api, logger:, telemetry: nil)
|
|
31
|
+
super(apis, default_api, logger: logger)
|
|
32
|
+
@telemetry = telemetry
|
|
33
|
+
end
|
|
34
|
+
|
|
31
35
|
# The limit on an individual snapshot payload, aka "log line",
|
|
32
36
|
# is 1 MB.
|
|
33
37
|
#
|
|
@@ -47,23 +51,54 @@ module Datadog
|
|
|
47
51
|
# max chunk size, it will still get sent out.
|
|
48
52
|
DEFAULT_CHUNK_SIZE = 2 * 1024 * 1024
|
|
49
53
|
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
# Sends snapshot payloads to the agent.
|
|
55
|
+
#
|
|
56
|
+
# Each snapshot is serialized individually. If serialization fails
|
|
57
|
+
# for a snapshot (e.g., due to binary data from custom serializers),
|
|
58
|
+
# the on_serialization_error callback is invoked with the probe ID
|
|
59
|
+
# and exception, allowing the caller to disable the affected probe.
|
|
60
|
+
# Successfully serialized snapshots are still sent.
|
|
61
|
+
#
|
|
62
|
+
# Large snapshots (> 1MB) are dropped. Batches are split into chunks
|
|
63
|
+
# of ~2MB each to avoid large network requests.
|
|
64
|
+
#
|
|
65
|
+
# @param payload [Array<Hash>] Array of snapshot payloads
|
|
66
|
+
# @param tags [Hash] Tags to send with the snapshots
|
|
67
|
+
# @param on_serialization_error [Proc] Called with (probe_id, exception)
|
|
68
|
+
# when a snapshot fails to serialize.
|
|
69
|
+
def send_input(payload, tags, on_serialization_error:)
|
|
52
70
|
serialized_tags = Core::TagBuilder.serialize_tags(tags)
|
|
53
71
|
|
|
54
|
-
|
|
55
|
-
encoded_snapshots =
|
|
72
|
+
# Serialize each snapshot individually to isolate failures
|
|
73
|
+
encoded_snapshots = []
|
|
74
|
+
payload.each do |snapshot|
|
|
56
75
|
encoded = encoder.encode(snapshot)
|
|
57
76
|
if encoded.length > MAX_SERIALIZED_SNAPSHOT_SIZE
|
|
58
|
-
# Drop the snapshot.
|
|
59
|
-
# TODO report via telemetry metric?
|
|
60
77
|
logger.debug { "di: dropping too big snapshot" }
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
78
|
+
next
|
|
79
|
+
end
|
|
80
|
+
encoded_snapshots << encoded
|
|
81
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
82
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
83
|
+
# Serialization failed for this snapshot - report via callback
|
|
84
|
+
# This catches JSON::GeneratorError, Encoding errors, TypeError, etc.
|
|
85
|
+
probe_id = snapshot.dig(:debugger, :snapshot, :probe, :id)
|
|
86
|
+
logger.debug { "di: JSON encoding failed for snapshot (probe #{probe_id}): #{exc.class}: #{exc.message}" }
|
|
87
|
+
telemetry&.report(exc, description: "JSON encoding failed for snapshot")
|
|
88
|
+
|
|
89
|
+
if probe_id
|
|
90
|
+
begin
|
|
91
|
+
on_serialization_error.call(probe_id, exc)
|
|
92
|
+
rescue Exception => callback_exc # standard:disable Lint/RescueException
|
|
93
|
+
Datadog::DI.reraise_if_fatal(callback_exc)
|
|
94
|
+
logger.debug { "di: error in serialization error callback for probe #{probe_id}: #{callback_exc.class}: #{callback_exc.message}" }
|
|
95
|
+
telemetry&.report(callback_exc, description: "Error in serialization error callback")
|
|
96
|
+
end
|
|
64
97
|
end
|
|
65
98
|
end
|
|
66
99
|
|
|
100
|
+
return payload if encoded_snapshots.empty?
|
|
101
|
+
|
|
67
102
|
Datadog::Core::Chunker.chunk_by_size(
|
|
68
103
|
encoded_snapshots, DEFAULT_CHUNK_SIZE,
|
|
69
104
|
).each do |chunk|
|
|
@@ -77,8 +112,10 @@ module Datadog
|
|
|
77
112
|
# subsequent chunks are attempted to be sent.
|
|
78
113
|
begin
|
|
79
114
|
send_input_chunk(chunked_payload, serialized_tags)
|
|
80
|
-
rescue => exc
|
|
81
|
-
|
|
115
|
+
rescue Exception => exc # standard:disable Lint/RescueException
|
|
116
|
+
Datadog::DI.reraise_if_fatal(exc)
|
|
117
|
+
logger.debug { "di: failed to send snapshot chunk: #{exc.class}: #{exc.message} (at #{exc.backtrace&.first})" }
|
|
118
|
+
telemetry&.report(exc, description: "Error sending snapshot chunk")
|
|
82
119
|
end
|
|
83
120
|
end
|
|
84
121
|
|
|
@@ -86,7 +123,7 @@ module Datadog
|
|
|
86
123
|
end
|
|
87
124
|
|
|
88
125
|
def send_input_chunk(chunked_payload, serialized_tags)
|
|
89
|
-
parcel =
|
|
126
|
+
parcel = Core::Transport::Parcel.new(chunked_payload, content_type: encoder.content_type)
|
|
90
127
|
request = Request.new(parcel, serialized_tags)
|
|
91
128
|
|
|
92
129
|
client.send_request(:input, request).tap do |response|
|
|
@@ -96,6 +133,10 @@ module Datadog
|
|
|
96
133
|
end
|
|
97
134
|
end
|
|
98
135
|
end
|
|
136
|
+
|
|
137
|
+
def encoder
|
|
138
|
+
Core::Encoding::JSONEncoder
|
|
139
|
+
end
|
|
99
140
|
end
|
|
100
141
|
end
|
|
101
142
|
end
|
data/lib/datadog/di/utils.rb
CHANGED
|
@@ -82,15 +82,31 @@ module Datadog
|
|
|
82
82
|
# we just strip leading directory components from the "probe path"
|
|
83
83
|
# until we get a match via a "suffix of the suffix".
|
|
84
84
|
|
|
85
|
+
# Returns +path+ with Windows-style backslash separators translated to
|
|
86
|
+
# forward slashes (DEBUG-5111). Used to normalize probe source paths
|
|
87
|
+
# that originate from IDE tooling running on Windows.
|
|
88
|
+
module_function def normalize_windows_separators(path)
|
|
89
|
+
path.tr("\\", "/")
|
|
90
|
+
end
|
|
91
|
+
|
|
85
92
|
# Returns whether the provided +path+ matches the user-designated
|
|
86
93
|
# file suffix (of a line probe).
|
|
87
94
|
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
95
|
+
# Backslash separators in +suffix+ are translated to forward slashes
|
|
96
|
+
# (DEBUG-5111) so paths typed by IDE tooling on Windows can match.
|
|
97
|
+
# Case-insensitive matching (DEBUG-5107) is opt-in via
|
|
98
|
+
# +case_insensitive: true+; callers that orchestrate matching against a
|
|
99
|
+
# set of known paths perform case-sensitive comparisons first and only
|
|
100
|
+
# fall back to case-insensitive when no case-sensitive match is found
|
|
101
|
+
# (see the design comment above, steps 5-8).
|
|
102
|
+
#
|
|
103
|
+
# If suffix is an absolute path (i.e., it starts with a slash, possibly
|
|
104
|
+
# after backslash normalization), the path must be identical for it to
|
|
105
|
+
# match.
|
|
90
106
|
#
|
|
91
107
|
# If suffix is not an absolute path, the path matches if its suffix is
|
|
92
108
|
# the provided suffix, at a path component boundary.
|
|
93
|
-
module_function def path_matches_suffix?(path, suffix)
|
|
109
|
+
module_function def path_matches_suffix?(path, suffix, case_insensitive: false)
|
|
94
110
|
if path.nil?
|
|
95
111
|
raise ArgumentError, "nil path passed"
|
|
96
112
|
end
|
|
@@ -98,18 +114,19 @@ module Datadog
|
|
|
98
114
|
raise ArgumentError, "nil suffix passed"
|
|
99
115
|
end
|
|
100
116
|
|
|
101
|
-
|
|
117
|
+
suffix = normalize_windows_separators(suffix)
|
|
118
|
+
if case_insensitive
|
|
119
|
+
path = path.downcase
|
|
120
|
+
suffix = suffix.downcase
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
if suffix.start_with?("/")
|
|
102
124
|
path == suffix
|
|
103
125
|
else
|
|
104
126
|
# Exact match is not possible here, meaning any matching path
|
|
105
127
|
# has to be longer than the suffix. Require full component matches,
|
|
106
128
|
# meaning either the first character of the suffix is a slash
|
|
107
129
|
# or the previous character in the path is a slash.
|
|
108
|
-
# For now only check for forward slashes for Unix-like OSes;
|
|
109
|
-
# backslash is a legitimate character of a file name in Unix
|
|
110
|
-
# therefore simply permitting forward or back slash is not
|
|
111
|
-
# sufficient, we need to perform an OS check to know which
|
|
112
|
-
# path separator to use.
|
|
113
130
|
!!
|
|
114
131
|
if path.length > suffix.length && path.end_with?(suffix)
|
|
115
132
|
previous_char = path[path.length - suffix.length - 1]
|
|
@@ -125,15 +142,26 @@ module Datadog
|
|
|
125
142
|
# +spec+. Attempts all of the fuzzy matches by stripping directories
|
|
126
143
|
# from the front of +spec+. Does not consider othr known paths to
|
|
127
144
|
# identify the case of (potentially) multiple matching paths for +spec+.
|
|
145
|
+
#
|
|
146
|
+
# Matching is attempted case-sensitively first (steps 5-6 in the design
|
|
147
|
+
# comment above) and only falls back to case-insensitive (steps 7-8)
|
|
148
|
+
# when no case-sensitive match is found.
|
|
128
149
|
module_function def path_can_match_spec?(path, spec)
|
|
129
|
-
|
|
150
|
+
# Normalize Windows-style backslash separators (DEBUG-5111) so the
|
|
151
|
+
# suffix-shortening loop's "/+" regex can strip leading components.
|
|
152
|
+
spec = normalize_windows_separators(spec)
|
|
130
153
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return
|
|
134
|
-
|
|
135
|
-
|
|
154
|
+
[false, true].each do |case_insensitive|
|
|
155
|
+
working_spec = spec.dup
|
|
156
|
+
return true if path_matches_suffix?(path, working_spec, case_insensitive: case_insensitive)
|
|
157
|
+
|
|
158
|
+
loop do
|
|
159
|
+
break unless working_spec.include?("/")
|
|
160
|
+
working_spec.sub!(%r{.*/+}, "")
|
|
161
|
+
return true if path_matches_suffix?(path, working_spec, case_insensitive: case_insensitive)
|
|
162
|
+
end
|
|
136
163
|
end
|
|
164
|
+
false
|
|
137
165
|
end
|
|
138
166
|
end
|
|
139
167
|
end
|
data/lib/datadog/di.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
3
|
+
require_relative "di/configuration"
|
|
4
|
+
require_relative "di/extensions"
|
|
5
|
+
require_relative "di/remote"
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Namespace for Datadog dynamic instrumentation.
|
|
@@ -11,11 +11,155 @@ module Datadog
|
|
|
11
11
|
module DI
|
|
12
12
|
INSTRUMENTED_COUNTERS_LOCK = Mutex.new
|
|
13
13
|
|
|
14
|
+
# Captured at load time from Exception itself (not a subclass).
|
|
15
|
+
# Used to bypass subclass overrides of backtrace_locations.
|
|
16
|
+
#
|
|
17
|
+
# This does NOT protect against monkeypatching Exception#backtrace_locations
|
|
18
|
+
# before dd-trace-rb loads — in that case we'd capture the monkeypatch.
|
|
19
|
+
# The practical threat model is customer subclasses overriding the method:
|
|
20
|
+
#
|
|
21
|
+
# class MyError < StandardError
|
|
22
|
+
# def backtrace_locations; []; end
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# The UnboundMethod bypasses subclass overrides: bind(exception).call
|
|
26
|
+
# always dispatches to the original Exception implementation.
|
|
27
|
+
#
|
|
28
|
+
# Note: if the subclass overrides #backtrace (not #backtrace_locations),
|
|
29
|
+
# MRI's setup_exception skips storing the VM backtrace entirely — both
|
|
30
|
+
# @bt and @bt_locations stay nil. In that case this UnboundMethod also
|
|
31
|
+
# returns nil. See EXCEPTION_BACKTRACE comment for details.
|
|
32
|
+
EXCEPTION_BACKTRACE_LOCATIONS = Exception.instance_method(:backtrace_locations)
|
|
33
|
+
|
|
34
|
+
# Same UnboundMethod trick for Exception#backtrace (Array<String>).
|
|
35
|
+
# Used as a fallback when backtrace_locations returns nil — which happens
|
|
36
|
+
# when someone calls Exception#set_backtrace with an Array<String>.
|
|
37
|
+
#
|
|
38
|
+
# set_backtrace accepts Array<String> or nil. When called with strings,
|
|
39
|
+
# it replaces the VM-level backtrace: backtrace returns the new strings,
|
|
40
|
+
# but backtrace_locations returns nil because the VM cannot reconstruct
|
|
41
|
+
# Location objects from formatted strings. This occurs in exception
|
|
42
|
+
# wrapping patterns where a library catches an exception, creates a new
|
|
43
|
+
# one, and copies the original's string backtrace onto it via
|
|
44
|
+
# set_backtrace before re-raising.
|
|
45
|
+
#
|
|
46
|
+
# Ruby 3.4+ also allows set_backtrace(Array<Location>), which preserves
|
|
47
|
+
# backtrace_locations — but older Rubies and most existing code use
|
|
48
|
+
# the string form.
|
|
49
|
+
#
|
|
50
|
+
# Like EXCEPTION_BACKTRACE_LOCATIONS, this UnboundMethod bypasses
|
|
51
|
+
# subclass overrides of #backtrace: bind(exception).call dispatches
|
|
52
|
+
# to Exception#backtrace regardless of what the subclass defines.
|
|
53
|
+
#
|
|
54
|
+
# However, when a subclass overrides #backtrace, MRI's setup_exception
|
|
55
|
+
# (eval.c) calls the override via rb_get_backtrace during raise. If it
|
|
56
|
+
# gets a non-nil result, it skips storing the VM backtrace in @bt and
|
|
57
|
+
# @bt_locations entirely. So the UnboundMethod bypasses the override
|
|
58
|
+
# at dispatch but reads nil from @bt because the data was never stored.
|
|
59
|
+
#
|
|
60
|
+
# This constant is used as a fallback when backtrace_locations returns
|
|
61
|
+
# nil. In the common set_backtrace-with-strings case, no subclass
|
|
62
|
+
# override is involved and the fallback works. The only unrecoverable
|
|
63
|
+
# case: a subclass overrides #backtrace, the exception is raised
|
|
64
|
+
# normally, and set_backtrace is never called. Both @bt and
|
|
65
|
+
# @bt_locations are nil — DI reports an empty stacktrace (type and
|
|
66
|
+
# message are still reported).
|
|
67
|
+
EXCEPTION_BACKTRACE = Exception.instance_method(:backtrace)
|
|
68
|
+
|
|
14
69
|
class << self
|
|
15
70
|
def enabled?
|
|
16
71
|
Datadog.configuration.dynamic_instrumentation.enabled
|
|
17
72
|
end
|
|
18
73
|
|
|
74
|
+
# Returns a human-readable reason why dynamic instrumentation cannot run
|
|
75
|
+
# under the given settings, or nil if all build-time preconditions are met.
|
|
76
|
+
#
|
|
77
|
+
# Single source of truth for the preconditions checked in
|
|
78
|
+
# {Component.build} and reported back by {Remote.handle_rc_enablement}
|
|
79
|
+
# when an implicit enablement signal arrives but the component was not
|
|
80
|
+
# built at startup. Checks are ordered from most-actionable to
|
|
81
|
+
# platform-constraint so the most useful reason wins.
|
|
82
|
+
#
|
|
83
|
+
# The settings argument is optional so the helper can be called from
|
|
84
|
+
# contexts that don't have settings in scope (e.g. the RC handler).
|
|
85
|
+
#
|
|
86
|
+
# @param settings [Datadog::Core::Configuration::Settings]
|
|
87
|
+
# @return [String, nil] reason string or nil when supported
|
|
88
|
+
def unsupported_reason(settings = Datadog.configuration)
|
|
89
|
+
# Symmetric to the respond_to?(:remote) guard below: in unusual
|
|
90
|
+
# configurations (test doubles, partial Settings) the DI namespace
|
|
91
|
+
# may be absent. Returning a reason here lets callers — most
|
|
92
|
+
# importantly Remote.handle_rc_enablement — emit the customer-facing
|
|
93
|
+
# warn instead of raising NoMethodError on the unguarded access at
|
|
94
|
+
# line 92 (`settings.dynamic_instrumentation.internal.development`).
|
|
95
|
+
unless settings.respond_to?(:dynamic_instrumentation)
|
|
96
|
+
return "dynamic instrumentation settings are not available"
|
|
97
|
+
end
|
|
98
|
+
unless settings.respond_to?(:remote) && settings.remote.enabled
|
|
99
|
+
return "Remote Configuration is not enabled. See https://docs.datadoghq.com/agent/remote_config"
|
|
100
|
+
end
|
|
101
|
+
unless settings.dynamic_instrumentation.internal.development
|
|
102
|
+
if Datadog::Core::Environment::Execution.development?
|
|
103
|
+
return "development environment detected"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
if (reason = unsupported_platform_reason)
|
|
107
|
+
return reason
|
|
108
|
+
end
|
|
109
|
+
unless respond_to?(:exception_message)
|
|
110
|
+
return "C extension is not available"
|
|
111
|
+
end
|
|
112
|
+
nil
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Whether the current Ruby runtime can run dynamic instrumentation:
|
|
116
|
+
# MRI (CRuby) on Ruby 2.6 or later.
|
|
117
|
+
#
|
|
118
|
+
# @return [Boolean]
|
|
119
|
+
def supported_runtime?
|
|
120
|
+
unsupported_platform_reason.nil?
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Reason the current Ruby runtime cannot run dynamic instrumentation, or
|
|
124
|
+
# nil when the platform is supported. Single source of truth for the
|
|
125
|
+
# minimum-runtime definition, shared by {unsupported_reason} (which layers
|
|
126
|
+
# the settings and C-extension checks on top) and {supported_runtime?}.
|
|
127
|
+
#
|
|
128
|
+
# @return [String, nil]
|
|
129
|
+
private def unsupported_platform_reason
|
|
130
|
+
if RUBY_ENGINE != "ruby"
|
|
131
|
+
"MRI is required, but running on #{RUBY_ENGINE}"
|
|
132
|
+
elsif Datadog::RubyVersion.is?("< 2.6")
|
|
133
|
+
"Ruby 2.6+ is required, but running on #{RUBY_VERSION}"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Returns iseqs that correspond to loaded files (filtering out eval'd code).
|
|
138
|
+
#
|
|
139
|
+
# There are several types of iseqs returned by +all_iseqs+:
|
|
140
|
+
#
|
|
141
|
+
# 1. Eval'd code — these have a nil +absolute_path+ and are filtered out here.
|
|
142
|
+
# 2. Whole-file iseqs — have +absolute_path+ set and +first_lineno+ of 0.
|
|
143
|
+
# Only available for a subset of loaded files (the full-file iseq may be
|
|
144
|
+
# garbage collected after loading completes). Easiest to work with since
|
|
145
|
+
# we just match the file path to the probe specification.
|
|
146
|
+
# 3. Per-method iseqs — have +absolute_path+ set and +first_lineno+ > 0.
|
|
147
|
+
# Often the only iseqs available for third-party code. Require identifying
|
|
148
|
+
# the correct iseq containing the target line, which may involve examining
|
|
149
|
+
# the iseq's +trace_points+ since +define_method+ can create nested,
|
|
150
|
+
# non-contiguous line ranges.
|
|
151
|
+
#
|
|
152
|
+
# Note: the same line of code can appear in multiple iseqs (e.g. when
|
|
153
|
+
# +define_method+ is used inside a method). DI treats this as an error
|
|
154
|
+
# since a probe must resolve to exactly one code location.
|
|
155
|
+
#
|
|
156
|
+
# @return [Array<RubyVM::InstructionSequence>] iseqs with non-nil +absolute_path+
|
|
157
|
+
def file_iseqs
|
|
158
|
+
all_iseqs.select do |iseq|
|
|
159
|
+
iseq.absolute_path
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
19
163
|
# This method is called from DI Remote handler to issue DI operations
|
|
20
164
|
# to the probe manager (add or remove probes).
|
|
21
165
|
#
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "ext"
|
|
4
|
+
require_relative "../ruby_version"
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module ErrorTracking
|
|
@@ -52,7 +53,7 @@ module Datadog
|
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
55
|
|
|
55
|
-
if
|
|
56
|
+
if RubyVersion.is?(">= #{Ext::RUBY_VERSION_WITH_RESCUE_EVENT}")
|
|
56
57
|
# Starting from ruby3.3, as we are listening to :rescue event,
|
|
57
58
|
# we just want to remove the span event if the error was
|
|
58
59
|
# previously handled
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
3
|
+
require "set"
|
|
4
|
+
require_relative "collector"
|
|
5
|
+
require_relative "filters"
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module ErrorTracking
|
|
@@ -30,10 +30,10 @@ module Datadog
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def environment_supported?(logger)
|
|
33
|
-
if RUBY_ENGINE !=
|
|
33
|
+
if RUBY_ENGINE != "ruby"
|
|
34
34
|
logger.warn("error tracking: cannot enable error tracking: MRI is required, but running on #{RUBY_ENGINE}")
|
|
35
35
|
false
|
|
36
|
-
elsif
|
|
36
|
+
elsif RubyVersion.is?("< 2.7")
|
|
37
37
|
logger.warn(
|
|
38
38
|
"error tracking: cannot enable error tracking: Ruby 2.7+ is required, but running
|
|
39
39
|
on #{RUBY_VERSION}"
|
|
@@ -63,7 +63,7 @@ module Datadog
|
|
|
63
63
|
# Before Ruby3.3 the TracePoint listen for :raise events.
|
|
64
64
|
# If an error is not handled, we will delete the according
|
|
65
65
|
# span event in the collector.
|
|
66
|
-
event = (
|
|
66
|
+
event = RubyVersion.is?(">= 3.3") ? :rescue : :raise
|
|
67
67
|
|
|
68
68
|
# This TracePoint is in charge of capturing the handled exceptions
|
|
69
69
|
# and of adding the corresponding span events to the collector
|
|
@@ -113,9 +113,9 @@ module Datadog
|
|
|
113
113
|
# - otherwise we just check if the name provided is in the path and is
|
|
114
114
|
# either the name of a folder or of a ruby file.
|
|
115
115
|
regex =
|
|
116
|
-
if file_to_instr.start_with?(
|
|
116
|
+
if file_to_instr.start_with?("/")
|
|
117
117
|
%r{\A#{Regexp.escape(file_to_instr)}(?:/|\.rb\z|\z)}
|
|
118
|
-
elsif file_to_instr.start_with?(
|
|
118
|
+
elsif file_to_instr.start_with?("./")
|
|
119
119
|
abs_path = File.expand_path(file_to_instr)
|
|
120
120
|
%r{\A#{Regexp.escape(abs_path)}(?:/|\.rb\z|\z)}
|
|
121
121
|
else
|
|
@@ -152,11 +152,11 @@ module Datadog
|
|
|
152
152
|
def generate_span_event(exception)
|
|
153
153
|
formatted_exception = Datadog::Core::Error.build_from(exception)
|
|
154
154
|
attributes = {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
"exception.type" => formatted_exception.type,
|
|
156
|
+
"exception.message" => formatted_exception.message,
|
|
157
|
+
"exception.stacktrace" => formatted_exception.backtrace,
|
|
158
158
|
}
|
|
159
|
-
Datadog::Tracing::SpanEvent.new(
|
|
159
|
+
Datadog::Tracing::SpanEvent.new("exception", attributes: attributes)
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
def add_instrumented_file(file_path)
|
|
@@ -1,11 +1,64 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "ext"
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module ErrorTracking
|
|
5
7
|
# Configuration for ErrorTracking
|
|
6
8
|
module Configuration
|
|
9
|
+
# Settings
|
|
10
|
+
module Settings
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base = base.singleton_class unless base.is_a?(Class)
|
|
13
|
+
add_settings!(base)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.add_settings!(base)
|
|
17
|
+
base.class_eval do
|
|
18
|
+
# Error Tracking specific configurations.
|
|
19
|
+
# @public_api
|
|
20
|
+
settings :error_tracking do
|
|
21
|
+
# Enable automatic reporting of handled errors and defines the scope
|
|
22
|
+
# for which to report errors: user code, gems, or both. Possible
|
|
23
|
+
# values are: all | user | third_party.
|
|
24
|
+
#
|
|
25
|
+
# @default 'DD_ERROR_TRACKING_HANDLED_ERRORS' environment variable, otherwise `nil`
|
|
26
|
+
# @return [String, nil]
|
|
27
|
+
option :handled_errors do |o|
|
|
28
|
+
o.type :string, nilable: true
|
|
29
|
+
o.default Ext::DEFAULT_HANDLED_ERRORS
|
|
30
|
+
o.env Ext::ENV_HANDLED_ERRORS
|
|
31
|
+
o.setter do |value|
|
|
32
|
+
next value if Ext::VALID_HANDLED_ERRORS.include?(value)
|
|
33
|
+
|
|
34
|
+
unless value.nil?
|
|
35
|
+
Datadog.logger.warn(
|
|
36
|
+
"Invalid handled errors scope: #{value}. " \
|
|
37
|
+
"Supported values are: #{Ext::VALID_HANDLED_ERRORS.join(" | ")}. " \
|
|
38
|
+
"Deactivating the feature."
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Ext::DEFAULT_HANDLED_ERRORS
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Enable automatic reporting of handled errors and specify what files should be
|
|
47
|
+
# instrumented. The value is a list of comma separated paths, filenames or gem names.
|
|
48
|
+
# The paths can be absolute, starting with '/' or relative to directory in which the program
|
|
49
|
+
# is launched, starting with './'.
|
|
50
|
+
#
|
|
51
|
+
# @default 'DD_ERROR_TRACKING_HANDLED_ERRORS_MODULES' environment variable, otherwise `nil`
|
|
52
|
+
# @return [String, nil]
|
|
53
|
+
option :handled_errors_include do |o|
|
|
54
|
+
o.type :array
|
|
55
|
+
o.default []
|
|
56
|
+
o.env Ext::ENV_HANDLED_ERRORS_INCLUDE
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
7
62
|
end
|
|
8
63
|
end
|
|
9
64
|
end
|
|
10
|
-
|
|
11
|
-
require_relative 'configuration/settings'
|
|
@@ -4,15 +4,15 @@ module Datadog
|
|
|
4
4
|
module ErrorTracking
|
|
5
5
|
# Error Tracking constants
|
|
6
6
|
module Ext
|
|
7
|
-
ENV_HANDLED_ERRORS =
|
|
8
|
-
ENV_HANDLED_ERRORS_INCLUDE =
|
|
9
|
-
HANDLED_ERRORS_ALL =
|
|
10
|
-
HANDLED_ERRORS_USER =
|
|
11
|
-
HANDLED_ERRORS_THIRD_PARTY =
|
|
7
|
+
ENV_HANDLED_ERRORS = "DD_ERROR_TRACKING_HANDLED_ERRORS"
|
|
8
|
+
ENV_HANDLED_ERRORS_INCLUDE = "DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE"
|
|
9
|
+
HANDLED_ERRORS_ALL = "all"
|
|
10
|
+
HANDLED_ERRORS_USER = "user"
|
|
11
|
+
HANDLED_ERRORS_THIRD_PARTY = "third_party"
|
|
12
12
|
DEFAULT_HANDLED_ERRORS = nil
|
|
13
13
|
VALID_HANDLED_ERRORS = [HANDLED_ERRORS_ALL, HANDLED_ERRORS_USER, HANDLED_ERRORS_THIRD_PARTY].freeze
|
|
14
|
-
SPAN_EVENTS_HAS_EXCEPTION =
|
|
15
|
-
RUBY_VERSION_WITH_RESCUE_EVENT =
|
|
14
|
+
SPAN_EVENTS_HAS_EXCEPTION = "_dd.span_events.has_exception"
|
|
15
|
+
RUBY_VERSION_WITH_RESCUE_EVENT = "3.3"
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -32,7 +32,7 @@ module Datadog
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def datadog_code?(file_path)
|
|
35
|
-
file_path.include?(
|
|
35
|
+
file_path.include?("lib/datadog/")
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def third_party_code?(file_path)
|
|
@@ -48,9 +48,9 @@ module Datadog
|
|
|
48
48
|
def generate_filter(to_instrument_scope, handled_errors_include = nil)
|
|
49
49
|
case to_instrument_scope
|
|
50
50
|
# If DD_ERROR_TRACKING_HANDLED_ERRORS is set
|
|
51
|
-
when
|
|
51
|
+
when "all"
|
|
52
52
|
proc { |file_path| !datadog_code?(file_path) }
|
|
53
|
-
when
|
|
53
|
+
when "user"
|
|
54
54
|
# If DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE is set
|
|
55
55
|
if handled_errors_include
|
|
56
56
|
proc { |file_path|
|
|
@@ -59,7 +59,7 @@ module Datadog
|
|
|
59
59
|
else
|
|
60
60
|
proc { |file_path| user_code?(file_path) }
|
|
61
61
|
end
|
|
62
|
-
when
|
|
62
|
+
when "third_party"
|
|
63
63
|
if handled_errors_include
|
|
64
64
|
proc { |file_path|
|
|
65
65
|
third_party_code?(file_path) || file_included?(file_path, handled_errors_include)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
3
|
+
require_relative "error_tracking/collector"
|
|
4
|
+
require_relative "error_tracking/component"
|
|
5
|
+
require_relative "error_tracking/configuration"
|
|
6
|
+
require_relative "error_tracking/ext"
|
|
7
|
+
require_relative "error_tracking/extensions"
|
|
8
|
+
require_relative "error_tracking/filters"
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
# Namespace for Datadog ErrorTracking.
|