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,36 +1,36 @@
|
|
|
1
1
|
# rubocop:disable Style/StderrPuts
|
|
2
2
|
# rubocop:disable Style/GlobalVars
|
|
3
3
|
|
|
4
|
-
require
|
|
5
|
-
require_relative
|
|
4
|
+
require "rubygems"
|
|
5
|
+
require_relative "../libdatadog_extconf_helpers"
|
|
6
6
|
|
|
7
7
|
def skip_building_extension!(reason)
|
|
8
8
|
$stderr.puts(
|
|
9
9
|
"WARN: Skipping build of libdatadog_api (#{reason}). Some functionality will not be available."
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
fail_install_if_missing_extension = ENV[
|
|
12
|
+
fail_install_if_missing_extension = ENV["DD_FAIL_INSTALL_IF_MISSING_EXTENSION"].to_s.strip.downcase == "true"
|
|
13
13
|
|
|
14
14
|
if fail_install_if_missing_extension
|
|
15
|
-
require
|
|
15
|
+
require "mkmf"
|
|
16
16
|
Logging.message("[datadog] Failure cause: #{reason}")
|
|
17
17
|
else
|
|
18
|
-
File.write(
|
|
18
|
+
File.write("Makefile", "all install clean: # dummy makefile that does nothing")
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
exit
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
if ENV[
|
|
25
|
-
skip_building_extension!(
|
|
24
|
+
if ENV["DD_NO_EXTENSION"].to_s.strip.downcase == "true"
|
|
25
|
+
skip_building_extension!("the `DD_NO_EXTENSION` environment variable is/was set to `true` during installation")
|
|
26
26
|
end
|
|
27
|
-
skip_building_extension!(
|
|
28
|
-
skip_building_extension!(
|
|
27
|
+
skip_building_extension!("current Ruby VM is not supported") unless %w[ruby truffleruby].include?(RUBY_ENGINE)
|
|
28
|
+
skip_building_extension!("Microsoft Windows is not supported") if Gem.win_platform?
|
|
29
29
|
|
|
30
30
|
libdatadog_issue = Datadog::LibdatadogExtconfHelpers.load_libdatadog_or_get_issue
|
|
31
31
|
skip_building_extension!("issue setting up `libdatadog` gem: #{libdatadog_issue}") if libdatadog_issue
|
|
32
32
|
|
|
33
|
-
require
|
|
33
|
+
require "mkmf"
|
|
34
34
|
Datadog::LibdatadogExtconfHelpers.dump_mkmf_log_on_failure!
|
|
35
35
|
|
|
36
36
|
# We must *never* `append_cflags "-Wall"` or `append_cflags "-Wextra"`, because those add the flag at the end,
|
|
@@ -39,30 +39,30 @@ Datadog::LibdatadogExtconfHelpers.dump_mkmf_log_on_failure!
|
|
|
39
39
|
|
|
40
40
|
# Because we can't control what compiler versions our customers use, shipping with -Werror by default is a no-go.
|
|
41
41
|
# But we can enable it in CI, so that we quickly spot any new warnings that just got introduced.
|
|
42
|
-
append_cflags
|
|
42
|
+
append_cflags "-Werror" if ENV["DATADOG_GEM_CI"] == "true"
|
|
43
43
|
|
|
44
44
|
# TEMPORARY STOPGAP: libdatadog v36's vendored `common.h` ships duplicate typedefs
|
|
45
45
|
# (a header-dedup regression), which `-Werror` turns into fatal
|
|
46
46
|
# `-Wtypedef-redefinition` errors under C11/gnu11. Keep it a warning until a fixed
|
|
47
47
|
# header lands upstream in libdatadog/libdatadog-rb. Remove this once that ships.
|
|
48
|
-
append_cflags
|
|
48
|
+
append_cflags "-Wno-error=typedef-redefinition" if ENV["DATADOG_GEM_CI"] == "true"
|
|
49
49
|
|
|
50
50
|
# Older gcc releases may not default to C99 and we need to ask for this. This is also used:
|
|
51
51
|
# * by upstream Ruby -- search for gnu99 in the codebase
|
|
52
52
|
# * by msgpack, another datadog gem dependency
|
|
53
53
|
# (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
|
|
54
54
|
# @ivoanjo: We could probably start using C11/gnu11 for non macOS-too but it's somewhat hard to validate so I chickened out for now
|
|
55
|
-
append_cflags RUBY_PLATFORM.include?(
|
|
55
|
+
append_cflags RUBY_PLATFORM.include?("darwin") ? "-std=gnu11" : "-std=gnu99"
|
|
56
56
|
|
|
57
57
|
# Allow defining variables at any point in a function
|
|
58
|
-
append_cflags
|
|
58
|
+
append_cflags "-Wno-declaration-after-statement"
|
|
59
59
|
|
|
60
60
|
# If we forget to include a Ruby header, the function call may still appear to work, but then
|
|
61
61
|
# cause a segfault later. Let's ensure that never happens.
|
|
62
|
-
append_cflags
|
|
62
|
+
append_cflags "-Werror-implicit-function-declaration"
|
|
63
63
|
|
|
64
64
|
# Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
|
|
65
|
-
append_cflags
|
|
65
|
+
append_cflags "-Wunused-parameter"
|
|
66
66
|
|
|
67
67
|
# The native extension is not intended to expose any symbols/functions for other native libraries to use;
|
|
68
68
|
# the sole exception being `Init_libdatadog_api` which needs to be visible for Ruby to call it when
|
|
@@ -70,22 +70,22 @@ append_cflags '-Wunused-parameter'
|
|
|
70
70
|
#
|
|
71
71
|
# By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
|
|
72
72
|
# For more details see https://gcc.gnu.org/wiki/Visibility
|
|
73
|
-
append_cflags
|
|
73
|
+
append_cflags "-fvisibility=hidden"
|
|
74
74
|
|
|
75
75
|
# Avoid legacy C definitions
|
|
76
|
-
append_cflags
|
|
76
|
+
append_cflags "-Wold-style-definition"
|
|
77
77
|
|
|
78
|
-
if ENV[
|
|
79
|
-
$defs <<
|
|
80
|
-
CONFIG[
|
|
81
|
-
CONFIG[
|
|
78
|
+
if ENV["DDTRACE_DEBUG"] == "true"
|
|
79
|
+
$defs << "-DDD_DEBUG"
|
|
80
|
+
CONFIG["optflags"] = "-O0"
|
|
81
|
+
CONFIG["debugflags"] = "-ggdb3"
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# If we got here, libdatadog is available and loaded
|
|
85
85
|
$stderr.puts("Using libdatadog #{Libdatadog::VERSION} from #{Libdatadog.pkgconfig_folder}")
|
|
86
86
|
|
|
87
87
|
unless Datadog::LibdatadogExtconfHelpers.configure_libdatadog(extconf_folder: __dir__)
|
|
88
|
-
skip_building_extension!(
|
|
88
|
+
skip_building_extension!("there was a problem in setting up the `libdatadog` dependency")
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
Datadog::LibdatadogExtconfHelpers.add_libdatadog_version_define
|
|
@@ -96,7 +96,12 @@ Datadog::LibdatadogExtconfHelpers.add_libdatadog_version_define
|
|
|
96
96
|
# When requiring, we need to use the exact same string, including the version and the platform.
|
|
97
97
|
EXTENSION_NAME = "libdatadog_api.#{RUBY_VERSION[/\d+.\d+/]}_#{RUBY_PLATFORM}".freeze
|
|
98
98
|
|
|
99
|
-
have_func(
|
|
99
|
+
have_func("rb_iseq_type")
|
|
100
|
+
|
|
101
|
+
$defs << "-DHAVE_RB_IMEMO_NAME" if RUBY_VERSION >= "3.0"
|
|
102
|
+
$defs << "-DHAVE_SHIFTED_IMEMO_MASK" if RUBY_VERSION >= "4.1"
|
|
103
|
+
$defs << "-DHAVE_RUBY_THREAD_STORAGE_API" if RUBY_VERSION >= "3.3"
|
|
104
|
+
$defs << "-DHAVE_RUBY_THREAD_HAS_GVL_P" if have_func("ruby_thread_has_gvl_p")
|
|
100
105
|
|
|
101
106
|
create_makefile(EXTENSION_NAME)
|
|
102
107
|
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// Forward declarations
|
|
14
14
|
static VALUE configuration_new(VALUE klass, VALUE json_str);
|
|
15
15
|
static void configuration_free(void *ptr);
|
|
16
|
+
static VALUE configuration_get_observe_full_evaluation_data(VALUE self);
|
|
16
17
|
static VALUE configuration_get_assignment(
|
|
17
18
|
VALUE self, VALUE flag_key, VALUE expected_type, VALUE context);
|
|
18
19
|
|
|
@@ -21,6 +22,7 @@ static VALUE resolution_details_get_raw_value(VALUE self);
|
|
|
21
22
|
static VALUE resolution_details_get_flag_type(VALUE self);
|
|
22
23
|
static VALUE resolution_details_get_variant(VALUE self);
|
|
23
24
|
static VALUE resolution_details_get_allocation_key(VALUE self);
|
|
25
|
+
static VALUE resolution_details_get_serial_id(VALUE self);
|
|
24
26
|
static VALUE resolution_details_get_reason(VALUE self);
|
|
25
27
|
static VALUE resolution_details_get_error_code(VALUE self);
|
|
26
28
|
static VALUE resolution_details_get_error_message(VALUE self);
|
|
@@ -93,6 +95,7 @@ void feature_flags_init(VALUE core_module) {
|
|
|
93
95
|
rb_undef_alloc_func(configuration_class);
|
|
94
96
|
rb_define_singleton_method(configuration_class, "new", configuration_new, 1);
|
|
95
97
|
rb_define_method(configuration_class, "get_assignment", configuration_get_assignment, 3);
|
|
98
|
+
rb_define_method(configuration_class, "observe_full_evaluation_data", configuration_get_observe_full_evaluation_data, 0);
|
|
96
99
|
|
|
97
100
|
rb_gc_register_address(&resolution_details_class);
|
|
98
101
|
resolution_details_class = rb_define_class_under(feature_flags_module, "ResolutionDetails", rb_cObject);
|
|
@@ -101,6 +104,7 @@ void feature_flags_init(VALUE core_module) {
|
|
|
101
104
|
rb_define_method(resolution_details_class, "flag_type", resolution_details_get_flag_type, 0);
|
|
102
105
|
rb_define_method(resolution_details_class, "variant", resolution_details_get_variant, 0);
|
|
103
106
|
rb_define_method(resolution_details_class, "allocation_key", resolution_details_get_allocation_key, 0);
|
|
107
|
+
rb_define_method(resolution_details_class, "serial_id", resolution_details_get_serial_id, 0);
|
|
104
108
|
rb_define_method(resolution_details_class, "reason", resolution_details_get_reason, 0);
|
|
105
109
|
rb_define_method(resolution_details_class, "error_code", resolution_details_get_error_code, 0);
|
|
106
110
|
rb_define_method(resolution_details_class, "error_message", resolution_details_get_error_message, 0);
|
|
@@ -135,6 +139,12 @@ static VALUE configuration_new(VALUE klass, VALUE json_str) {
|
|
|
135
139
|
return TypedData_Wrap_Struct(klass, &configuration_data_type, result.ok);
|
|
136
140
|
}
|
|
137
141
|
|
|
142
|
+
static VALUE configuration_get_observe_full_evaluation_data(VALUE self) {
|
|
143
|
+
ddog_ffe_Handle_Configuration configuration =
|
|
144
|
+
(ddog_ffe_Handle_Configuration)rb_check_typeddata(self, &configuration_data_type);
|
|
145
|
+
return ddog_ffe_configuration_get_observe_full_evaluation_data(configuration) ? Qtrue : Qfalse;
|
|
146
|
+
}
|
|
147
|
+
|
|
138
148
|
static void configuration_free(void *ptr) {
|
|
139
149
|
ddog_ffe_Handle_Configuration config = (ddog_ffe_Handle_Configuration)ptr;
|
|
140
150
|
ddog_ffe_configuration_drop(&config);
|
|
@@ -421,6 +431,30 @@ static VALUE resolution_details_get_allocation_key(VALUE self) {
|
|
|
421
431
|
return str_from_borrow(allocation_key);
|
|
422
432
|
}
|
|
423
433
|
|
|
434
|
+
/*
|
|
435
|
+
* call-seq:
|
|
436
|
+
* resolution_details.serial_id() -> Integer or nil
|
|
437
|
+
*
|
|
438
|
+
* Get the split serial id assigned for this evaluation.
|
|
439
|
+
*
|
|
440
|
+
* libdatadog returns an optional 32-bit integer (`ddog_Option_I32`, a tagged
|
|
441
|
+
* union). When the assignment carries a serial id the tag is
|
|
442
|
+
* DDOG_OPTION_I32_SOME_I32 and the value is in the `.some` field; otherwise the
|
|
443
|
+
* tag is DDOG_OPTION_I32_NONE_I32 and we return nil. This is consumed by the
|
|
444
|
+
* APM span-enrichment hook as `__dd_split_serial_id`.
|
|
445
|
+
*
|
|
446
|
+
* @return [Integer, nil] The split serial id or nil when absent
|
|
447
|
+
*/
|
|
448
|
+
static VALUE resolution_details_get_serial_id(VALUE self) {
|
|
449
|
+
ddog_ffe_Handle_ResolutionDetails resolution_details =
|
|
450
|
+
(ddog_ffe_Handle_ResolutionDetails)rb_check_typeddata(self, &resolution_details_typed_data);
|
|
451
|
+
struct ddog_Option_I32 serial_id = ddog_ffe_assignment_get_serial_id(resolution_details);
|
|
452
|
+
if (serial_id.tag == DDOG_OPTION_I32_SOME_I32) {
|
|
453
|
+
return INT2NUM(serial_id.some);
|
|
454
|
+
}
|
|
455
|
+
return Qnil;
|
|
456
|
+
}
|
|
457
|
+
|
|
424
458
|
/*
|
|
425
459
|
* call-seq:
|
|
426
460
|
* resolution_details.reason() -> String
|
data/ext/libdatadog_api/init.c
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
#include "crashtracker.h"
|
|
6
6
|
#include "feature_flags.h"
|
|
7
7
|
#include "library_config.h"
|
|
8
|
+
#include "otel_thread_context.h"
|
|
8
9
|
#include "process_discovery.h"
|
|
10
|
+
#include "trace_exporter.h"
|
|
9
11
|
|
|
10
12
|
void ddsketch_init(VALUE core_module);
|
|
11
13
|
void di_init(VALUE datadog_module);
|
|
@@ -23,5 +25,11 @@ void DDTRACE_EXPORT Init_libdatadog_api(void) {
|
|
|
23
25
|
library_config_init(core_module);
|
|
24
26
|
ddsketch_init(core_module);
|
|
25
27
|
feature_flags_init(core_module);
|
|
26
|
-
|
|
28
|
+
#ifndef TRUFFLERUBY
|
|
29
|
+
di_init(datadog_module);
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
VALUE tracing_module = rb_define_module_under(datadog_module, "Tracing");
|
|
33
|
+
trace_exporter_init(tracing_module);
|
|
34
|
+
otel_thread_context_init(tracing_module);
|
|
27
35
|
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/thread.h>
|
|
3
|
+
|
|
4
|
+
#include "datadog_ruby_common.h"
|
|
5
|
+
#include "otel_thread_context.h"
|
|
6
|
+
|
|
7
|
+
// Relies on a :fiber_switch TracePoint that TruffleRuby does not support yet
|
|
8
|
+
#if defined(__linux__) && !defined(TRUFFLERUBY)
|
|
9
|
+
#define OTEL_THREAD_CONTEXT_SUPPORTED
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
13
|
+
#include <datadog/otel-thread-ctx.h>
|
|
14
|
+
extern __thread const uint8_t *otel_thread_ctx_v1;
|
|
15
|
+
|
|
16
|
+
static void otel_ctx_handle_free(void *handle) {
|
|
17
|
+
ddog_otel_thread_ctx_free((ddog_ThreadContextHandle *) handle);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static const rb_data_type_t otel_ctx_handle_t = {
|
|
21
|
+
.wrap_struct_name = "Datadog::Tracing::OTelThreadContext handle",
|
|
22
|
+
.function = {.dfree = otel_ctx_handle_free},
|
|
23
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
24
|
+
};
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
static ID fiber_context_slot;
|
|
28
|
+
|
|
29
|
+
DDTRACE_UNUSED static bool otel_context_enabled = false;
|
|
30
|
+
|
|
31
|
+
static VALUE native_set(VALUE _self, VALUE trace_id, VALUE span_id, VALUE local_root_span_id);
|
|
32
|
+
static VALUE native_clear(VALUE _self);
|
|
33
|
+
static VALUE native_enable(VALUE _self);
|
|
34
|
+
static VALUE native_read(VALUE _self);
|
|
35
|
+
|
|
36
|
+
void otel_thread_context_init(VALUE tracing_module) {
|
|
37
|
+
fiber_context_slot = rb_intern("__dd_otel_fiber_context");
|
|
38
|
+
|
|
39
|
+
VALUE otel_thread_context_class = rb_define_class_under(tracing_module, "OTelThreadContext", rb_cObject);
|
|
40
|
+
|
|
41
|
+
rb_define_method(otel_thread_context_class, "_native_enable", native_enable, 0);
|
|
42
|
+
rb_define_method(otel_thread_context_class, "_native_set", native_set, 3);
|
|
43
|
+
rb_define_method(otel_thread_context_class, "_native_clear", native_clear, 0);
|
|
44
|
+
|
|
45
|
+
VALUE testing_module = rb_define_module_under(otel_thread_context_class, "Testing");
|
|
46
|
+
rb_define_singleton_method(testing_module, "_native_read", native_read, 0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
50
|
+
static ddog_ThreadContextHandle *get_fiber_handle_for(VALUE thread) {
|
|
51
|
+
VALUE obj = rb_thread_local_aref(thread, fiber_context_slot);
|
|
52
|
+
|
|
53
|
+
if (!rb_typeddata_is_kind_of(obj, &otel_ctx_handle_t)) return NULL;
|
|
54
|
+
|
|
55
|
+
return RTYPEDDATA_DATA(obj);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static ddog_ThreadContextHandle *get_current_fiber_handle(void) {
|
|
59
|
+
return get_fiber_handle_for(rb_thread_current());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static void pack_span_id(VALUE id, uint8_t bytes[8]) {
|
|
63
|
+
// Tracing::Utils.next_id caps generated span IDs at (1 << 62) - 1, which fits
|
|
64
|
+
// in a Fixnum on 64-bit Ruby. Packing them directly avoids rb_integer_pack's
|
|
65
|
+
// generic conversion and format checks on each context update.
|
|
66
|
+
// https://github.com/DataDog/dd-trace-rb/blob/0b10368e0a2940c1f4d50c9739b9973b4f8bc32a/lib/datadog/tracing/utils.rb#L20-L37
|
|
67
|
+
if (FIXNUM_P(id)) {
|
|
68
|
+
uint64_t number = (uint64_t) FIX2LONG(id);
|
|
69
|
+
for (int i = 7; i >= 0; i--) {
|
|
70
|
+
bytes[i] = (uint8_t) number;
|
|
71
|
+
number >>= 8;
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
rb_integer_pack(id, bytes, 1, sizeof(uint64_t), 0, INTEGER_PACK_BIG_ENDIAN);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static void store_current_fiber_handle(ddog_ThreadContextHandle *handle) {
|
|
79
|
+
VALUE obj = TypedData_Wrap_Struct(rb_cObject, &otel_ctx_handle_t, handle);
|
|
80
|
+
rb_thread_local_aset(rb_thread_current(), fiber_context_slot, obj);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#ifdef RUBY_INTERNAL_THREAD_EVENT_EXITED
|
|
84
|
+
static void on_thread_exited(
|
|
85
|
+
DDTRACE_UNUSED rb_event_flag_t event,
|
|
86
|
+
DDTRACE_UNUSED const rb_internal_thread_event_data_t *event_data,
|
|
87
|
+
DDTRACE_UNUSED void *user_data
|
|
88
|
+
) {
|
|
89
|
+
ddog_otel_thread_ctx_detach();
|
|
90
|
+
}
|
|
91
|
+
#else
|
|
92
|
+
static void on_thread_end(
|
|
93
|
+
DDTRACE_UNUSED rb_event_flag_t evflag,
|
|
94
|
+
DDTRACE_UNUSED VALUE data,
|
|
95
|
+
DDTRACE_UNUSED VALUE self,
|
|
96
|
+
DDTRACE_UNUSED ID mid,
|
|
97
|
+
DDTRACE_UNUSED VALUE klass
|
|
98
|
+
) {
|
|
99
|
+
ddog_otel_thread_ctx_detach();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// CRuby fires RUBY_EVENT_THREAD_END only after the thread body returns,
|
|
103
|
+
// and Thread#kill unwinds the body via EC_JUMP_TAG(TAG_FATAL):
|
|
104
|
+
// https://github.com/ruby/ruby/blob/v3_1_4/thread.c#L744-L775
|
|
105
|
+
static void on_thread_begin(
|
|
106
|
+
DDTRACE_UNUSED rb_event_flag_t evflag,
|
|
107
|
+
DDTRACE_UNUSED VALUE data,
|
|
108
|
+
DDTRACE_UNUSED VALUE self,
|
|
109
|
+
DDTRACE_UNUSED ID mid,
|
|
110
|
+
DDTRACE_UNUSED VALUE klass
|
|
111
|
+
) {
|
|
112
|
+
ddog_otel_thread_ctx_detach();
|
|
113
|
+
}
|
|
114
|
+
#endif
|
|
115
|
+
|
|
116
|
+
#ifdef HAVE_RUBY_THREAD_STORAGE_API
|
|
117
|
+
// This function is declared in internal/thread.h.
|
|
118
|
+
// It returns 0 when the current thread sits in a blocking region.
|
|
119
|
+
int ruby_thread_has_gvl_p(void);
|
|
120
|
+
|
|
121
|
+
static bool in_blocking_region(void) {
|
|
122
|
+
#ifdef HAVE_RUBY_THREAD_HAS_GVL_P
|
|
123
|
+
return ruby_thread_has_gvl_p() == 0;
|
|
124
|
+
#else
|
|
125
|
+
return false;
|
|
126
|
+
#endif
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Under M:N a Ruby thread can migrate between native threads,
|
|
130
|
+
// so we need to detach the context when the Ruby thread gets suspended.
|
|
131
|
+
static void on_thread_suspended(
|
|
132
|
+
DDTRACE_UNUSED rb_event_flag_t event,
|
|
133
|
+
DDTRACE_UNUSED const rb_internal_thread_event_data_t *event_data,
|
|
134
|
+
DDTRACE_UNUSED void *user_data
|
|
135
|
+
) {
|
|
136
|
+
// Ruby pins threads that release GVL to call into a native extension,
|
|
137
|
+
// so we know the thread will not migrate.
|
|
138
|
+
if (in_blocking_region()) return;
|
|
139
|
+
|
|
140
|
+
ddog_otel_thread_ctx_detach();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static void on_thread_resumed(
|
|
144
|
+
DDTRACE_UNUSED rb_event_flag_t event,
|
|
145
|
+
const rb_internal_thread_event_data_t *event_data,
|
|
146
|
+
DDTRACE_UNUSED void *user_data
|
|
147
|
+
) {
|
|
148
|
+
ddog_ThreadContextHandle *handle = get_fiber_handle_for(event_data->thread);
|
|
149
|
+
|
|
150
|
+
if (handle != NULL) ddog_otel_thread_ctx_attach(handle);
|
|
151
|
+
}
|
|
152
|
+
#endif
|
|
153
|
+
|
|
154
|
+
static void on_fiber_switch(
|
|
155
|
+
DDTRACE_UNUSED rb_event_flag_t evflag,
|
|
156
|
+
DDTRACE_UNUSED VALUE data,
|
|
157
|
+
DDTRACE_UNUSED VALUE self,
|
|
158
|
+
DDTRACE_UNUSED ID mid,
|
|
159
|
+
DDTRACE_UNUSED VALUE klass
|
|
160
|
+
) {
|
|
161
|
+
ddog_ThreadContextHandle *handle = get_current_fiber_handle();
|
|
162
|
+
|
|
163
|
+
if (handle != NULL) {
|
|
164
|
+
ddog_otel_thread_ctx_attach(handle);
|
|
165
|
+
} else {
|
|
166
|
+
ddog_otel_thread_ctx_detach();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
#endif
|
|
170
|
+
|
|
171
|
+
static VALUE native_enable(DDTRACE_UNUSED VALUE _self) {
|
|
172
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
173
|
+
if (otel_context_enabled) return Qtrue;
|
|
174
|
+
otel_context_enabled = true;
|
|
175
|
+
|
|
176
|
+
#ifdef RUBY_INTERNAL_THREAD_EVENT_EXITED
|
|
177
|
+
rb_internal_thread_add_event_hook(on_thread_exited, RUBY_INTERNAL_THREAD_EVENT_EXITED, NULL);
|
|
178
|
+
#else
|
|
179
|
+
rb_add_event_hook(on_thread_end, RUBY_EVENT_THREAD_END, Qnil);
|
|
180
|
+
// RUBY_EVENT_THREAD_END does not fire for threads terminated via Thread#kill
|
|
181
|
+
// on Ruby < 3.2, so a killed thread's otel_thread_ctx_v1 TLS stays attached
|
|
182
|
+
// on a native thread CRuby may recycle for a later Ruby thread. Detach on
|
|
183
|
+
// thread begin to drop that stale record before the new thread runs.
|
|
184
|
+
rb_add_event_hook(on_thread_begin, RUBY_EVENT_THREAD_BEGIN, Qnil);
|
|
185
|
+
#endif
|
|
186
|
+
|
|
187
|
+
// These hooks only matter under the M:N thread scheduler (Ruby 3.3+),
|
|
188
|
+
// where a Ruby thread can migrate between native threads.
|
|
189
|
+
#ifdef HAVE_RUBY_THREAD_STORAGE_API
|
|
190
|
+
rb_internal_thread_add_event_hook(on_thread_suspended, RUBY_INTERNAL_THREAD_EVENT_SUSPENDED, NULL);
|
|
191
|
+
rb_internal_thread_add_event_hook(on_thread_resumed, RUBY_INTERNAL_THREAD_EVENT_RESUMED, NULL);
|
|
192
|
+
#endif
|
|
193
|
+
|
|
194
|
+
rb_add_event_hook(on_fiber_switch, RUBY_EVENT_FIBER_SWITCH, Qnil);
|
|
195
|
+
|
|
196
|
+
return Qtrue;
|
|
197
|
+
#else
|
|
198
|
+
raise_error(rb_eRuntimeError, "OTel thread context is not supported on this platform");
|
|
199
|
+
#endif
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
static VALUE native_set(
|
|
203
|
+
DDTRACE_UNUSED VALUE _self,
|
|
204
|
+
DDTRACE_UNUSED VALUE trace_id,
|
|
205
|
+
DDTRACE_UNUSED VALUE span_id,
|
|
206
|
+
DDTRACE_UNUSED VALUE local_root_span_id
|
|
207
|
+
) {
|
|
208
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
209
|
+
if (!otel_context_enabled) return Qfalse;
|
|
210
|
+
|
|
211
|
+
uint8_t trace_id_bytes[16];
|
|
212
|
+
uint8_t span_id_bytes[8];
|
|
213
|
+
uint8_t local_root_span_id_bytes[8];
|
|
214
|
+
|
|
215
|
+
// Note: We use 2 words of size 8, as `rb_integer_pack` has a fast path for it (vs 16 bytes of size 1)
|
|
216
|
+
rb_integer_pack(trace_id, trace_id_bytes, 2, sizeof(uint64_t), 0, INTEGER_PACK_BIG_ENDIAN);
|
|
217
|
+
pack_span_id(span_id, span_id_bytes);
|
|
218
|
+
pack_span_id(local_root_span_id, local_root_span_id_bytes);
|
|
219
|
+
|
|
220
|
+
ddog_ThreadContextHandle *handle = get_current_fiber_handle();
|
|
221
|
+
|
|
222
|
+
if (handle == NULL) {
|
|
223
|
+
handle = ddog_otel_thread_ctx_new(&trace_id_bytes, &span_id_bytes, 0, &local_root_span_id_bytes);
|
|
224
|
+
store_current_fiber_handle(handle);
|
|
225
|
+
ddog_otel_thread_ctx_attach(handle);
|
|
226
|
+
} else {
|
|
227
|
+
ddog_otel_thread_ctx_update_and_attach(handle, &trace_id_bytes, &span_id_bytes, 0, &local_root_span_id_bytes);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return Qtrue;
|
|
231
|
+
#else
|
|
232
|
+
return Qfalse;
|
|
233
|
+
#endif
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
static VALUE native_clear(DDTRACE_UNUSED VALUE _self) {
|
|
237
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
238
|
+
if (!otel_context_enabled) return Qfalse;
|
|
239
|
+
|
|
240
|
+
ddog_ThreadContextHandle *detached = ddog_otel_thread_ctx_detach();
|
|
241
|
+
rb_thread_local_aset(rb_thread_current(), fiber_context_slot, Qnil);
|
|
242
|
+
|
|
243
|
+
return detached == NULL ? Qfalse : Qtrue;
|
|
244
|
+
#else
|
|
245
|
+
return Qfalse;
|
|
246
|
+
#endif
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
static VALUE native_read(DDTRACE_UNUSED VALUE _self) {
|
|
250
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
251
|
+
const uint8_t *raw = otel_thread_ctx_v1;
|
|
252
|
+
if (!raw) return Qnil;
|
|
253
|
+
|
|
254
|
+
uint16_t attrs_data_size = (uint16_t) raw[26] | ((uint16_t) raw[27] << 8);
|
|
255
|
+
|
|
256
|
+
if (attrs_data_size > ddog_MAX_ATTRS_DATA_SIZE) {
|
|
257
|
+
raise_error(
|
|
258
|
+
rb_eRuntimeError,
|
|
259
|
+
"Invalid OTel thread context record: attrs_data_size (%d) exceeds maximum (%d)",
|
|
260
|
+
attrs_data_size, ddog_MAX_ATTRS_DATA_SIZE
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
VALUE result = rb_hash_new();
|
|
265
|
+
rb_hash_aset(result, ID2SYM(rb_intern("trace_id")), rb_str_new((const char *) raw, 16));
|
|
266
|
+
rb_hash_aset(result, ID2SYM(rb_intern("span_id")), rb_str_new((const char *) (raw + 16), 8));
|
|
267
|
+
rb_hash_aset(result, ID2SYM(rb_intern("valid")), rb_str_new((const char *) (raw + 24), 1));
|
|
268
|
+
rb_hash_aset(result, ID2SYM(rb_intern("attrs")), rb_str_new((const char *) (raw + 28), attrs_data_size));
|
|
269
|
+
|
|
270
|
+
return result;
|
|
271
|
+
#else
|
|
272
|
+
return Qnil;
|
|
273
|
+
#endif
|
|
274
|
+
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include <datadog/library-config.h>
|
|
5
5
|
|
|
6
6
|
#include "datadog_ruby_common.h"
|
|
7
|
+
#include "helpers.h"
|
|
7
8
|
|
|
8
9
|
static VALUE _native_store_tracer_metadata(int argc, VALUE *argv, DDTRACE_UNUSED VALUE _self);
|
|
9
10
|
static VALUE _native_to_rb_int(DDTRACE_UNUSED VALUE _self, VALUE tracer_memfd);
|
|
@@ -38,8 +39,9 @@ void process_discovery_init(VALUE core_module) {
|
|
|
38
39
|
|
|
39
40
|
static VALUE _native_store_tracer_metadata(int argc, VALUE *argv, VALUE self) {
|
|
40
41
|
VALUE logger;
|
|
42
|
+
VALUE otel_thread_context_enabled;
|
|
41
43
|
VALUE options;
|
|
42
|
-
rb_scan_args(argc, argv, "
|
|
44
|
+
rb_scan_args(argc, argv, "2:", &logger, &otel_thread_context_enabled, &options);
|
|
43
45
|
if (options == Qnil) options = rb_hash_new();
|
|
44
46
|
|
|
45
47
|
VALUE runtime_id = rb_hash_fetch(options, ID2SYM(rb_intern("runtime_id")));
|
|
@@ -61,6 +63,7 @@ static VALUE _native_store_tracer_metadata(int argc, VALUE *argv, VALUE self) {
|
|
|
61
63
|
ENFORCE_TYPE(service_version, T_STRING);
|
|
62
64
|
ENFORCE_TYPE(process_tags, T_STRING);
|
|
63
65
|
ENFORCE_TYPE(container_id, T_STRING);
|
|
66
|
+
ENFORCE_BOOLEAN(otel_thread_context_enabled);
|
|
64
67
|
|
|
65
68
|
void* builder = ddog_tracer_metadata_new();
|
|
66
69
|
|
|
@@ -74,6 +77,16 @@ static VALUE _native_store_tracer_metadata(int argc, VALUE *argv, VALUE self) {
|
|
|
74
77
|
ddog_tracer_metadata_set(builder, DDOG_METADATA_KIND_PROCESS_TAGS, StringValueCStr(process_tags));
|
|
75
78
|
ddog_tracer_metadata_set(builder, DDOG_METADATA_KIND_CONTAINER_ID, StringValueCStr(container_id));
|
|
76
79
|
|
|
80
|
+
if (RTEST(otel_thread_context_enabled)) {
|
|
81
|
+
ddog_VoidResult include_result = ddog_tracer_metadata_include_otel_thread_context(builder);
|
|
82
|
+
|
|
83
|
+
if (include_result.tag == DDOG_VOID_RESULT_ERR) {
|
|
84
|
+
ddog_tracer_metadata_free(builder);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
CHECK_VOID_RESULT("Failed to include OTel thread context metadata", include_result);
|
|
88
|
+
}
|
|
89
|
+
|
|
77
90
|
ddog_Result_TracerMemfdHandle result = ddog_tracer_metadata_store(builder);
|
|
78
91
|
ddog_tracer_metadata_free(builder);
|
|
79
92
|
|
|
@@ -89,6 +102,7 @@ static VALUE _native_store_tracer_metadata(int argc, VALUE *argv, VALUE self) {
|
|
|
89
102
|
*fd = result.ok.fd;
|
|
90
103
|
VALUE tracer_memfd_class = rb_const_get(self, rb_intern("TracerMemfd"));
|
|
91
104
|
VALUE tracer_memfd = TypedData_Wrap_Struct(tracer_memfd_class, &tracer_memfd_type, fd);
|
|
105
|
+
|
|
92
106
|
return tracer_memfd;
|
|
93
107
|
}
|
|
94
108
|
|