datadog 2.17.0 → 2.37.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 +686 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
- data/ext/datadog_profiling_native_extension/clock_id.h +9 -1
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +66 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +3 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +344 -126
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +4 -4
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +3 -2
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +18 -4
- data/ext/datadog_profiling_native_extension/collectors_stack.c +314 -91
- data/ext/datadog_profiling_native_extension/collectors_stack.h +26 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +680 -352
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +18 -5
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +65 -1
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +40 -1
- data/ext/datadog_profiling_native_extension/encoded_profile.c +2 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +48 -34
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
- data/ext/datadog_profiling_native_extension/heap_recorder.c +455 -430
- data/ext/datadog_profiling_native_extension/heap_recorder.h +16 -7
- data/ext/datadog_profiling_native_extension/http_transport.c +66 -68
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +18 -15
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -10
- data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +0 -13
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +73 -69
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -4
- data/ext/datadog_profiling_native_extension/profiling.c +65 -19
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +64 -59
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +20 -16
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +32 -10
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +2 -1
- data/ext/datadog_profiling_native_extension/stack_recorder.c +253 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +3 -1
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +2 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +9 -4
- data/ext/libdatadog_api/crashtracker.c +16 -15
- data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +65 -1
- data/ext/libdatadog_api/datadog_ruby_common.h +40 -1
- data/ext/libdatadog_api/ddsketch.c +102 -0
- data/ext/libdatadog_api/di.c +203 -0
- data/ext/libdatadog_api/extconf.rb +21 -25
- data/ext/libdatadog_api/feature_flags.c +554 -0
- data/ext/libdatadog_api/feature_flags.h +5 -0
- data/ext/libdatadog_api/helpers.h +27 -0
- data/ext/libdatadog_api/init.c +13 -1
- data/ext/libdatadog_api/library_config.c +88 -37
- data/ext/libdatadog_api/library_config.h +6 -0
- data/ext/libdatadog_api/process_discovery.c +25 -24
- data/ext/libdatadog_extconf_helpers.rb +107 -14
- data/lib/datadog/ai_guard/api_client.rb +84 -0
- data/lib/datadog/ai_guard/autoload.rb +10 -0
- data/lib/datadog/ai_guard/component.rb +44 -0
- data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
- data/lib/datadog/ai_guard/configuration.rb +115 -0
- data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
- data/lib/datadog/ai_guard/contrib/integration.rb +37 -0
- data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
- data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +97 -0
- data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +80 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +30 -0
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +86 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +45 -0
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
- data/lib/datadog/ai_guard/evaluation.rb +108 -0
- data/lib/datadog/ai_guard/ext.rb +29 -0
- data/lib/datadog/ai_guard.rb +181 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +66 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +36 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +104 -0
- data/lib/datadog/appsec/api_security/sampler.rb +62 -0
- data/lib/datadog/appsec/api_security.rb +14 -0
- data/lib/datadog/appsec/assets/blocked.html +10 -1
- data/lib/datadog/appsec/assets/blocked.json +1 -1
- data/lib/datadog/appsec/assets/blocked.text +3 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
- data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
- data/lib/datadog/appsec/assets.rb +1 -1
- data/lib/datadog/appsec/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +37 -64
- data/lib/datadog/appsec/compressed_json.rb +3 -3
- data/lib/datadog/appsec/configuration.rb +427 -1
- data/lib/datadog/appsec/context.rb +77 -16
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
- data/lib/datadog/appsec/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -1
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +144 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +4 -2
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/patcher.rb +3 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +152 -13
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +138 -13
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +74 -24
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +4 -2
- data/lib/datadog/appsec/contrib/graphql/integration.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +47 -13
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +40 -19
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +79 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +80 -62
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +35 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +47 -5
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +52 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +29 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +3 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +167 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +63 -10
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -21
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/counter_sampler.rb +25 -0
- data/lib/datadog/appsec/default_header_tags.rb +52 -0
- data/lib/datadog/appsec/event.rb +14 -47
- data/lib/datadog/appsec/ext.rb +3 -0
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +2 -15
- data/lib/datadog/appsec/metrics/collector.rb +47 -5
- data/lib/datadog/appsec/metrics/exporter.rb +16 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +21 -4
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +47 -0
- data/lib/datadog/appsec/metrics.rb +5 -4
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +8 -6
- data/lib/datadog/appsec/processor/rule_loader.rb +5 -6
- data/lib/datadog/appsec/remote.rb +51 -76
- data/lib/datadog/appsec/response.rb +18 -4
- data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
- data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
- data/lib/datadog/appsec/route_normalizer.rb +80 -0
- data/lib/datadog/appsec/security_engine/engine.rb +197 -0
- data/lib/datadog/appsec/security_engine/result.rb +45 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +5 -7
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +36 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils/http/body.rb +38 -0
- data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +2 -1
- data/lib/datadog/appsec/utils/http/media_type.rb +32 -26
- data/lib/datadog/appsec/utils/http/url_encoded.rb +52 -0
- data/lib/datadog/appsec.rb +10 -17
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -47
- data/lib/datadog/core/configuration/base.rb +17 -5
- data/lib/datadog/core/configuration/components.rb +192 -20
- data/lib/datadog/core/configuration/components_state.rb +6 -1
- data/lib/datadog/core/configuration/config_helper.rb +109 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +0 -1
- data/lib/datadog/core/configuration/option.rb +95 -65
- data/lib/datadog/core/configuration/option_definition.rb +42 -23
- data/lib/datadog/core/configuration/options.rb +57 -18
- data/lib/datadog/core/configuration/settings.rb +160 -25
- data/lib/datadog/core/configuration/stable_config.rb +11 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +413 -0
- data/lib/datadog/core/configuration.rb +4 -4
- data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
- data/lib/datadog/core/contrib/rails/utils.rb +7 -3
- data/lib/datadog/core/crashtracking/component.rb +73 -21
- data/lib/datadog/core/crashtracking/tag_builder.rb +9 -21
- data/lib/datadog/core/ddsketch.rb +19 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/core/environment/agent_info.rb +65 -1
- data/lib/datadog/core/environment/cgroup.rb +52 -25
- data/lib/datadog/core/environment/container.rb +140 -46
- data/lib/datadog/core/environment/ext.rb +13 -2
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/identity.rb +40 -4
- data/lib/datadog/core/environment/process.rb +122 -0
- data/lib/datadog/core/environment/socket.rb +13 -0
- data/lib/datadog/core/environment/variable_helpers.rb +3 -3
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +6 -6
- data/lib/datadog/core/evp.rb +11 -0
- data/lib/datadog/core/feature_flags.rb +61 -0
- data/lib/datadog/core/knuth_sampler.rb +57 -0
- data/lib/datadog/core/logger.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +7 -7
- data/lib/datadog/core/metrics/logging.rb +1 -1
- data/lib/datadog/core/pin.rb +8 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +51 -21
- data/lib/datadog/core/rate_limiter.rb +11 -1
- data/lib/datadog/core/remote/client/capabilities.rb +49 -6
- data/lib/datadog/core/remote/client.rb +15 -7
- data/lib/datadog/core/remote/component.rb +64 -36
- data/lib/datadog/core/remote/configuration/content.rb +15 -2
- data/lib/datadog/core/remote/configuration/digest.rb +14 -7
- data/lib/datadog/core/remote/configuration/repository.rb +13 -1
- data/lib/datadog/core/remote/configuration/target.rb +13 -6
- data/lib/datadog/core/remote/transport/config.rb +9 -36
- data/lib/datadog/core/remote/transport/http/config.rb +15 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
- data/lib/datadog/core/remote/transport/http.rb +15 -24
- data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
- data/lib/datadog/core/remote/worker.rb +25 -37
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/runtime/metrics.rb +11 -2
- data/lib/datadog/core/semaphore.rb +1 -4
- data/lib/datadog/core/tag_builder.rb +52 -0
- data/lib/datadog/core/tag_normalizer.rb +84 -0
- data/lib/datadog/core/telemetry/component.rb +65 -17
- data/lib/datadog/core/telemetry/emitter.rb +6 -6
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -3
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +203 -89
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
- data/lib/datadog/core/telemetry/event.rb +2 -7
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/logger.rb +5 -2
- data/lib/datadog/core/telemetry/logging.rb +22 -4
- data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
- data/lib/datadog/core/telemetry/request.rb +17 -5
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +8 -34
- data/lib/datadog/core/telemetry/transport/http.rb +21 -16
- data/lib/datadog/core/telemetry/transport/telemetry.rb +8 -17
- data/lib/datadog/core/telemetry/worker.rb +108 -32
- data/lib/datadog/core/transport/ext.rb +3 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
- data/lib/datadog/core/transport/http/api/instance.rb +4 -21
- data/lib/datadog/core/transport/http/builder.rb +11 -7
- data/lib/datadog/core/transport/http/client.rb +80 -0
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http/response.rb +4 -0
- data/lib/datadog/core/transport/http.rb +24 -19
- data/lib/datadog/core/transport/parcel.rb +61 -9
- data/lib/datadog/core/transport/response.rb +16 -2
- data/lib/datadog/core/transport/transport.rb +90 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +1 -1
- data/lib/datadog/core/utils/{base64.rb → base64_codec.rb} +4 -3
- data/lib/datadog/core/utils/enumerable_compat.rb +29 -0
- data/lib/datadog/core/utils/fnv.rb +26 -0
- data/lib/datadog/core/utils/forking.rb +3 -1
- data/lib/datadog/core/utils/hash.rb +0 -23
- data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -14
- data/lib/datadog/core/utils/network.rb +22 -1
- data/lib/datadog/core/utils/only_once.rb +1 -1
- data/lib/datadog/core/utils/only_once_successful.rb +8 -2
- data/lib/datadog/core/utils/safe_dup.rb +2 -2
- data/lib/datadog/core/utils/sequence.rb +2 -0
- data/lib/datadog/core/utils/spawn_monkey_patch.rb +68 -0
- data/lib/datadog/core/utils/time.rb +1 -1
- data/lib/datadog/core/utils.rb +10 -1
- data/lib/datadog/core/workers/async.rb +11 -2
- data/lib/datadog/core/workers/interval_loop.rb +51 -3
- data/lib/datadog/core/workers/polling.rb +2 -0
- data/lib/datadog/core/workers/queue.rb +96 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +9 -1
- data/lib/datadog/core.rb +11 -2
- data/lib/datadog/data_streams/configuration.rb +50 -0
- data/lib/datadog/data_streams/ext.rb +11 -0
- data/lib/datadog/data_streams/extensions.rb +16 -0
- data/lib/datadog/data_streams/pathway_context.rb +169 -0
- data/lib/datadog/data_streams/processor.rb +511 -0
- data/lib/datadog/data_streams/transport/http/stats.rb +58 -0
- data/lib/datadog/data_streams/transport/http.rb +36 -0
- data/lib/datadog/data_streams/transport/stats.rb +39 -0
- data/lib/datadog/data_streams.rb +100 -0
- data/lib/datadog/di/base.rb +15 -7
- data/lib/datadog/di/boot.rb +11 -1
- data/lib/datadog/di/code_tracker.rb +217 -15
- data/lib/datadog/di/component.rb +143 -48
- data/lib/datadog/di/configuration.rb +235 -2
- data/lib/datadog/di/context.rb +76 -0
- data/lib/datadog/di/contrib/active_record.rb +34 -5
- data/lib/datadog/di/el/compiler.rb +168 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +44 -0
- data/lib/datadog/di/fatal_exceptions.rb +26 -0
- data/lib/datadog/di/instrumenter.rb +620 -132
- data/lib/datadog/di/logger.rb +2 -2
- data/lib/datadog/di/probe.rb +78 -15
- data/lib/datadog/di/probe_builder.rb +42 -3
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +87 -0
- data/lib/datadog/di/probe_manager.rb +195 -100
- data/lib/datadog/di/probe_notification_builder.rb +285 -100
- data/lib/datadog/di/probe_notifier_worker.rb +120 -36
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/proc_responder.rb +36 -0
- data/lib/datadog/di/redactor.rb +24 -2
- data/lib/datadog/di/remote.rb +258 -95
- data/lib/datadog/di/serializer.rb +297 -20
- data/lib/datadog/di/transport/diagnostics.rb +12 -42
- data/lib/datadog/di/transport/http/diagnostics.rb +4 -34
- data/lib/datadog/di/transport/http/input.rb +12 -34
- data/lib/datadog/di/transport/http.rb +43 -19
- data/lib/datadog/di/transport/input.rb +121 -39
- data/lib/datadog/di/utils.rb +42 -14
- data/lib/datadog/di.rb +203 -10
- data/lib/datadog/error_tracking/collector.rb +2 -1
- data/lib/datadog/error_tracking/component.rb +2 -2
- data/lib/datadog/error_tracking/configuration.rb +55 -2
- data/lib/datadog/error_tracking/filters.rb +2 -2
- data/lib/datadog/kit/appsec/events/v2.rb +253 -0
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/kit/tracing/method_tracer.rb +135 -0
- data/lib/datadog/open_feature/component.rb +100 -0
- data/lib/datadog/open_feature/configuration.rb +37 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
- data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
- data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
- data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
- data/lib/datadog/open_feature/exposures/event.rb +60 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
- data/lib/datadog/open_feature/exposures/worker.rb +116 -0
- data/lib/datadog/open_feature/ext.rb +16 -0
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
- data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +101 -0
- data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +49 -0
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
- data/lib/datadog/open_feature/native_evaluator.rb +60 -0
- data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
- data/lib/datadog/open_feature/provider.rb +191 -0
- data/lib/datadog/open_feature/remote.rb +67 -0
- data/lib/datadog/open_feature/resolution_details.rb +35 -0
- data/lib/datadog/open_feature/transport.rb +121 -0
- data/lib/datadog/open_feature.rb +19 -0
- data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/configuration/settings.rb +226 -0
- data/lib/datadog/opentelemetry/ext.rb +9 -0
- data/lib/datadog/opentelemetry/logs.rb +98 -0
- data/lib/datadog/opentelemetry/metrics.rb +90 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +66 -2
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +30 -0
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +28 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +13 -7
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +12 -9
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/sdk.rb +19 -0
- data/lib/datadog/opentelemetry/signal_configuration.rb +53 -0
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/opentelemetry.rb +4 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +83 -15
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +52 -3
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +13 -4
- data/lib/datadog/profiling/collectors/info.rb +59 -4
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -5
- data/lib/datadog/profiling/component.rb +73 -49
- data/lib/datadog/profiling/exporter.rb +48 -13
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +24 -5
- data/lib/datadog/profiling/ext/exec_monkey_patch.rb +32 -0
- data/lib/datadog/profiling/ext.rb +2 -15
- data/lib/datadog/profiling/flush.rb +23 -11
- data/lib/datadog/profiling/http_transport.rb +24 -11
- data/lib/datadog/profiling/load_native_extension.rb +2 -2
- data/lib/datadog/profiling/profiler.rb +31 -12
- data/lib/datadog/profiling/scheduler.rb +12 -10
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +5 -13
- data/lib/datadog/profiling/tag_builder.rb +42 -38
- data/lib/datadog/profiling/tasks/exec.rb +10 -5
- data/lib/datadog/profiling/tasks/help.rb +1 -0
- data/lib/datadog/profiling/tasks/setup.rb +4 -2
- data/lib/datadog/profiling.rb +8 -11
- data/lib/datadog/ruby_version.rb +25 -0
- data/lib/datadog/single_step_instrument.rb +10 -1
- data/lib/datadog/symbol_database/component.rb +734 -0
- data/lib/datadog/symbol_database/configuration.rb +73 -0
- data/lib/datadog/symbol_database/extensions.rb +19 -0
- data/lib/datadog/symbol_database/extractor.rb +1110 -0
- data/lib/datadog/symbol_database/file_hash.rb +48 -0
- data/lib/datadog/symbol_database/logger.rb +43 -0
- data/lib/datadog/symbol_database/remote.rb +180 -0
- data/lib/datadog/symbol_database/scope.rb +102 -0
- data/lib/datadog/symbol_database/scope_batcher.rb +292 -0
- data/lib/datadog/symbol_database/service_version.rb +66 -0
- data/lib/datadog/symbol_database/symbol.rb +69 -0
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
- data/lib/datadog/symbol_database/transport/http.rb +45 -0
- data/lib/datadog/symbol_database/transport.rb +54 -0
- data/lib/datadog/symbol_database/uploader.rb +230 -0
- data/lib/datadog/symbol_database.rb +71 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +10 -10
- data/lib/datadog/tracing/component.rb +17 -17
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +25 -5
- data/lib/datadog/tracing/configuration/settings.rb +125 -11
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +29 -11
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +47 -12
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +3 -1
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +4 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +7 -10
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +16 -16
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +15 -12
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +8 -10
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +8 -10
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/component.rb +3 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +22 -7
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +14 -4
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +47 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +7 -7
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +7 -8
- data/lib/datadog/tracing/contrib/ethon/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -8
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/excon/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -9
- data/lib/datadog/tracing/contrib/ext.rb +6 -4
- data/lib/datadog/tracing/contrib/extensions.rb +28 -11
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +7 -9
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +18 -15
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +13 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/grape/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +105 -63
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -15
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -10
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +2 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +10 -11
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +9 -13
- data/lib/datadog/tracing/contrib/http/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/http.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +10 -10
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/httprb/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +8 -12
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +24 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +39 -8
- data/lib/datadog/tracing/contrib/karafka.rb +1 -0
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +6 -6
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +11 -14
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +64 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +7 -7
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +3 -6
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +9 -11
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +13 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +6 -2
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +25 -1
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +2 -6
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +55 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +83 -44
- data/lib/datadog/tracing/contrib/rack/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +67 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +126 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/rails/runner.rb +64 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +10 -8
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/quantize.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/tags.rb +2 -7
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +6 -4
- data/lib/datadog/tracing/contrib/registerable.rb +11 -0
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +2 -1
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -9
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +8 -3
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +6 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -6
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +8 -4
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +40 -39
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +15 -4
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +13 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +4 -6
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +15 -13
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +31 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +18 -0
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +42 -0
- data/lib/datadog/tracing/contrib.rb +9 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +12 -4
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +133 -12
- data/lib/datadog/tracing/distributed/datadog.rb +17 -16
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -26
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +39 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +107 -78
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/ext.rb +9 -0
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/ext.rb +23 -1
- data/lib/datadog/tracing/metadata/tagging.rb +6 -6
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +2 -2
- data/lib/datadog/tracing/remote.rb +36 -13
- data/lib/datadog/tracing/sampling/ext.rb +2 -2
- data/lib/datadog/tracing/sampling/priority_sampler.rb +16 -1
- data/lib/datadog/tracing/sampling/rate_sampler.rb +8 -19
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +77 -48
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +3 -3
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +2 -2
- data/lib/datadog/tracing/span_event.rb +12 -12
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +63 -19
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- data/lib/datadog/tracing/trace_digest.rb +28 -23
- data/lib/datadog/tracing/trace_operation.rb +209 -98
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +113 -52
- data/lib/datadog/tracing/transport/http/client.rb +12 -26
- data/lib/datadog/tracing/transport/http/traces.rb +4 -52
- data/lib/datadog/tracing/transport/http.rb +15 -9
- data/lib/datadog/tracing/transport/io/client.rb +11 -14
- data/lib/datadog/tracing/transport/io/traces.rb +28 -34
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +22 -0
- data/lib/datadog/tracing/transport/traces.rb +14 -82
- data/lib/datadog/tracing/workers.rb +4 -3
- data/lib/datadog/tracing/writer.rb +1 -1
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +14 -0
- metadata +201 -40
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
- data/ext/libdatadog_api/macos_development.md +0 -26
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -321
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -1023
- data/lib/datadog/appsec/configuration/settings.rb +0 -342
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -171
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/core/remote/transport/http/api.rb +0 -53
- data/lib/datadog/core/remote/transport/http/client.rb +0 -49
- data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
- data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
- data/lib/datadog/core/transport/http/api/spec.rb +0 -36
- data/lib/datadog/di/configuration/settings.rb +0 -212
- data/lib/datadog/di/transport/http/api.rb +0 -42
- data/lib/datadog/di/transport/http/client.rb +0 -47
- data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
- data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
- data/lib/datadog/tracing/transport/http/api.rb +0 -44
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -199
|
@@ -15,16 +15,25 @@ module Datadog
|
|
|
15
15
|
# @!attribute [r] precedence_set
|
|
16
16
|
# When this option was last set, what was the value precedence used?
|
|
17
17
|
# @return [Precedence::Value]
|
|
18
|
-
attr_reader :definition, :precedence_set
|
|
18
|
+
attr_reader :definition, :precedence_set
|
|
19
19
|
|
|
20
20
|
# Option setting precedence.
|
|
21
21
|
module Precedence
|
|
22
22
|
# Represents an Option precedence level.
|
|
23
23
|
# Each precedence has a `numeric` value; higher values means higher precedence.
|
|
24
24
|
# `name` is for inspection purposes only.
|
|
25
|
-
|
|
25
|
+
|
|
26
|
+
class Value
|
|
26
27
|
include Comparable
|
|
27
28
|
|
|
29
|
+
attr_accessor :numeric, :name, :origin
|
|
30
|
+
|
|
31
|
+
def initialize(numeric, name, origin)
|
|
32
|
+
@numeric = numeric
|
|
33
|
+
@name = name
|
|
34
|
+
@origin = origin
|
|
35
|
+
end
|
|
36
|
+
|
|
28
37
|
def <=>(other)
|
|
29
38
|
return nil unless other.is_a?(Value)
|
|
30
39
|
|
|
@@ -33,22 +42,22 @@ module Datadog
|
|
|
33
42
|
end
|
|
34
43
|
|
|
35
44
|
# Remote configuration provided through the Datadog app.
|
|
36
|
-
REMOTE_CONFIGURATION = Value.new(5, :remote_configuration).freeze
|
|
45
|
+
REMOTE_CONFIGURATION = Value.new(5, :remote_configuration, 'remote_config').freeze
|
|
37
46
|
|
|
38
47
|
# Configuration provided in Ruby code, in this same process
|
|
39
|
-
PROGRAMMATIC = Value.new(4, :programmatic).freeze
|
|
48
|
+
PROGRAMMATIC = Value.new(4, :programmatic, 'code').freeze
|
|
40
49
|
|
|
41
50
|
# Configuration provided by fleet managed stable config
|
|
42
|
-
FLEET_STABLE = Value.new(3, :fleet_stable).freeze
|
|
51
|
+
FLEET_STABLE = Value.new(3, :fleet_stable, 'fleet_stable_config').freeze
|
|
43
52
|
|
|
44
53
|
# Configuration provided via environment variable
|
|
45
|
-
ENVIRONMENT = Value.new(2, :environment).freeze
|
|
54
|
+
ENVIRONMENT = Value.new(2, :environment, 'env_var').freeze
|
|
46
55
|
|
|
47
56
|
# Configuration provided by local stable config file
|
|
48
|
-
LOCAL_STABLE = Value.new(1, :local_stable).freeze
|
|
57
|
+
LOCAL_STABLE = Value.new(1, :local_stable, 'local_stable_config').freeze
|
|
49
58
|
|
|
50
59
|
# Configuration that comes from default values
|
|
51
|
-
DEFAULT = Value.new(0, :default).freeze
|
|
60
|
+
DEFAULT = Value.new(0, :default, 'default').freeze
|
|
52
61
|
|
|
53
62
|
# All precedences, sorted from highest to lowest
|
|
54
63
|
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, FLEET_STABLE, ENVIRONMENT, LOCAL_STABLE, DEFAULT].sort.reverse.freeze
|
|
@@ -59,7 +68,6 @@ module Datadog
|
|
|
59
68
|
@context = context
|
|
60
69
|
@value = nil
|
|
61
70
|
@is_set = false
|
|
62
|
-
@resolved_env = nil
|
|
63
71
|
|
|
64
72
|
# One value is stored per precedence, to allow unsetting a higher
|
|
65
73
|
# precedence value and falling back to a lower precedence one.
|
|
@@ -69,19 +77,29 @@ module Datadog
|
|
|
69
77
|
@precedence_set = Precedence::DEFAULT
|
|
70
78
|
end
|
|
71
79
|
|
|
80
|
+
# Computes the name of the option with the settings path.
|
|
81
|
+
# E.g. "tracing.rails.middleware_names" for the "middleware_names" option in the "tracing.rails" settings.
|
|
82
|
+
# @return [String] the name of the option with the settings path
|
|
83
|
+
def name_with_settings_path
|
|
84
|
+
@name_with_settings_path ||= begin
|
|
85
|
+
settings_path = @context.class.settings_path
|
|
86
|
+
settings_path.nil? ? definition.name.to_s : "#{settings_path}.#{definition.name}"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
72
90
|
# Overrides the current value for this option if the `precedence` is equal or higher than
|
|
73
91
|
# the previously set value.
|
|
74
92
|
# The first call to `#set` will always store the value regardless of precedence.
|
|
75
93
|
#
|
|
76
94
|
# @param value [Object] the new value to be associated with this option
|
|
77
95
|
# @param precedence [Precedence] from what precedence order this new value comes from
|
|
78
|
-
def set(value, precedence: Precedence::PROGRAMMATIC
|
|
96
|
+
def set(value, precedence: Precedence::PROGRAMMATIC)
|
|
79
97
|
# Is there a higher precedence value set?
|
|
80
98
|
if @precedence_set > precedence
|
|
81
99
|
# This should be uncommon, as higher precedence values tend to
|
|
82
100
|
# happen later in the application lifecycle.
|
|
83
101
|
Datadog.logger.info do
|
|
84
|
-
"Option '#{
|
|
102
|
+
"Option '#{name_with_settings_path}' not changed to '#{value}' (precedence: #{precedence.name}) because the higher " \
|
|
85
103
|
"precedence value '#{@value}' (precedence: #{@precedence_set.name}) was already set."
|
|
86
104
|
end
|
|
87
105
|
|
|
@@ -94,7 +112,7 @@ module Datadog
|
|
|
94
112
|
return @value
|
|
95
113
|
end
|
|
96
114
|
|
|
97
|
-
internal_set(value, precedence
|
|
115
|
+
internal_set(value, precedence)
|
|
98
116
|
end
|
|
99
117
|
|
|
100
118
|
def unset(precedence)
|
|
@@ -112,7 +130,7 @@ module Datadog
|
|
|
112
130
|
# Look for value that is set.
|
|
113
131
|
# The hash `@value_per_precedence` has a custom default value of `UNSET`.
|
|
114
132
|
if (value = @value_per_precedence[p]) != UNSET
|
|
115
|
-
internal_set(value, p
|
|
133
|
+
internal_set(value, p)
|
|
116
134
|
return nil
|
|
117
135
|
end
|
|
118
136
|
end
|
|
@@ -159,7 +177,8 @@ module Datadog
|
|
|
159
177
|
|
|
160
178
|
def default_value
|
|
161
179
|
if definition.default.instance_of?(Proc)
|
|
162
|
-
|
|
180
|
+
# Steep: https://github.com/soutaro/steep/issues/335
|
|
181
|
+
context_eval(&definition.default) # steep:ignore BlockTypeMismatch
|
|
163
182
|
else
|
|
164
183
|
definition.default_proc || Core::Utils::SafeDup.frozen_or_dup(definition.default)
|
|
165
184
|
end
|
|
@@ -169,23 +188,35 @@ module Datadog
|
|
|
169
188
|
precedence_set == Precedence::DEFAULT
|
|
170
189
|
end
|
|
171
190
|
|
|
191
|
+
def settings?
|
|
192
|
+
@definition.is_settings
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def values_per_precedence
|
|
196
|
+
# value_per_precedence is only filled after we call `get` once.
|
|
197
|
+
get unless @is_set
|
|
198
|
+
|
|
199
|
+
@value_per_precedence.each_with_object({}) do |(precedence, value), result|
|
|
200
|
+
next if value.equal?(UNSET)
|
|
201
|
+
|
|
202
|
+
result[precedence] = value
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
172
206
|
private
|
|
173
207
|
|
|
174
208
|
def coerce_env_variable(value)
|
|
175
|
-
|
|
209
|
+
env_parser = @definition.env_parser
|
|
210
|
+
return context_exec(value, &env_parser) if env_parser
|
|
176
211
|
|
|
177
212
|
case @definition.type
|
|
178
213
|
when :hash
|
|
179
214
|
values = value.split(',') # By default we only want to support comma separated strings
|
|
180
215
|
|
|
181
|
-
values.
|
|
182
|
-
v.gsub!(/\A[\s,]
|
|
183
|
-
|
|
184
|
-
v.empty? ? nil : v
|
|
185
|
-
end
|
|
216
|
+
values.each_with_object({}) do |v, hash| # $ Hash[String, String]
|
|
217
|
+
v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
|
|
218
|
+
next if v.empty?
|
|
186
219
|
|
|
187
|
-
values.compact!
|
|
188
|
-
values.each.with_object({}) do |v, hash|
|
|
189
220
|
pair = v.split(':', 2)
|
|
190
221
|
hash[pair[0]] = pair[1]
|
|
191
222
|
end
|
|
@@ -196,14 +227,12 @@ module Datadog
|
|
|
196
227
|
when :array
|
|
197
228
|
values = value.split(',')
|
|
198
229
|
|
|
199
|
-
values.
|
|
200
|
-
v.gsub!(/\A[\s,]
|
|
230
|
+
values.each_with_object([]) do |v, arr| # $ Array[String]
|
|
231
|
+
v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
|
|
232
|
+
next if v.empty?
|
|
201
233
|
|
|
202
|
-
|
|
234
|
+
arr << v
|
|
203
235
|
end
|
|
204
|
-
|
|
205
|
-
values.compact!
|
|
206
|
-
values
|
|
207
236
|
when :bool
|
|
208
237
|
string_value = value.strip
|
|
209
238
|
string_value = string_value.downcase
|
|
@@ -212,7 +241,7 @@ module Datadog
|
|
|
212
241
|
value
|
|
213
242
|
else
|
|
214
243
|
raise InvalidDefinitionError,
|
|
215
|
-
"The option #{
|
|
244
|
+
"The option #{name_with_settings_path} is using an unsupported type option for env coercion `#{@definition.type}`"
|
|
216
245
|
end
|
|
217
246
|
end
|
|
218
247
|
|
|
@@ -235,10 +264,10 @@ module Datadog
|
|
|
235
264
|
|
|
236
265
|
if raise_error
|
|
237
266
|
error_msg = if @definition.type_options[:nilable]
|
|
238
|
-
"The setting `#{
|
|
267
|
+
"The setting `#{name_with_settings_path}` inside your app's `Datadog.configure` block expects a " \
|
|
239
268
|
"#{@definition.type} or `nil`, but a `#{value.class}` was provided (#{value.inspect})." \
|
|
240
269
|
else
|
|
241
|
-
"The setting `#{
|
|
270
|
+
"The setting `#{name_with_settings_path}` inside your app's `Datadog.configure` block expects a " \
|
|
242
271
|
"#{@definition.type}, but a `#{value.class}` was provided (#{value.inspect})." \
|
|
243
272
|
end
|
|
244
273
|
|
|
@@ -272,17 +301,16 @@ module Datadog
|
|
|
272
301
|
true # No validation is performed when option is typeless
|
|
273
302
|
else
|
|
274
303
|
raise InvalidDefinitionError,
|
|
275
|
-
"The option #{
|
|
304
|
+
"The option #{name_with_settings_path} is using an unsupported type option `#{@definition.type}`"
|
|
276
305
|
end
|
|
277
306
|
end
|
|
278
307
|
|
|
279
308
|
# Directly manipulates the current value and currently set precedence.
|
|
280
|
-
def internal_set(value, precedence
|
|
309
|
+
def internal_set(value, precedence)
|
|
281
310
|
old_value = @value
|
|
282
311
|
(@value = context_exec(validate_type(value), old_value, &definition.setter)).tap do |v|
|
|
283
312
|
@is_set = true
|
|
284
313
|
@precedence_set = precedence
|
|
285
|
-
@resolved_env = resolved_env
|
|
286
314
|
# Store original value to ensure we can always safely call `#internal_set`
|
|
287
315
|
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
|
288
316
|
# on the original value, not on a value that has already been processed by `definition.setter`.
|
|
@@ -304,54 +332,56 @@ module Datadog
|
|
|
304
332
|
end
|
|
305
333
|
|
|
306
334
|
def set_env_value
|
|
307
|
-
value
|
|
308
|
-
set(value, precedence: Precedence::ENVIRONMENT
|
|
335
|
+
value = get_value_from_env
|
|
336
|
+
set(value, precedence: Precedence::ENVIRONMENT) unless value.nil?
|
|
309
337
|
end
|
|
310
338
|
|
|
311
339
|
def set_customer_stable_config_value
|
|
312
|
-
customer_config = StableConfig.configuration
|
|
340
|
+
customer_config = StableConfig.configuration.dig(:local, :config)
|
|
313
341
|
return if customer_config.nil?
|
|
314
342
|
|
|
315
|
-
value
|
|
316
|
-
set(value, precedence: Precedence::LOCAL_STABLE
|
|
343
|
+
value = get_value_from(customer_config, 'local')
|
|
344
|
+
set(value, precedence: Precedence::LOCAL_STABLE) unless value.nil?
|
|
317
345
|
end
|
|
318
346
|
|
|
319
347
|
def set_fleet_stable_config_value
|
|
320
|
-
fleet_config = StableConfig.configuration
|
|
348
|
+
fleet_config = StableConfig.configuration.dig(:fleet, :config)
|
|
321
349
|
return if fleet_config.nil?
|
|
322
350
|
|
|
323
|
-
value
|
|
324
|
-
set(value, precedence: Precedence::FLEET_STABLE
|
|
351
|
+
value = get_value_from(fleet_config, 'fleet')
|
|
352
|
+
set(value, precedence: Precedence::FLEET_STABLE) unless value.nil?
|
|
325
353
|
end
|
|
326
354
|
|
|
327
|
-
def
|
|
328
|
-
|
|
329
|
-
|
|
355
|
+
def get_value_from_env
|
|
356
|
+
env = definition.env
|
|
357
|
+
return unless env
|
|
330
358
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
if value.nil? && definition.deprecated_env && env_vars[definition.deprecated_env]
|
|
342
|
-
resolved_env = definition.deprecated_env
|
|
343
|
-
value = coerce_env_variable(env_vars[definition.deprecated_env])
|
|
359
|
+
value = DATADOG_ENV[env]
|
|
360
|
+
coerce_env_variable(value) unless value.nil?
|
|
361
|
+
rescue ArgumentError
|
|
362
|
+
# This will be raised when the type is set to :int or :float but an invalid env var value is provided.
|
|
363
|
+
raise ArgumentError,
|
|
364
|
+
# ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
|
|
365
|
+
# @type var env: String
|
|
366
|
+
"Expected environment variable #{DATADOG_ENV.resolve_env(env)} " \
|
|
367
|
+
"to be a #{definition.type}, but '#{value}' was provided."
|
|
368
|
+
end
|
|
344
369
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
end
|
|
370
|
+
def get_value_from(source_env, source_name)
|
|
371
|
+
env = definition.env
|
|
372
|
+
return unless env
|
|
349
373
|
|
|
350
|
-
|
|
374
|
+
# An instance of ConfigHelper could be used with any Hash but this is the only place where
|
|
375
|
+
# it's used with something else than ENV, let's keep it simple for now by overriding the source_env parameter.
|
|
376
|
+
value = DATADOG_ENV.get_environment_variable(env, source_env: source_env)
|
|
377
|
+
coerce_env_variable(value) unless value.nil?
|
|
351
378
|
rescue ArgumentError
|
|
379
|
+
# This will be raised when the type is set to :int or :float but an invalid env var value is provided.
|
|
352
380
|
raise ArgumentError,
|
|
353
|
-
|
|
354
|
-
|
|
381
|
+
# ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
|
|
382
|
+
# @type var env: String
|
|
383
|
+
"Expected #{source_name} configuration file variable #{DATADOG_ENV.resolve_env(env, source_env: source_env)} " \
|
|
384
|
+
"to be a #{definition.type}, but '#{value}' was provided."
|
|
355
385
|
end
|
|
356
386
|
|
|
357
387
|
# Anchor object that represents a value that is not set.
|
|
@@ -10,30 +10,36 @@ module Datadog
|
|
|
10
10
|
IDENTITY = ->(new_value, _old_value) { new_value }
|
|
11
11
|
|
|
12
12
|
attr_reader \
|
|
13
|
+
:is_settings,
|
|
13
14
|
:default,
|
|
14
15
|
:default_proc,
|
|
15
16
|
:env,
|
|
16
|
-
:deprecated_env,
|
|
17
17
|
:env_parser,
|
|
18
18
|
:name,
|
|
19
19
|
:after_set,
|
|
20
|
+
:skip_telemetry,
|
|
20
21
|
:resetter,
|
|
21
22
|
:setter,
|
|
22
23
|
:type,
|
|
23
24
|
:type_options
|
|
24
25
|
|
|
25
|
-
def initialize(name,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@
|
|
30
|
-
|
|
26
|
+
def initialize(name, attributes, &block)
|
|
27
|
+
# When a settings is defined using the config DSL, an option is also created.
|
|
28
|
+
# See Datadog::Core::Configuration::Base::ClassMethods#settings for more details.
|
|
29
|
+
# This flag is used to indicate that the option is a settings option.
|
|
30
|
+
@is_settings = attributes[:is_settings]
|
|
31
|
+
|
|
32
|
+
@default = attributes[:default]
|
|
33
|
+
@default_proc = attributes[:default_proc]
|
|
34
|
+
@env = attributes[:env]
|
|
35
|
+
@env_parser = attributes[:env_parser]
|
|
31
36
|
@name = name.to_sym
|
|
32
|
-
@after_set =
|
|
33
|
-
@
|
|
34
|
-
@
|
|
35
|
-
@
|
|
36
|
-
@
|
|
37
|
+
@after_set = attributes[:after_set]
|
|
38
|
+
@skip_telemetry = attributes[:skip_telemetry]
|
|
39
|
+
@resetter = attributes[:resetter]
|
|
40
|
+
@setter = attributes[:setter] || block || IDENTITY
|
|
41
|
+
@type = attributes[:type]
|
|
42
|
+
@type_options = attributes[:type_options]
|
|
37
43
|
end
|
|
38
44
|
|
|
39
45
|
# Creates a new Option, bound to the context provided.
|
|
@@ -44,20 +50,23 @@ module Datadog
|
|
|
44
50
|
# Acts as DSL for building OptionDefinitions
|
|
45
51
|
# @public_api
|
|
46
52
|
class Builder
|
|
47
|
-
|
|
53
|
+
# Steep: https://github.com/soutaro/steep/issues/1880
|
|
54
|
+
InvalidOptionError = Class.new(StandardError) # steep:ignore IncompatibleAssignment
|
|
48
55
|
|
|
49
56
|
attr_reader \
|
|
50
57
|
:helpers
|
|
51
58
|
|
|
52
59
|
def initialize(name, options = {})
|
|
60
|
+
@is_settings = options.fetch(:is_settings, false)
|
|
61
|
+
|
|
53
62
|
@env = nil
|
|
54
|
-
@deprecated_env = nil
|
|
55
63
|
@env_parser = nil
|
|
56
64
|
@default = nil
|
|
57
65
|
@default_proc = nil
|
|
58
66
|
@helpers = {}
|
|
59
67
|
@name = name.to_sym
|
|
60
68
|
@after_set = nil
|
|
69
|
+
@skip_telemetry = false
|
|
61
70
|
@resetter = nil
|
|
62
71
|
@setter = OptionDefinition::IDENTITY
|
|
63
72
|
@type = nil
|
|
@@ -75,10 +84,6 @@ module Datadog
|
|
|
75
84
|
@env = value
|
|
76
85
|
end
|
|
77
86
|
|
|
78
|
-
def deprecated_env(value) # standard:disable Style/TrivialAccessors
|
|
79
|
-
@deprecated_env = value
|
|
80
|
-
end
|
|
81
|
-
|
|
82
87
|
# Invoked when the option is first read, and {#env} is defined.
|
|
83
88
|
# The block provided is only invoked if the environment variable is present (not-nil).
|
|
84
89
|
def env_parser(&block)
|
|
@@ -101,6 +106,16 @@ module Datadog
|
|
|
101
106
|
@after_set = block
|
|
102
107
|
end
|
|
103
108
|
|
|
109
|
+
# This should only be set to true for options that are manually modified
|
|
110
|
+
# before being added to the telemetry payload in app_started.rb.
|
|
111
|
+
# E.g. telemetry is skipped for `tracing.writer_options`, but in app_started.rb,
|
|
112
|
+
# we send two separate entries for the buffer_size and flush_interval values.
|
|
113
|
+
# Standard: We want to keep this method as skip_telemetry(value),
|
|
114
|
+
# not skip_telemetry = value, so attr_writer is not used.
|
|
115
|
+
def skip_telemetry(value) # standard:disable Style/TrivialAccessors
|
|
116
|
+
@skip_telemetry = value
|
|
117
|
+
end
|
|
118
|
+
|
|
104
119
|
def resetter(&block)
|
|
105
120
|
@resetter = block
|
|
106
121
|
end
|
|
@@ -123,26 +138,30 @@ module Datadog
|
|
|
123
138
|
default(options[:default]) if options.key?(:default)
|
|
124
139
|
default_proc(&options[:default_proc]) if options.key?(:default_proc)
|
|
125
140
|
env(options[:env]) if options.key?(:env)
|
|
126
|
-
deprecated_env(options[:deprecated_env]) if options.key?(:deprecated_env)
|
|
127
141
|
env_parser(&options[:env_parser]) if options.key?(:env_parser)
|
|
128
142
|
after_set(&options[:after_set]) if options.key?(:after_set)
|
|
143
|
+
# Steep: https://github.com/soutaro/steep/issues/1979
|
|
144
|
+
skip_telemetry(options[:skip_telemetry]) if options.key?(:skip_telemetry) # steep:ignore ArgumentTypeMismatch
|
|
129
145
|
resetter(&options[:resetter]) if options.key?(:resetter)
|
|
130
|
-
|
|
146
|
+
# Steep: https://github.com/soutaro/steep/issues/1979
|
|
147
|
+
setter(&options[:setter]) if options.key?(:setter) # steep:ignore BlockTypeMismatch
|
|
131
148
|
type(options[:type], **(options[:type_options] || {})) if options.key?(:type)
|
|
132
149
|
end
|
|
133
150
|
|
|
134
151
|
def to_definition
|
|
135
|
-
OptionDefinition.new(@name,
|
|
152
|
+
OptionDefinition.new(@name, attributes)
|
|
136
153
|
end
|
|
137
154
|
|
|
138
|
-
def
|
|
155
|
+
def attributes
|
|
139
156
|
{
|
|
157
|
+
is_settings: @is_settings,
|
|
158
|
+
|
|
140
159
|
default: @default,
|
|
141
160
|
default_proc: @default_proc,
|
|
142
161
|
env: @env,
|
|
143
|
-
deprecated_env: @deprecated_env,
|
|
144
162
|
env_parser: @env_parser,
|
|
145
163
|
after_set: @after_set,
|
|
164
|
+
skip_telemetry: @skip_telemetry,
|
|
146
165
|
resetter: @resetter,
|
|
147
166
|
setter: @setter,
|
|
148
167
|
type: @type,
|
|
@@ -16,17 +16,47 @@ module Datadog
|
|
|
16
16
|
# Class behavior for a configuration object with options
|
|
17
17
|
# @public_api
|
|
18
18
|
module ClassMethods
|
|
19
|
+
def settings_path
|
|
20
|
+
defined?(@settings_path) ? @settings_path : nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Registry of nested settings classes keyed by the option name declared
|
|
24
|
+
# via `Base.settings`. This lets us propagate a new settings path down the
|
|
25
|
+
# tree without storing parent references on the nested class or on the
|
|
26
|
+
# option definition itself.
|
|
27
|
+
def settings_children
|
|
28
|
+
@settings_children ||= if superclass <= Options
|
|
29
|
+
superclass.settings_children.dup
|
|
30
|
+
else
|
|
31
|
+
{}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def settings_path=(path)
|
|
36
|
+
@settings_path = path
|
|
37
|
+
|
|
38
|
+
# Keep nested settings paths in sync when a parent settings path is
|
|
39
|
+
# assigned later, which is how contrib integrations inject
|
|
40
|
+
# "tracing.<integration>" into their configuration classes.
|
|
41
|
+
settings_children.each do |name, settings_class|
|
|
42
|
+
nested_settings_path = path ? "#{path}.#{name}" : name.to_s
|
|
43
|
+
settings_class.settings_path = nested_settings_path
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
19
47
|
def options
|
|
20
48
|
# Allows for class inheritance of option definitions
|
|
21
|
-
@options ||=
|
|
49
|
+
@options ||= if superclass <= Options
|
|
50
|
+
superclass.options.dup
|
|
51
|
+
else
|
|
52
|
+
{}
|
|
53
|
+
end
|
|
22
54
|
end
|
|
23
55
|
|
|
24
56
|
protected
|
|
25
57
|
|
|
26
|
-
def option(name,
|
|
27
|
-
|
|
28
|
-
option_name = settings_name ? "#{settings_name}.#{name}" : name
|
|
29
|
-
builder = OptionDefinition::Builder.new(option_name, meta, &block)
|
|
58
|
+
def option(name, attributes = {}, &block)
|
|
59
|
+
builder = OptionDefinition::Builder.new(name, attributes, &block)
|
|
30
60
|
options[name] = builder.to_definition.tap do
|
|
31
61
|
# Resolve and define helper functions
|
|
32
62
|
helpers = default_helpers(name)
|
|
@@ -40,14 +70,21 @@ module Datadog
|
|
|
40
70
|
|
|
41
71
|
def default_helpers(name)
|
|
42
72
|
option_name = name.to_sym
|
|
43
|
-
|
|
73
|
+
# Steep: https://github.com/soutaro/steep/issues/335
|
|
74
|
+
# @type var opt_getter: Configuration::OptionDefinition::generic_proc
|
|
75
|
+
opt_getter = proc do # steep:ignore IncompatibleAssignment
|
|
76
|
+
# These Procs uses `get/set_option`, but we only add them to the OptionDefinition helpers here.
|
|
77
|
+
# Steep is right that these methods are not defined, but we only run these Procs in instance context.
|
|
78
|
+
get_option(option_name) # steep:ignore NoMethod
|
|
79
|
+
end
|
|
80
|
+
# Steep: https://github.com/soutaro/steep/issues/335
|
|
81
|
+
# @type var opt_setter: Configuration::OptionDefinition::generic_proc
|
|
82
|
+
opt_setter = proc do |value| # steep:ignore IncompatibleAssignment
|
|
83
|
+
set_option(option_name, value) # steep:ignore NoMethod
|
|
84
|
+
end
|
|
44
85
|
{
|
|
45
|
-
option_name.to_sym =>
|
|
46
|
-
|
|
47
|
-
end,
|
|
48
|
-
:"#{option_name}=" => proc do |value|
|
|
49
|
-
set_option(option_name, value)
|
|
50
|
-
end
|
|
86
|
+
option_name.to_sym => opt_getter,
|
|
87
|
+
:"#{option_name}=" => opt_setter
|
|
51
88
|
}
|
|
52
89
|
end
|
|
53
90
|
|
|
@@ -68,7 +105,11 @@ module Datadog
|
|
|
68
105
|
end
|
|
69
106
|
|
|
70
107
|
def set_option(name, value, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
71
|
-
|
|
108
|
+
option = resolve_option(name)
|
|
109
|
+
# Populate lower-precedence values so telemetry and `unset` can
|
|
110
|
+
# still observe the fallback chain after a first programmatic set.
|
|
111
|
+
option.get
|
|
112
|
+
option.set(value, precedence: precedence)
|
|
72
113
|
end
|
|
73
114
|
|
|
74
115
|
def unset_option(name, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
@@ -113,19 +154,17 @@ module Datadog
|
|
|
113
154
|
|
|
114
155
|
assert_valid_option!(name)
|
|
115
156
|
definition = self.class.options[name]
|
|
157
|
+
# @type self: Configuration::Options::_Settings
|
|
116
158
|
options[name] = definition.build(self)
|
|
117
159
|
end
|
|
118
160
|
|
|
119
|
-
def resolved_env(name)
|
|
120
|
-
options[name].resolved_env if options.key?(name)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
161
|
def assert_valid_option!(name)
|
|
124
162
|
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
125
163
|
end
|
|
126
164
|
end
|
|
127
165
|
|
|
128
|
-
|
|
166
|
+
# Steep: https://github.com/soutaro/steep/issues/1880
|
|
167
|
+
InvalidOptionError = Class.new(StandardError) # steep:ignore IncompatibleAssignment
|
|
129
168
|
end
|
|
130
169
|
end
|
|
131
170
|
end
|