datadog 2.12.0 → 2.22.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 +348 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/ddsketch.c +106 -0
- data/ext/libdatadog_api/extconf.rb +5 -3
- data/ext/libdatadog_api/init.c +18 -0
- data/ext/libdatadog_api/library_config.c +172 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/process_discovery.c +118 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +15 -5
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -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 +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -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/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +75 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +44 -5
- 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/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +46 -71
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +162 -30
- data/lib/datadog/appsec/context.rb +30 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +11 -12
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +53 -31
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -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/request_ssrf_detection_patch.rb +12 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +91 -147
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/collector.rb +23 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +43 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +176 -0
- data/lib/datadog/appsec/security_engine/result.rb +44 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +37 -0
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -15
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -50
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +69 -37
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +4 -1
- data/lib/datadog/core/configuration/option.rb +117 -77
- data/lib/datadog/core/configuration/option_definition.rb +5 -14
- data/lib/datadog/core/configuration/options.rb +15 -13
- data/lib/datadog/core/configuration/settings.rb +117 -48
- data/lib/datadog/core/configuration/stable_config.rb +32 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/ddsketch.rb +21 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -8
- data/lib/datadog/core/environment/git.rb +3 -2
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +4 -4
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +29 -29
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/pin.rb +4 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +61 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +44 -35
- data/lib/datadog/core/remote/component.rb +12 -17
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +14 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +25 -89
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/tag_builder.rb +56 -0
- data/lib/datadog/core/telemetry/component.rb +92 -52
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +18 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +5 -4
- data/lib/datadog/core/telemetry/logging.rb +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -1
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +25 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/utils.rb +7 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +10 -0
- data/lib/datadog/di/boot.rb +43 -0
- data/lib/datadog/di/component.rb +21 -2
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/el/compiler.rb +164 -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 +25 -0
- data/lib/datadog/di/instrumenter.rb +132 -20
- data/lib/datadog/di/probe.rb +35 -15
- data/lib/datadog/di/probe_builder.rb +39 -1
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/probe_manager.rb +3 -2
- data/lib/datadog/di/probe_notification_builder.rb +61 -67
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +5 -5
- data/lib/datadog/di/serializer.rb +160 -8
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +15 -77
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -34
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +17 -4
- data/lib/datadog/kit/identity.rb +22 -12
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +21 -6
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +15 -11
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +2 -15
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -62
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +13 -10
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/component.rb +21 -29
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +8 -4
- data/lib/datadog/tracing/configuration/settings.rb +50 -12
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +19 -4
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- 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_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -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 +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +12 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
- 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 +2 -2
- 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 +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- 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 +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +7 -5
- data/lib/datadog/tracing/contrib/ext.rb +4 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +9 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -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 +84 -48
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- 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 +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +11 -19
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -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 +9 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +23 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +12 -11
- 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 +3 -3
- 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.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- 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/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -6
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- 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 +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +196 -0
- data/lib/datadog/tracing/distributed/datadog.rb +8 -7
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- 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 +28 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +13 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/metadata.rb +2 -0
- 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 +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +11 -2
- data/lib/datadog/tracing/span_event.rb +11 -11
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +76 -26
- data/lib/datadog/tracing/sync_writer.rb +5 -4
- data/lib/datadog/tracing/trace_digest.rb +29 -24
- data/lib/datadog/tracing/trace_operation.rb +121 -97
- data/lib/datadog/tracing/trace_segment.rb +8 -6
- data/lib/datadog/tracing/tracer.rb +90 -43
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +6 -5
- data/lib/datadog/tracing/transport/http/traces.rb +15 -43
- data/lib/datadog/tracing/transport/http.rb +13 -75
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +31 -14
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +4 -4
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +8 -2
- metadata +115 -24
- data/ext/libdatadog_api/macos_development.md +0 -26
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'supported_configurations'
|
|
4
|
+
require_relative '../logger'
|
|
5
|
+
require_relative '../utils/only_once'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Core
|
|
9
|
+
module Configuration
|
|
10
|
+
module Deprecations
|
|
11
|
+
LOG_DEPRECATIONS_ONLY_ONCE = Datadog::Core::Utils::OnlyOnce.new
|
|
12
|
+
|
|
13
|
+
def self.log_deprecations_from_all_sources(logger, deprecations: DEPRECATIONS, alias_to_canonical: ALIAS_TO_CANONICAL)
|
|
14
|
+
LOG_DEPRECATIONS_ONLY_ONCE.run do
|
|
15
|
+
log_deprecated_environment_variables(logger, ENV, 'environment', deprecations, alias_to_canonical)
|
|
16
|
+
customer_config = StableConfig.configuration.dig(:local, :config)
|
|
17
|
+
log_deprecated_environment_variables(logger, customer_config, 'local', deprecations, alias_to_canonical) if customer_config
|
|
18
|
+
fleet_config = StableConfig.configuration.dig(:fleet, :config)
|
|
19
|
+
log_deprecated_environment_variables(logger, fleet_config, 'fleet', deprecations, alias_to_canonical) if fleet_config
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private_class_method def self.log_deprecated_environment_variables(logger, source_env, source_name, deprecations, alias_to_canonical)
|
|
24
|
+
deprecations.each do |deprecated_env_var, message|
|
|
25
|
+
next unless source_env.key?(deprecated_env_var)
|
|
26
|
+
|
|
27
|
+
Datadog::Core.log_deprecation(disallowed_next_major: false, logger: logger) do
|
|
28
|
+
"#{deprecated_env_var} #{source_name} variable is deprecated" +
|
|
29
|
+
(alias_to_canonical[deprecated_env_var] ? ", use #{alias_to_canonical[deprecated_env_var]} instead." : ". #{message}.")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -9,7 +9,6 @@ module Datadog
|
|
|
9
9
|
# @public_api
|
|
10
10
|
module Diagnostics
|
|
11
11
|
ENV_DEBUG_ENABLED = 'DD_TRACE_DEBUG'
|
|
12
|
-
ENV_OTEL_LOG_LEVEL = 'OTEL_LOG_LEVEL'
|
|
13
12
|
ENV_HEALTH_METRICS_ENABLED = 'DD_HEALTH_METRICS_ENABLED'
|
|
14
13
|
ENV_STARTUP_LOGS_ENABLED = 'DD_TRACE_STARTUP_LOGS'
|
|
15
14
|
end
|
|
@@ -18,6 +17,10 @@ module Datadog
|
|
|
18
17
|
ENV_DEFAULT_PORT = 'DD_METRIC_AGENT_PORT'
|
|
19
18
|
end
|
|
20
19
|
|
|
20
|
+
module APM
|
|
21
|
+
ENV_TRACING_ENABLED = 'DD_APM_TRACING_ENABLED'
|
|
22
|
+
end
|
|
23
|
+
|
|
21
24
|
module Agent
|
|
22
25
|
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'
|
|
23
26
|
# Some env vars have "trace" in them, but they apply to all products
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'stable_config'
|
|
3
4
|
require_relative '../utils/safe_dup'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
@@ -14,16 +15,25 @@ module Datadog
|
|
|
14
15
|
# @!attribute [r] precedence_set
|
|
15
16
|
# When this option was last set, what was the value precedence used?
|
|
16
17
|
# @return [Precedence::Value]
|
|
17
|
-
attr_reader :definition, :precedence_set
|
|
18
|
+
attr_reader :definition, :precedence_set
|
|
18
19
|
|
|
19
20
|
# Option setting precedence.
|
|
20
21
|
module Precedence
|
|
21
22
|
# Represents an Option precedence level.
|
|
22
23
|
# Each precedence has a `numeric` value; higher values means higher precedence.
|
|
23
24
|
# `name` is for inspection purposes only.
|
|
24
|
-
|
|
25
|
+
|
|
26
|
+
class Value
|
|
25
27
|
include Comparable
|
|
26
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
|
+
|
|
27
37
|
def <=>(other)
|
|
28
38
|
return nil unless other.is_a?(Value)
|
|
29
39
|
|
|
@@ -32,17 +42,25 @@ module Datadog
|
|
|
32
42
|
end
|
|
33
43
|
|
|
34
44
|
# Remote configuration provided through the Datadog app.
|
|
35
|
-
REMOTE_CONFIGURATION = Value.new(
|
|
45
|
+
REMOTE_CONFIGURATION = Value.new(5, :remote_configuration, 'remote_config').freeze
|
|
36
46
|
|
|
37
47
|
# Configuration provided in Ruby code, in this same process
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
PROGRAMMATIC = Value.new(4, :programmatic, 'code').freeze
|
|
49
|
+
|
|
50
|
+
# Configuration provided by fleet managed stable config
|
|
51
|
+
FLEET_STABLE = Value.new(3, :fleet_stable, 'fleet_stable_config').freeze
|
|
52
|
+
|
|
53
|
+
# Configuration provided via environment variable
|
|
54
|
+
ENVIRONMENT = Value.new(2, :environment, 'env_var').freeze
|
|
55
|
+
|
|
56
|
+
# Configuration provided by local stable config file
|
|
57
|
+
LOCAL_STABLE = Value.new(1, :local_stable, 'local_stable_config').freeze
|
|
40
58
|
|
|
41
59
|
# Configuration that comes from default values
|
|
42
|
-
DEFAULT = Value.new(0, :default).freeze
|
|
60
|
+
DEFAULT = Value.new(0, :default, 'default').freeze
|
|
43
61
|
|
|
44
62
|
# All precedences, sorted from highest to lowest
|
|
45
|
-
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, DEFAULT].sort.reverse.freeze
|
|
63
|
+
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, FLEET_STABLE, ENVIRONMENT, LOCAL_STABLE, DEFAULT].sort.reverse.freeze
|
|
46
64
|
end
|
|
47
65
|
|
|
48
66
|
def initialize(definition, context)
|
|
@@ -50,7 +68,6 @@ module Datadog
|
|
|
50
68
|
@context = context
|
|
51
69
|
@value = nil
|
|
52
70
|
@is_set = false
|
|
53
|
-
@resolved_env = nil
|
|
54
71
|
|
|
55
72
|
# One value is stored per precedence, to allow unsetting a higher
|
|
56
73
|
# precedence value and falling back to a lower precedence one.
|
|
@@ -66,7 +83,7 @@ module Datadog
|
|
|
66
83
|
#
|
|
67
84
|
# @param value [Object] the new value to be associated with this option
|
|
68
85
|
# @param precedence [Precedence] from what precedence order this new value comes from
|
|
69
|
-
def set(value, precedence: Precedence::PROGRAMMATIC
|
|
86
|
+
def set(value, precedence: Precedence::PROGRAMMATIC)
|
|
70
87
|
# Is there a higher precedence value set?
|
|
71
88
|
if @precedence_set > precedence
|
|
72
89
|
# This should be uncommon, as higher precedence values tend to
|
|
@@ -85,7 +102,7 @@ module Datadog
|
|
|
85
102
|
return @value
|
|
86
103
|
end
|
|
87
104
|
|
|
88
|
-
internal_set(value, precedence
|
|
105
|
+
internal_set(value, precedence)
|
|
89
106
|
end
|
|
90
107
|
|
|
91
108
|
def unset(precedence)
|
|
@@ -103,7 +120,7 @@ module Datadog
|
|
|
103
120
|
# Look for value that is set.
|
|
104
121
|
# The hash `@value_per_precedence` has a custom default value of `UNSET`.
|
|
105
122
|
if (value = @value_per_precedence[p]) != UNSET
|
|
106
|
-
internal_set(value, p
|
|
123
|
+
internal_set(value, p)
|
|
107
124
|
return nil
|
|
108
125
|
end
|
|
109
126
|
end
|
|
@@ -118,23 +135,29 @@ module Datadog
|
|
|
118
135
|
end
|
|
119
136
|
|
|
120
137
|
def get
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
138
|
+
unless @is_set
|
|
139
|
+
# Ensures that both the default value and the environment value are set.
|
|
140
|
+
# This approach handles scenarios where an environment value is unset
|
|
141
|
+
# by falling back to the default value consistently.
|
|
142
|
+
set_default_value
|
|
143
|
+
set_customer_stable_config_value
|
|
144
|
+
set_env_value
|
|
145
|
+
set_fleet_stable_config_value
|
|
125
146
|
end
|
|
147
|
+
|
|
148
|
+
@value
|
|
126
149
|
end
|
|
127
150
|
|
|
128
151
|
def reset
|
|
129
152
|
@value = if definition.resetter
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
153
|
+
# Don't change @is_set to false; custom resetters are
|
|
154
|
+
# responsible for changing @value back to a good state.
|
|
155
|
+
# Setting @is_set = false would cause a default to be applied.
|
|
156
|
+
context_exec(@value, &definition.resetter)
|
|
157
|
+
else
|
|
158
|
+
@is_set = false
|
|
159
|
+
nil
|
|
160
|
+
end
|
|
138
161
|
|
|
139
162
|
# Reset back to the lowest precedence, to allow all `set`s to succeed right after a reset.
|
|
140
163
|
@precedence_set = Precedence::DEFAULT
|
|
@@ -157,20 +180,17 @@ module Datadog
|
|
|
157
180
|
private
|
|
158
181
|
|
|
159
182
|
def coerce_env_variable(value)
|
|
160
|
-
|
|
183
|
+
env_parser = @definition.env_parser
|
|
184
|
+
return context_exec(value, &env_parser) if env_parser
|
|
161
185
|
|
|
162
186
|
case @definition.type
|
|
163
187
|
when :hash
|
|
164
188
|
values = value.split(',') # By default we only want to support comma separated strings
|
|
165
189
|
|
|
166
|
-
values.
|
|
167
|
-
v.gsub!(/\A[\s,]
|
|
168
|
-
|
|
169
|
-
v.empty? ? nil : v
|
|
170
|
-
end
|
|
190
|
+
values.each_with_object({}) do |v, hash| # $ Hash[String, String]
|
|
191
|
+
v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
|
|
192
|
+
next if v.empty?
|
|
171
193
|
|
|
172
|
-
values.compact!
|
|
173
|
-
values.each.with_object({}) do |v, hash|
|
|
174
194
|
pair = v.split(':', 2)
|
|
175
195
|
hash[pair[0]] = pair[1]
|
|
176
196
|
end
|
|
@@ -181,18 +201,16 @@ module Datadog
|
|
|
181
201
|
when :array
|
|
182
202
|
values = value.split(',')
|
|
183
203
|
|
|
184
|
-
values.
|
|
185
|
-
v.gsub!(/\A[\s,]
|
|
204
|
+
values.each_with_object([]) do |v, arr| # $ Array[String]
|
|
205
|
+
v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
|
|
206
|
+
next if v.empty?
|
|
186
207
|
|
|
187
|
-
|
|
208
|
+
arr << v
|
|
188
209
|
end
|
|
189
|
-
|
|
190
|
-
values.compact!
|
|
191
|
-
values
|
|
192
210
|
when :bool
|
|
193
211
|
string_value = value.strip
|
|
194
212
|
string_value = string_value.downcase
|
|
195
|
-
string_value == 'true' || string_value == '1'
|
|
213
|
+
string_value == 'true' || string_value == '1'
|
|
196
214
|
when :string, NilClass
|
|
197
215
|
value
|
|
198
216
|
else
|
|
@@ -212,20 +230,20 @@ module Datadog
|
|
|
212
230
|
|
|
213
231
|
unless valid_type
|
|
214
232
|
raise_error = if @definition.type_options[:nilable]
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
233
|
+
!value.is_a?(NilClass)
|
|
234
|
+
else
|
|
235
|
+
true
|
|
236
|
+
end
|
|
219
237
|
end
|
|
220
238
|
|
|
221
239
|
if raise_error
|
|
222
240
|
error_msg = if @definition.type_options[:nilable]
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
241
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a " \
|
|
242
|
+
"#{@definition.type} or `nil`, but a `#{value.class}` was provided (#{value.inspect})." \
|
|
243
|
+
else
|
|
244
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a " \
|
|
245
|
+
"#{@definition.type}, but a `#{value.class}` was provided (#{value.inspect})." \
|
|
246
|
+
end
|
|
229
247
|
|
|
230
248
|
error_msg = "#{error_msg} Please update your `configure` block. "
|
|
231
249
|
|
|
@@ -256,20 +274,20 @@ module Datadog
|
|
|
256
274
|
when NilClass
|
|
257
275
|
true # No validation is performed when option is typeless
|
|
258
276
|
else
|
|
259
|
-
raise
|
|
277
|
+
raise InvalidDefinitionError,
|
|
278
|
+
"The option #{@definition.name} is using an unsupported type option `#{@definition.type}`"
|
|
260
279
|
end
|
|
261
280
|
end
|
|
262
281
|
|
|
263
282
|
# Directly manipulates the current value and currently set precedence.
|
|
264
|
-
def internal_set(value, precedence
|
|
283
|
+
def internal_set(value, precedence)
|
|
265
284
|
old_value = @value
|
|
266
285
|
(@value = context_exec(validate_type(value), old_value, &definition.setter)).tap do |v|
|
|
267
286
|
@is_set = true
|
|
268
287
|
@precedence_set = precedence
|
|
269
|
-
@resolved_env = resolved_env
|
|
270
288
|
# Store original value to ensure we can always safely call `#internal_set`
|
|
271
289
|
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
|
272
|
-
# on the original value, not on a
|
|
290
|
+
# on the original value, not on a value that has already been processed by `definition.setter`.
|
|
273
291
|
@value_per_precedence[precedence] = value
|
|
274
292
|
context_exec(v, old_value, precedence, &definition.after_set) if definition.after_set
|
|
275
293
|
end
|
|
@@ -283,39 +301,61 @@ module Datadog
|
|
|
283
301
|
@context.instance_eval(&block)
|
|
284
302
|
end
|
|
285
303
|
|
|
286
|
-
def
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
resolved_env = nil
|
|
304
|
+
def set_default_value
|
|
305
|
+
set(default_value, precedence: Precedence::DEFAULT)
|
|
306
|
+
end
|
|
290
307
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
308
|
+
def set_env_value
|
|
309
|
+
value = get_value_from_env
|
|
310
|
+
set(value, precedence: Precedence::ENVIRONMENT) unless value.nil?
|
|
311
|
+
end
|
|
294
312
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
break
|
|
299
|
-
end
|
|
300
|
-
end
|
|
313
|
+
def set_customer_stable_config_value
|
|
314
|
+
customer_config = StableConfig.configuration.dig(:local, :config)
|
|
315
|
+
return if customer_config.nil?
|
|
301
316
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
precedence = Precedence::PROGRAMMATIC
|
|
317
|
+
value = get_value_from(customer_config, 'local')
|
|
318
|
+
set(value, precedence: Precedence::LOCAL_STABLE) unless value.nil?
|
|
319
|
+
end
|
|
306
320
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
321
|
+
def set_fleet_stable_config_value
|
|
322
|
+
fleet_config = StableConfig.configuration.dig(:fleet, :config)
|
|
323
|
+
return if fleet_config.nil?
|
|
324
|
+
|
|
325
|
+
value = get_value_from(fleet_config, 'fleet')
|
|
326
|
+
set(value, precedence: Precedence::FLEET_STABLE) unless value.nil?
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
def get_value_from_env
|
|
330
|
+
env = definition.env
|
|
331
|
+
return unless env
|
|
332
|
+
|
|
333
|
+
value = DATADOG_ENV[env]
|
|
334
|
+
coerce_env_variable(value) unless value.nil?
|
|
335
|
+
rescue ArgumentError
|
|
336
|
+
# This will be raised when the type is set to :int or :float but an invalid env var value is provided.
|
|
337
|
+
raise ArgumentError,
|
|
338
|
+
# ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
|
|
339
|
+
# @type var env: String
|
|
340
|
+
"Expected environment variable #{DATADOG_ENV.resolve_env(env)} " \
|
|
341
|
+
"to be a #{definition.type}, but '#{value}' was provided."
|
|
342
|
+
end
|
|
311
343
|
|
|
312
|
-
|
|
344
|
+
def get_value_from(source_env, source_name)
|
|
345
|
+
env = definition.env
|
|
346
|
+
return unless env
|
|
313
347
|
|
|
314
|
-
|
|
348
|
+
# An instance of ConfigHelper could be used with any Hash but this is the only place where
|
|
349
|
+
# it's used with something else than ENV, let's keep it simple for now by overriding the source_env parameter.
|
|
350
|
+
value = DATADOG_ENV.get_environment_variable(env, source_env: source_env)
|
|
351
|
+
coerce_env_variable(value) unless value.nil?
|
|
315
352
|
rescue ArgumentError
|
|
353
|
+
# This will be raised when the type is set to :int or :float but an invalid env var value is provided.
|
|
316
354
|
raise ArgumentError,
|
|
317
|
-
|
|
318
|
-
|
|
355
|
+
# ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
|
|
356
|
+
# @type var env: String
|
|
357
|
+
"Expected #{source_name} configuration file variable #{DATADOG_ENV.resolve_env(env, source_env: source_env)} " \
|
|
358
|
+
"to be a #{definition.type}, but '#{value}' was provided."
|
|
319
359
|
end
|
|
320
360
|
|
|
321
361
|
# Anchor object that represents a value that is not set.
|
|
@@ -13,7 +13,6 @@ module Datadog
|
|
|
13
13
|
:default,
|
|
14
14
|
:default_proc,
|
|
15
15
|
:env,
|
|
16
|
-
:deprecated_env,
|
|
17
16
|
:env_parser,
|
|
18
17
|
:name,
|
|
19
18
|
:after_set,
|
|
@@ -22,11 +21,10 @@ module Datadog
|
|
|
22
21
|
:type,
|
|
23
22
|
:type_options
|
|
24
23
|
|
|
25
|
-
def initialize(name, meta
|
|
24
|
+
def initialize(name, meta, &block)
|
|
26
25
|
@default = meta[:default]
|
|
27
26
|
@default_proc = meta[:default_proc]
|
|
28
27
|
@env = meta[:env]
|
|
29
|
-
@deprecated_env = meta[:deprecated_env]
|
|
30
28
|
@env_parser = meta[:env_parser]
|
|
31
29
|
@name = name.to_sym
|
|
32
30
|
@after_set = meta[:after_set]
|
|
@@ -44,14 +42,13 @@ module Datadog
|
|
|
44
42
|
# Acts as DSL for building OptionDefinitions
|
|
45
43
|
# @public_api
|
|
46
44
|
class Builder
|
|
47
|
-
|
|
45
|
+
InvalidOptionError = Class.new(StandardError)
|
|
48
46
|
|
|
49
47
|
attr_reader \
|
|
50
48
|
:helpers
|
|
51
49
|
|
|
52
50
|
def initialize(name, options = {})
|
|
53
51
|
@env = nil
|
|
54
|
-
@deprecated_env = nil
|
|
55
52
|
@env_parser = nil
|
|
56
53
|
@default = nil
|
|
57
54
|
@default_proc = nil
|
|
@@ -71,14 +68,10 @@ module Datadog
|
|
|
71
68
|
validate_options!
|
|
72
69
|
end
|
|
73
70
|
|
|
74
|
-
def env(value)
|
|
71
|
+
def env(value) # standard:disable Style/TrivialAccessors
|
|
75
72
|
@env = value
|
|
76
73
|
end
|
|
77
74
|
|
|
78
|
-
def deprecated_env(value)
|
|
79
|
-
@deprecated_env = value
|
|
80
|
-
end
|
|
81
|
-
|
|
82
75
|
# Invoked when the option is first read, and {#env} is defined.
|
|
83
76
|
# The block provided is only invoked if the environment variable is present (not-nil).
|
|
84
77
|
def env_parser(&block)
|
|
@@ -111,7 +104,7 @@ module Datadog
|
|
|
111
104
|
|
|
112
105
|
def type(value, nilable: false)
|
|
113
106
|
@type = value
|
|
114
|
-
@type_options = {
|
|
107
|
+
@type_options = {nilable: nilable}
|
|
115
108
|
|
|
116
109
|
value
|
|
117
110
|
end
|
|
@@ -123,7 +116,6 @@ module Datadog
|
|
|
123
116
|
default(options[:default]) if options.key?(:default)
|
|
124
117
|
default_proc(&options[:default_proc]) if options.key?(:default_proc)
|
|
125
118
|
env(options[:env]) if options.key?(:env)
|
|
126
|
-
deprecated_env(options[:deprecated_env]) if options.key?(:deprecated_env)
|
|
127
119
|
env_parser(&options[:env_parser]) if options.key?(:env_parser)
|
|
128
120
|
after_set(&options[:after_set]) if options.key?(:after_set)
|
|
129
121
|
resetter(&options[:resetter]) if options.key?(:resetter)
|
|
@@ -140,7 +132,6 @@ module Datadog
|
|
|
140
132
|
default: @default,
|
|
141
133
|
default_proc: @default_proc,
|
|
142
134
|
env: @env,
|
|
143
|
-
deprecated_env: @deprecated_env,
|
|
144
135
|
env_parser: @env_parser,
|
|
145
136
|
after_set: @after_set,
|
|
146
137
|
resetter: @resetter,
|
|
@@ -156,7 +147,7 @@ module Datadog
|
|
|
156
147
|
if !@default.nil? && @default_proc
|
|
157
148
|
raise InvalidOptionError,
|
|
158
149
|
'Using `default` and `default_proc` is not allowed. Please use one or the other.' \
|
|
159
|
-
'If you want to store a block as the default value use `default_proc`'\
|
|
150
|
+
'If you want to store a block as the default value use `default_proc`' \
|
|
160
151
|
' otherwise use `default`'
|
|
161
152
|
end
|
|
162
153
|
end
|
|
@@ -18,7 +18,7 @@ module Datadog
|
|
|
18
18
|
module ClassMethods
|
|
19
19
|
def options
|
|
20
20
|
# Allows for class inheritance of option definitions
|
|
21
|
-
@options ||= superclass <= Options ? superclass.options.dup : {}
|
|
21
|
+
@options ||= (superclass <= Options) ? superclass.options.dup : {}
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
protected
|
|
@@ -40,14 +40,19 @@ module Datadog
|
|
|
40
40
|
|
|
41
41
|
def default_helpers(name)
|
|
42
42
|
option_name = name.to_sym
|
|
43
|
-
|
|
43
|
+
# @type var opt_getter: Configuration::OptionDefinition::helper_proc
|
|
44
|
+
opt_getter = proc do
|
|
45
|
+
# These Procs uses `get/set_option`, but we only add them to the OptionDefinition helpers here.
|
|
46
|
+
# Steep is right that these methods are not defined, but we only run these Procs in instance context.
|
|
47
|
+
get_option(option_name) # steep:ignore NoMethod
|
|
48
|
+
end
|
|
49
|
+
# @type var opt_setter: Configuration::OptionDefinition::helper_proc
|
|
50
|
+
opt_setter = proc do |value|
|
|
51
|
+
set_option(option_name, value) # steep:ignore NoMethod
|
|
52
|
+
end
|
|
44
53
|
{
|
|
45
|
-
option_name.to_sym =>
|
|
46
|
-
|
|
47
|
-
end,
|
|
48
|
-
"#{option_name}=".to_sym => proc do |value|
|
|
49
|
-
set_option(option_name, value)
|
|
50
|
-
end
|
|
54
|
+
option_name.to_sym => opt_getter,
|
|
55
|
+
:"#{option_name}=" => opt_setter
|
|
51
56
|
}
|
|
52
57
|
end
|
|
53
58
|
|
|
@@ -68,7 +73,7 @@ module Datadog
|
|
|
68
73
|
end
|
|
69
74
|
|
|
70
75
|
def set_option(name, value, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
71
|
-
resolve_option(name).set(value, precedence: precedence
|
|
76
|
+
resolve_option(name).set(value, precedence: precedence)
|
|
72
77
|
end
|
|
73
78
|
|
|
74
79
|
def unset_option(name, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
@@ -113,13 +118,10 @@ module Datadog
|
|
|
113
118
|
|
|
114
119
|
assert_valid_option!(name)
|
|
115
120
|
definition = self.class.options[name]
|
|
121
|
+
# @type self: Configuration::Options::GenericSettingsClass
|
|
116
122
|
options[name] = definition.build(self)
|
|
117
123
|
end
|
|
118
124
|
|
|
119
|
-
def resolved_env(name)
|
|
120
|
-
return options[name].resolved_env if options.key?(name)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
125
|
def assert_valid_option!(name)
|
|
124
126
|
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
125
127
|
end
|