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,15 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "date"
|
|
3
4
|
require_relative "redactor"
|
|
5
|
+
require_relative "guardrails_telemetry"
|
|
6
|
+
require_relative "../core/utils/time"
|
|
4
7
|
|
|
5
8
|
module Datadog
|
|
6
9
|
module DI
|
|
7
|
-
# Serializes captured
|
|
10
|
+
# Serializes captured snapshots to primitive types, which are subsequently
|
|
8
11
|
# serialized to JSON and sent to the backend.
|
|
9
12
|
#
|
|
10
|
-
#
|
|
11
|
-
# snapshots. It uses Redactor to determine which values are sensitive
|
|
12
|
-
# and need to be removed.
|
|
13
|
+
# Sensitive values are removed from the snapshots.
|
|
13
14
|
#
|
|
14
15
|
# Serializer normally ought not to invoke user (application) code,
|
|
15
16
|
# to guarantee predictable performance. However, objects like ActiveRecord
|
|
@@ -19,7 +20,7 @@ module Datadog
|
|
|
19
20
|
# thus they won't be captured at all). To accommodate complex objects,
|
|
20
21
|
# there is an extension mechanism implemented permitting registration
|
|
21
22
|
# of serializer callbacks for arbitrary types. Applications and libraries
|
|
22
|
-
#
|
|
23
|
+
# defining such serializer callbacks should be very careful to
|
|
23
24
|
# have predictable performance and avoid exceptions and infinite loops
|
|
24
25
|
# and other such issues.
|
|
25
26
|
#
|
|
@@ -36,20 +37,23 @@ module Datadog
|
|
|
36
37
|
# efficient but there would be additional overhead from passing this
|
|
37
38
|
# parameter all the time and the API would get more complex.
|
|
38
39
|
#
|
|
39
|
-
# Note: "self" cannot be used as a parameter name in Ruby, therefore
|
|
40
|
-
# there should never be a conflict between instance variable
|
|
41
|
-
# serialization and method parameters.
|
|
42
|
-
#
|
|
43
40
|
# @api private
|
|
44
41
|
class Serializer
|
|
45
|
-
# Exception classes that
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
42
|
+
# Exception classes that must propagate to the caller during
|
|
43
|
+
# serialization: fatal conditions (signals, interrupts, system exit).
|
|
44
|
+
# NoMemoryError is deliberately excluded (unlike
|
|
45
|
+
# DI::FATAL_EXCEPTION_CLASSES): serialization of large or deeply
|
|
46
|
+
# recursive objects can exhaust memory, and the serializer must return
|
|
47
|
+
# a safe stub rather than terminate the process.
|
|
51
48
|
SERIALIZABLE_FATAL_EXCEPTION_CLASSES = [SystemExit, SignalException].freeze
|
|
52
49
|
|
|
50
|
+
# Placeholder emitted by #serialize_value_for_message in place of a value
|
|
51
|
+
# whose identifier or type matches the redaction configuration. The
|
|
52
|
+
# message-path counterpart of the +notCapturedReason+
|
|
53
|
+
# "redactedIdent"/"redactedType" markers that #serialize_value produces
|
|
54
|
+
# on the snapshot path.
|
|
55
|
+
REDACTED_VALUE_FOR_MESSAGE = "[redacted]"
|
|
56
|
+
|
|
53
57
|
# Third-party library integration / custom serializers.
|
|
54
58
|
#
|
|
55
59
|
# Dynamic instrumentation has limited payload sizes, and for efficiency
|
|
@@ -92,20 +96,63 @@ module Datadog
|
|
|
92
96
|
# hex string, or UTF-8 with replacement characters) before returning
|
|
93
97
|
# it from the custom serializer.
|
|
94
98
|
@@flat_registry = []
|
|
95
|
-
|
|
99
|
+
# Registers a custom serializer. The block serializes each value
|
|
100
|
+
# for which +condition+ returns a truthy value.
|
|
101
|
+
#
|
|
102
|
+
# @param condition [Proc] receives the value being serialized and
|
|
103
|
+
# returns whether this serializer applies to it
|
|
104
|
+
# @param block [Proc] serializer for the values +condition+ accepts
|
|
105
|
+
# @raise [ArgumentError] if +condition+ is not a Proc or +block+ is absent
|
|
106
|
+
# @return [void]
|
|
107
|
+
def self.register(condition:, &block)
|
|
108
|
+
unless condition.is_a?(Proc)
|
|
109
|
+
raise ArgumentError, "Serializer.register condition must be a Proc, got #{condition.class}"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
unless block
|
|
113
|
+
raise ArgumentError, "Serializer.register requires a serializer block"
|
|
114
|
+
end
|
|
115
|
+
|
|
96
116
|
@@flat_registry << {condition: condition, proc: block}
|
|
117
|
+
nil
|
|
97
118
|
end
|
|
98
119
|
|
|
99
|
-
|
|
120
|
+
# Initializes the serializer.
|
|
121
|
+
#
|
|
122
|
+
# @param settings [Datadog::Core::Configuration::Settings] tracer settings
|
|
123
|
+
# @param redactor [Redactor] redactor gating captured values
|
|
124
|
+
# @param logger [DI::Logger] logger for contained serialization failures
|
|
125
|
+
# @param guardrails_telemetry [GuardrailsTelemetry] emitter for the canonical capture-incomplete metric
|
|
126
|
+
# @param telemetry [Datadog::Core::Telemetry::Component, nil] component serializer errors are reported through
|
|
127
|
+
# @return [void]
|
|
128
|
+
def initialize(settings, redactor, logger:, guardrails_telemetry:, telemetry: nil)
|
|
100
129
|
@settings = settings
|
|
101
130
|
@redactor = redactor
|
|
131
|
+
@logger = logger
|
|
132
|
+
@guardrails_telemetry = guardrails_telemetry
|
|
102
133
|
@telemetry = telemetry
|
|
103
134
|
end
|
|
104
135
|
|
|
105
136
|
attr_reader :settings
|
|
106
137
|
attr_reader :redactor
|
|
138
|
+
# The logger.
|
|
139
|
+
# @return [DI::Logger]
|
|
140
|
+
attr_reader :logger
|
|
141
|
+
# The guardrails metric emitter.
|
|
142
|
+
# @return [GuardrailsTelemetry]
|
|
143
|
+
attr_reader :guardrails_telemetry
|
|
107
144
|
attr_reader :telemetry
|
|
108
145
|
|
|
146
|
+
# Emits the canonical capture-incomplete metric for a capture limit
|
|
147
|
+
# enforced while serializing a snapshot, with the snapshot event
|
|
148
|
+
# type.
|
|
149
|
+
#
|
|
150
|
+
# @param reason [String] a GuardrailsTelemetry::Reason constant naming the enforced limit
|
|
151
|
+
# @return [void]
|
|
152
|
+
def record_capture_incomplete(reason)
|
|
153
|
+
guardrails_telemetry.capture_incomplete(reason: reason, event_type: GuardrailsTelemetry::EVENT_TYPE_SNAPSHOT)
|
|
154
|
+
end
|
|
155
|
+
|
|
109
156
|
def combine_args(args, kwargs, target_self)
|
|
110
157
|
counter = 0
|
|
111
158
|
combined = args.each_with_object({}) do |value, c|
|
|
@@ -126,31 +173,39 @@ module Datadog
|
|
|
126
173
|
# arguments to keyword arguments ("arg1", "arg2", ...) and ensure
|
|
127
174
|
# the positional arguments are listed first.
|
|
128
175
|
#
|
|
129
|
-
#
|
|
130
|
-
#
|
|
131
|
-
#
|
|
176
|
+
# @param args [Array] positional arguments passed to the probed method
|
|
177
|
+
# @param kwargs [Hash{Symbol => Object}] keyword arguments passed to the probed method
|
|
178
|
+
# @param target_self [any] receiver of the probed method invocation
|
|
179
|
+
# @param deadline [Float] absolute capture deadline in thread CPU clock seconds
|
|
180
|
+
# @return [Hash{Symbol => Hash}] serialized arguments keyed by argument name
|
|
132
181
|
def serialize_args(args, kwargs, target_self,
|
|
182
|
+
deadline:,
|
|
133
183
|
depth: settings.dynamic_instrumentation.max_capture_depth,
|
|
134
184
|
attribute_count: settings.dynamic_instrumentation.max_capture_attribute_count,
|
|
135
185
|
length: nil,
|
|
136
186
|
collection_size: nil)
|
|
137
187
|
combined = combine_args(args, kwargs, target_self)
|
|
138
188
|
serialize_vars(combined, depth: depth, attribute_count: attribute_count,
|
|
139
|
-
length: length, collection_size: collection_size)
|
|
189
|
+
length: length, collection_size: collection_size, deadline: deadline,)
|
|
140
190
|
end
|
|
141
191
|
|
|
142
192
|
# Serializes variables captured by a line probe.
|
|
143
193
|
#
|
|
144
194
|
# These are normally local variables that exist on a particular line
|
|
145
195
|
# of executed code.
|
|
196
|
+
#
|
|
197
|
+
# @param vars [Hash{Symbol => Object}] variables to serialize, keyed by variable name
|
|
198
|
+
# @param deadline [Float] absolute capture deadline in thread CPU clock seconds
|
|
199
|
+
# @return [Hash{Symbol => Hash}] serialized variables keyed by variable name
|
|
146
200
|
def serialize_vars(vars,
|
|
201
|
+
deadline:,
|
|
147
202
|
depth: settings.dynamic_instrumentation.max_capture_depth,
|
|
148
203
|
attribute_count: settings.dynamic_instrumentation.max_capture_attribute_count,
|
|
149
204
|
length: nil,
|
|
150
205
|
collection_size: nil)
|
|
151
206
|
vars.each_with_object({}) do |(k, v), agg|
|
|
152
207
|
agg[k] = serialize_value(v, name: k, depth: depth, attribute_count: attribute_count,
|
|
153
|
-
length: length, collection_size: collection_size)
|
|
208
|
+
length: length, collection_size: collection_size, deadline: deadline,)
|
|
154
209
|
end
|
|
155
210
|
end
|
|
156
211
|
|
|
@@ -166,7 +221,13 @@ module Datadog
|
|
|
166
221
|
# (integers, strings, arrays, hashes).
|
|
167
222
|
#
|
|
168
223
|
# Respects string length, collection size and traversal depth limits.
|
|
169
|
-
|
|
224
|
+
#
|
|
225
|
+
# @param value [any] value to serialize
|
|
226
|
+
# @param name [Symbol, String, nil] name the value is bound to, used for redaction
|
|
227
|
+
# @param deadline [Float] absolute capture deadline in thread CPU clock seconds
|
|
228
|
+
# @return [Hash{Symbol => Object}] serialized value; the {type:, notCapturedReason: "timeout"} stub when the deadline is exceeded
|
|
229
|
+
def serialize_value(value, deadline:,
|
|
230
|
+
name: nil,
|
|
170
231
|
depth: settings.dynamic_instrumentation.max_capture_depth,
|
|
171
232
|
attribute_count: nil,
|
|
172
233
|
length: nil,
|
|
@@ -175,6 +236,12 @@ module Datadog
|
|
|
175
236
|
attribute_count ||= settings.dynamic_instrumentation.max_capture_attribute_count
|
|
176
237
|
cls = type || value.class
|
|
177
238
|
begin
|
|
239
|
+
if deadline_exceeded?(deadline)
|
|
240
|
+
telemetry&.inc(DI::TELEMETRY_NAMESPACE, "serialized_values_skipped_by_timeout", 1)
|
|
241
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::CAPTURE_TIMEOUT)
|
|
242
|
+
return {type: class_name(cls), notCapturedReason: "timeout"}
|
|
243
|
+
end
|
|
244
|
+
|
|
178
245
|
if redactor.redact_type?(value)
|
|
179
246
|
return {type: class_name(cls), notCapturedReason: "redactedType"}
|
|
180
247
|
end
|
|
@@ -206,7 +273,7 @@ module Datadog
|
|
|
206
273
|
|
|
207
274
|
if condition_result
|
|
208
275
|
serializer_proc = entry.fetch(:proc)
|
|
209
|
-
return serializer_proc.call(self, value, name: nil, depth: depth)
|
|
276
|
+
return serializer_proc.call(self, value, name: nil, depth: depth, deadline: deadline)
|
|
210
277
|
end
|
|
211
278
|
end
|
|
212
279
|
end
|
|
@@ -220,8 +287,6 @@ module Datadog
|
|
|
220
287
|
when Integer, Float, TrueClass, FalseClass
|
|
221
288
|
serialized.update(value: value.to_s)
|
|
222
289
|
when Time
|
|
223
|
-
# This path also handles DateTime values although they do not need
|
|
224
|
-
# to be explicitly added to the case statement.
|
|
225
290
|
serialized.update(value: value.iso8601)
|
|
226
291
|
when Date
|
|
227
292
|
serialized.update(value: value.to_s)
|
|
@@ -239,27 +304,24 @@ module Datadog
|
|
|
239
304
|
end
|
|
240
305
|
|
|
241
306
|
# Handle binary strings and invalid UTF-8 by escaping to JSON-safe format.
|
|
242
|
-
# See escape_binary_string for details on the escaping format.
|
|
243
|
-
#
|
|
244
|
-
# Truncate binary data BEFORE escaping to avoid cutting mid-escape-sequence.
|
|
245
307
|
# For regular strings, the limit is applied to string length in characters.
|
|
246
308
|
length ||= settings.dynamic_instrumentation.max_capture_string_length
|
|
247
309
|
max = length
|
|
248
310
|
|
|
249
311
|
if value.encoding == Encoding::BINARY || !value.valid_encoding?
|
|
250
|
-
# Truncate binary data
|
|
312
|
+
# Truncate binary data before escaping to avoid cutting mid-escape-sequence
|
|
251
313
|
# For invalid encodings, use bytesize instead of length to avoid encoding errors
|
|
252
314
|
original_size = value.bytesize
|
|
253
315
|
if original_size > max
|
|
254
316
|
serialized.update(truncated: true, size: original_size)
|
|
317
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::STRING_LENGTH)
|
|
255
318
|
value = value.byteslice(0...max)
|
|
256
319
|
end
|
|
257
320
|
value = escape_binary_string(value) # steep:ignore ArgumentTypeMismatch
|
|
258
|
-
false # Already converted to a new string
|
|
259
321
|
else
|
|
260
|
-
# Truncate non-binary strings
|
|
261
322
|
if value.length > max
|
|
262
323
|
serialized.update(truncated: true, size: value.length)
|
|
324
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::STRING_LENGTH)
|
|
263
325
|
value = value[0...max]
|
|
264
326
|
need_dup = false
|
|
265
327
|
end
|
|
@@ -271,23 +333,32 @@ module Datadog
|
|
|
271
333
|
when Array
|
|
272
334
|
if depth <= 0
|
|
273
335
|
serialized.update(notCapturedReason: "depth")
|
|
336
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::DEPTH)
|
|
274
337
|
else
|
|
275
338
|
collection_size ||= settings.dynamic_instrumentation.max_capture_collection_size
|
|
276
339
|
max = collection_size
|
|
277
340
|
if max != 0 && value.length > max
|
|
278
341
|
serialized.update(notCapturedReason: "collectionSize", size: value.length)
|
|
342
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::COLLECTION_SIZE)
|
|
279
343
|
# same steep failure with array slices.
|
|
280
344
|
# https://github.com/soutaro/steep/issues/1219
|
|
281
345
|
value = value[0...max] || []
|
|
282
346
|
end
|
|
283
|
-
entries =
|
|
284
|
-
|
|
347
|
+
entries = []
|
|
348
|
+
value.each do |elt|
|
|
349
|
+
entry = serialize_value(elt, depth: depth - 1, length: length, collection_size: collection_size, attribute_count: attribute_count, deadline: deadline)
|
|
350
|
+
entries << entry
|
|
351
|
+
if entry[:notCapturedReason] == "timeout"
|
|
352
|
+
serialized.update(notCapturedReason: "timeout")
|
|
353
|
+
break
|
|
354
|
+
end
|
|
285
355
|
end
|
|
286
356
|
serialized.update(elements: entries)
|
|
287
357
|
end
|
|
288
358
|
when Hash
|
|
289
359
|
if depth <= 0
|
|
290
360
|
serialized.update(notCapturedReason: "depth")
|
|
361
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::DEPTH)
|
|
291
362
|
else
|
|
292
363
|
collection_size ||= settings.dynamic_instrumentation.max_capture_collection_size
|
|
293
364
|
max = collection_size
|
|
@@ -296,17 +367,28 @@ module Datadog
|
|
|
296
367
|
value.each do |k, v|
|
|
297
368
|
if max != 0 && cur >= max
|
|
298
369
|
serialized.update(notCapturedReason: "collectionSize", size: value.length)
|
|
370
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::COLLECTION_SIZE)
|
|
299
371
|
break
|
|
300
372
|
end
|
|
301
373
|
cur += 1
|
|
302
|
-
|
|
303
|
-
|
|
374
|
+
key_entry = serialize_value(k, depth: depth - 1, length: length, collection_size: collection_size, attribute_count: attribute_count, deadline: deadline)
|
|
375
|
+
if key_entry[:notCapturedReason] == "timeout"
|
|
376
|
+
serialized.update(notCapturedReason: "timeout")
|
|
377
|
+
break
|
|
378
|
+
end
|
|
379
|
+
value_entry = serialize_value(v, name: k, depth: depth - 1, length: length, collection_size: collection_size, attribute_count: attribute_count, deadline: deadline)
|
|
380
|
+
entries << [key_entry, value_entry]
|
|
381
|
+
if value_entry[:notCapturedReason] == "timeout"
|
|
382
|
+
serialized.update(notCapturedReason: "timeout")
|
|
383
|
+
break
|
|
384
|
+
end
|
|
304
385
|
end
|
|
305
386
|
serialized.update(entries: entries)
|
|
306
387
|
end
|
|
307
388
|
else
|
|
308
389
|
if depth <= 0
|
|
309
390
|
serialized.update(notCapturedReason: "depth")
|
|
391
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::DEPTH)
|
|
310
392
|
else
|
|
311
393
|
fields = {}
|
|
312
394
|
cur = 0
|
|
@@ -327,40 +409,42 @@ module Datadog
|
|
|
327
409
|
#
|
|
328
410
|
# For consistency, we should have some kind of stable order of
|
|
329
411
|
# instance variables on all supported Ruby runtimes, so that the UI
|
|
330
|
-
# stays consistent.
|
|
331
|
-
#
|
|
332
|
-
# of #instance_variables here, but if JRuby is supported in the
|
|
333
|
-
# future this may need to be addressed.
|
|
412
|
+
# stays consistent. Ruby DI does not support JRuby, so JRuby's lack
|
|
413
|
+
# of ordering of #instance_variables is not handled here.
|
|
334
414
|
ivars = value.instance_variables
|
|
335
415
|
|
|
336
416
|
ivars.each do |ivar|
|
|
337
417
|
if cur >= attribute_count
|
|
338
418
|
serialized.update(notCapturedReason: "fieldCount", fields: fields)
|
|
419
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::FIELD_COUNT)
|
|
339
420
|
break
|
|
340
421
|
end
|
|
341
422
|
cur += 1
|
|
342
|
-
|
|
423
|
+
entry = serialize_value(value.instance_variable_get(ivar), name: ivar, depth: depth - 1, length: length, collection_size: collection_size, attribute_count: attribute_count, deadline: deadline)
|
|
424
|
+
fields[ivar] = entry
|
|
425
|
+
if entry[:notCapturedReason] == "timeout"
|
|
426
|
+
serialized.update(notCapturedReason: "timeout")
|
|
427
|
+
break
|
|
428
|
+
end
|
|
343
429
|
end
|
|
344
430
|
serialized.update(fields: fields)
|
|
345
431
|
end
|
|
346
432
|
end
|
|
347
433
|
serialized
|
|
348
434
|
rescue Exception => exc # standard:disable Lint/RescueException
|
|
349
|
-
# Re-raise fatal exceptions that should not be caught
|
|
350
|
-
# (signals, interrupts, system exit)
|
|
351
435
|
raise if SERIALIZABLE_FATAL_EXCEPTION_CLASSES.any? { |klass| exc.is_a?(klass) }
|
|
352
436
|
|
|
353
|
-
# Catch all
|
|
354
|
-
#
|
|
355
|
-
#
|
|
356
|
-
|
|
357
|
-
|
|
437
|
+
# Catch all remaining exceptions: SystemStackError and NoMemoryError can
|
|
438
|
+
# occur during serialization (e.g. a custom serializer recursing
|
|
439
|
+
# infinitely) and produce the safe stub.
|
|
440
|
+
record_capture_incomplete(GuardrailsTelemetry::Reason::RUNTIME_ERROR)
|
|
441
|
+
logger.debug { "di: error serializing value of #{class_name(cls)}: #{exc.class}: #{exc.message}" }
|
|
358
442
|
telemetry&.report(exc, description: "Error serializing")
|
|
359
443
|
{type: class_name(cls), notSerializedReason: exc.to_s}
|
|
360
444
|
end
|
|
361
445
|
end
|
|
362
446
|
|
|
363
|
-
#
|
|
447
|
+
# Serializes a value for interpolation into a log-probe message.
|
|
364
448
|
# Because the output is meant to be human-readable, we cannot use
|
|
365
449
|
# the "normal" serialization format which is meant to be machine-readable.
|
|
366
450
|
# Serialize objects with depth of 1 and include the class name.
|
|
@@ -375,33 +459,43 @@ module Datadog
|
|
|
375
459
|
#
|
|
376
460
|
# We also use the Ruby-like syntax for symbols, which don't exist
|
|
377
461
|
# in other languages.
|
|
378
|
-
|
|
462
|
+
#
|
|
463
|
+
# +name+, when given, is the identifier the template expression
|
|
464
|
+
# references at its top level; a redacted identifier yields the
|
|
465
|
+
# redaction placeholder, mirroring #serialize_value on the snapshot path.
|
|
466
|
+
# Message rendering is capped by depth (1) and
|
|
467
|
+
# MAX_MESSAGE_COLLECTION_SIZE / MAX_MESSAGE_ATTRIBUTE_COUNT.
|
|
468
|
+
def serialize_value_for_message(value, depth: 1, name: nil)
|
|
379
469
|
# This method is more verbose than "normal" Ruby code to avoid
|
|
380
470
|
# array allocations.
|
|
471
|
+
|
|
472
|
+
return REDACTED_VALUE_FOR_MESSAGE if redactor.redact_type?(value)
|
|
473
|
+
return REDACTED_VALUE_FOR_MESSAGE if name && redactor.redact_identifier?(name)
|
|
474
|
+
|
|
381
475
|
case value
|
|
382
476
|
when NilClass
|
|
383
|
-
|
|
477
|
+
"nil"
|
|
384
478
|
when Integer, Float, TrueClass, FalseClass, Time, Date
|
|
385
479
|
value.to_s
|
|
386
480
|
when String
|
|
387
481
|
serialize_string_or_symbol_for_message(value)
|
|
388
482
|
when Symbol
|
|
389
|
-
|
|
483
|
+
":" + serialize_string_or_symbol_for_message(value) # steep:ignore ArgumentTypeMismatch
|
|
390
484
|
when Array
|
|
391
|
-
return
|
|
485
|
+
return "..." if depth <= 0
|
|
392
486
|
|
|
393
487
|
max = max_capture_collection_size_for_message
|
|
394
488
|
if value.length > max
|
|
395
489
|
value_ = value[0...max - 1] || []
|
|
396
|
-
value_ <<
|
|
490
|
+
value_ << "..."
|
|
397
491
|
value_ << value[-1]
|
|
398
492
|
value = value_
|
|
399
493
|
end
|
|
400
|
-
|
|
401
|
-
serialize_value_for_message(item, depth - 1)
|
|
402
|
-
end.join(
|
|
494
|
+
"[" + value.map do |item|
|
|
495
|
+
serialize_value_for_message(item, depth: depth - 1)
|
|
496
|
+
end.join(", ") + "]"
|
|
403
497
|
when Hash
|
|
404
|
-
return
|
|
498
|
+
return "..." if depth <= 0
|
|
405
499
|
|
|
406
500
|
max = max_capture_collection_size_for_message
|
|
407
501
|
keys = value.keys
|
|
@@ -413,15 +507,20 @@ module Datadog
|
|
|
413
507
|
truncated = true
|
|
414
508
|
end
|
|
415
509
|
serialized = keys.map do |key|
|
|
416
|
-
|
|
510
|
+
serialized_value = if (String === key || Symbol === key) && redactor.redact_identifier?(key)
|
|
511
|
+
REDACTED_VALUE_FOR_MESSAGE
|
|
512
|
+
else
|
|
513
|
+
serialize_value_for_message(value[key], depth: depth - 1)
|
|
514
|
+
end
|
|
515
|
+
"#{serialize_value_for_message(key, depth: depth - 1)} => #{serialized_value}"
|
|
417
516
|
end
|
|
418
517
|
if truncated
|
|
419
518
|
serialized[serialized.length] = serialized[serialized.length - 1]
|
|
420
|
-
serialized[serialized.length - 2] =
|
|
519
|
+
serialized[serialized.length - 2] = "..."
|
|
421
520
|
end
|
|
422
521
|
"{#{serialized.join(", ")}}"
|
|
423
522
|
else
|
|
424
|
-
return
|
|
523
|
+
return "..." if depth <= 0
|
|
425
524
|
|
|
426
525
|
vars = value.instance_variables
|
|
427
526
|
truncated = false
|
|
@@ -435,14 +534,19 @@ module Datadog
|
|
|
435
534
|
serialized = vars.map do |var|
|
|
436
535
|
# +var+ here is always the instance variable name which is a
|
|
437
536
|
# symbol, we do not need to run it through our serializer.
|
|
438
|
-
|
|
537
|
+
serialized_value = if redactor.redact_identifier?(var)
|
|
538
|
+
REDACTED_VALUE_FOR_MESSAGE
|
|
539
|
+
else
|
|
540
|
+
serialize_value_for_message(value.send(:instance_variable_get, var), depth: depth - 1)
|
|
541
|
+
end
|
|
542
|
+
"#{var}=#{serialized_value}"
|
|
439
543
|
end
|
|
440
544
|
if truncated
|
|
441
545
|
serialized << serialized.last
|
|
442
|
-
serialized[-2] =
|
|
546
|
+
serialized[-2] = "..."
|
|
443
547
|
end
|
|
444
548
|
serialized = if serialized.any?
|
|
445
|
-
|
|
549
|
+
" " + serialized.join(" ")
|
|
446
550
|
end
|
|
447
551
|
"#<#{class_name(value.class)}#{serialized}>"
|
|
448
552
|
end
|
|
@@ -450,13 +554,26 @@ module Datadog
|
|
|
450
554
|
raise if SERIALIZABLE_FATAL_EXCEPTION_CLASSES.any? { |klass| exc.is_a?(klass) }
|
|
451
555
|
|
|
452
556
|
telemetry&.report(exc, description: "Error serializing for message")
|
|
453
|
-
# TODO class_name
|
|
454
|
-
# Telemetry reporting could potentially also fail?
|
|
557
|
+
# TODO handle class_name raising here as well.
|
|
455
558
|
"#<#{class_name(value.class)}: serialization error>"
|
|
456
559
|
end
|
|
457
560
|
|
|
561
|
+
# Computes the absolute thread CPU time deadline (in seconds) for a
|
|
562
|
+
# capture point from max_time_to_serialize_ms.
|
|
563
|
+
#
|
|
564
|
+
# @return [Float] absolute thread CPU clock reading, in seconds, at
|
|
565
|
+
# which the capture budget is exhausted
|
|
566
|
+
def serialization_deadline
|
|
567
|
+
Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID, :float_second) +
|
|
568
|
+
settings.dynamic_instrumentation.max_time_to_serialize_ms / 1000.0
|
|
569
|
+
end
|
|
570
|
+
|
|
458
571
|
private
|
|
459
572
|
|
|
573
|
+
def deadline_exceeded?(deadline)
|
|
574
|
+
Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID, :float_second) >= deadline
|
|
575
|
+
end
|
|
576
|
+
|
|
460
577
|
MAX_MESSAGE_COLLECTION_SIZE = 3
|
|
461
578
|
MAX_MESSAGE_ATTRIBUTE_COUNT = 5
|
|
462
579
|
|
|
@@ -501,7 +618,7 @@ module Datadog
|
|
|
501
618
|
if max % 2 == 0
|
|
502
619
|
upper += 1
|
|
503
620
|
end
|
|
504
|
-
value[0...max / 2 - 1] +
|
|
621
|
+
value[0...max / 2 - 1] + "..." + value[upper...length] # steep:ignore NoMethod
|
|
505
622
|
end
|
|
506
623
|
else
|
|
507
624
|
value
|
|
@@ -543,7 +660,7 @@ module Datadog
|
|
|
543
660
|
when 0x27 # '
|
|
544
661
|
"\\'"
|
|
545
662
|
when 0x5C # \
|
|
546
|
-
|
|
663
|
+
"\\\\"
|
|
547
664
|
when 0x20..0x7E # Printable ASCII (space through ~)
|
|
548
665
|
byte.chr
|
|
549
666
|
else
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module DI
|
|
5
|
+
# A snapshot payload queued for sending to the agent, paired with
|
|
6
|
+
# the guardrails event type of the probe that produced it, so drop
|
|
7
|
+
# metrics can be tagged with the probe's classification.
|
|
8
|
+
# @api private
|
|
9
|
+
class SnapshotEvent
|
|
10
|
+
# Initializes the event.
|
|
11
|
+
#
|
|
12
|
+
# @param payload [Hash] the snapshot payload to send to the agent
|
|
13
|
+
# @param event_type [String] one of GuardrailsTelemetry::EVENT_TYPE_SNAPSHOT and EVENT_TYPE_LOG
|
|
14
|
+
# @return [void]
|
|
15
|
+
def initialize(payload:, event_type:)
|
|
16
|
+
@payload = payload
|
|
17
|
+
@event_type = event_type
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# The snapshot payload to send to the agent.
|
|
21
|
+
# @return [Hash]
|
|
22
|
+
attr_reader :payload
|
|
23
|
+
|
|
24
|
+
# The guardrails event type of the probe that produced the payload.
|
|
25
|
+
# @return [String] one of GuardrailsTelemetry::EVENT_TYPE_SNAPSHOT and EVENT_TYPE_LOG
|
|
26
|
+
attr_reader :event_type
|
|
27
|
+
|
|
28
|
+
# Compares two events by payload and event type.
|
|
29
|
+
#
|
|
30
|
+
# @param other [Object] the object to compare with
|
|
31
|
+
# @return [Boolean] whether the other object is an event with the
|
|
32
|
+
# same payload and event type
|
|
33
|
+
def ==(other)
|
|
34
|
+
other.is_a?(SnapshotEvent) && other.payload == payload && other.event_type == event_type
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "json"
|
|
4
4
|
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
5
|
+
require_relative "../../core/transport/parcel"
|
|
6
|
+
require_relative "../../core/transport/request"
|
|
7
|
+
require_relative "../../core/transport/transport"
|
|
8
|
+
require_relative "http/diagnostics"
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module DI
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "../../../core/transport/http/api/endpoint"
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module DI
|
|
@@ -20,9 +20,9 @@ module Datadog
|
|
|
20
20
|
event_payload = Core::Vendor::Multipart::Post::UploadIO.new(
|
|
21
21
|
StringIO.new(env.request.parcel.data),
|
|
22
22
|
env.request.parcel.content_type,
|
|
23
|
-
|
|
23
|
+
"event.json",
|
|
24
24
|
)
|
|
25
|
-
env.form = {
|
|
25
|
+
env.form = {"event" => event_payload}
|
|
26
26
|
|
|
27
27
|
super
|
|
28
28
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "../../../core/transport/http/api/endpoint"
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module DI
|
|
@@ -9,7 +9,7 @@ module Datadog
|
|
|
9
9
|
module Input
|
|
10
10
|
module API
|
|
11
11
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
12
|
-
HEADER_CONTENT_TYPE =
|
|
12
|
+
HEADER_CONTENT_TYPE = "Content-Type"
|
|
13
13
|
|
|
14
14
|
attr_reader \
|
|
15
15
|
:encoder
|