datadog 2.19.0 → 2.21.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 +52 -1
- data/README.md +0 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_api/process_discovery.c +5 -5
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/api_security/route_extractor.rb +6 -2
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- 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/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- 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 +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- 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.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -4
- data/lib/datadog/core/configuration/components.rb +8 -2
- 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 +0 -1
- data/lib/datadog/core/configuration/option.rb +55 -51
- data/lib/datadog/core/configuration/option_definition.rb +2 -11
- data/lib/datadog/core/configuration/options.rb +14 -12
- data/lib/datadog/core/configuration/settings.rb +10 -6
- data/lib/datadog/core/configuration/supported_configurations.rb +335 -0
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/environment/ext.rb +0 -2
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/variable_helpers.rb +3 -3
- data/lib/datadog/core/metrics/client.rb +2 -2
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
- data/lib/datadog/core/process_discovery.rb +46 -23
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
- data/lib/datadog/core.rb +2 -0
- data/lib/datadog/di/boot.rb +9 -1
- data/lib/datadog/di/component.rb +7 -0
- 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_notification_builder.rb +1 -1
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di.rb +0 -1
- data/lib/datadog/kit/appsec/events/v2.rb +5 -4
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- 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 +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling/collectors/info.rb +1 -1
- data/lib/datadog/profiling/ext.rb +2 -1
- data/lib/datadog/profiling/http_transport.rb +1 -1
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling.rb +6 -8
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -5
- data/lib/datadog/tracing/configuration/settings.rb +29 -7
- 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/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 +4 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
- 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 +2 -2
- 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/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/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 +2 -2
- 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 +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -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 +4 -2
- 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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +36 -25
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- 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/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/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- 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 +4 -4
- 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/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- 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/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 +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- 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 +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- 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 +3 -2
- 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/runner.rb +5 -4
- 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 +3 -3
- 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/integration.rb +1 -1
- 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/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/diagnostics/environment_logger.rb +5 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- 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 +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- 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/tagging.rb +4 -4
- 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/rule_sampler.rb +30 -30
- 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 +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +9 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- 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/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- metadata +18 -6
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'supported_configurations'
|
4
|
+
require_relative '../logger'
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module Core
|
8
|
+
module Configuration
|
9
|
+
class ConfigHelper
|
10
|
+
def initialize(
|
11
|
+
source_env: ENV,
|
12
|
+
supported_configurations: SUPPORTED_CONFIGURATIONS,
|
13
|
+
aliases: ALIASES,
|
14
|
+
alias_to_canonical: ALIAS_TO_CANONICAL,
|
15
|
+
raise_on_unknown_env_var: false
|
16
|
+
)
|
17
|
+
@source_env = source_env
|
18
|
+
@supported_configurations = supported_configurations
|
19
|
+
@aliases = aliases
|
20
|
+
@alias_to_canonical = alias_to_canonical
|
21
|
+
@raise_on_unknown_env_var = raise_on_unknown_env_var
|
22
|
+
end
|
23
|
+
|
24
|
+
def [](name)
|
25
|
+
get_environment_variable(name)
|
26
|
+
end
|
27
|
+
|
28
|
+
def fetch(name, default_value = UNSET)
|
29
|
+
if (item = get_environment_variable(name))
|
30
|
+
return item
|
31
|
+
end
|
32
|
+
|
33
|
+
return yield(name) if block_given?
|
34
|
+
return default_value unless default_value == UNSET
|
35
|
+
|
36
|
+
raise KeyError, "key not found: #{name}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def key?(name)
|
40
|
+
!get_environment_variable(name).nil?
|
41
|
+
end
|
42
|
+
|
43
|
+
alias_method :has_key?, :key?
|
44
|
+
alias_method :include?, :key?
|
45
|
+
alias_method :member?, :key?
|
46
|
+
|
47
|
+
# Returns the environment variable value if the environment variable is a supported Datadog configuration (starts with DD_ or OTEL_)
|
48
|
+
# or if it is not a Datadog configuration. Otherwise, it returns nil.
|
49
|
+
#
|
50
|
+
# @param name [String] Environment variable name
|
51
|
+
# @param default_value [String, nil] Default value to return if the environment variable is not set
|
52
|
+
# @param source_env [Hash[String, String]] Environment variables to use
|
53
|
+
# @return [String, nil] The environment variable value
|
54
|
+
# @raise [RuntimeError] if the configuration is not supported
|
55
|
+
def get_environment_variable(name, default_value = nil, source_env: @source_env)
|
56
|
+
# datadog-ci-rb is using dd-trace-rb config DSL, which uses this method.
|
57
|
+
# Until we've correctly implemented support for datadog-ci-rb, we disable config inversion if ci is enabled.
|
58
|
+
if !defined?(::Datadog::CI) &&
|
59
|
+
(name.start_with?('DD_', 'OTEL_') || @alias_to_canonical[name]) &&
|
60
|
+
!@supported_configurations[name]
|
61
|
+
if defined?(@raise_on_unknown_env_var) && @raise_on_unknown_env_var # Only enabled for tests!
|
62
|
+
if @alias_to_canonical[name]
|
63
|
+
raise "Please use #{@alias_to_canonical[name]} instead of #{name}. See docs/AccessEnvironmentVariables.md for details."
|
64
|
+
else
|
65
|
+
raise "Missing #{name} env/configuration in \"supported-configurations.json\" file. See docs/AccessEnvironmentVariables.md for details."
|
66
|
+
end
|
67
|
+
end
|
68
|
+
# TODO: Send telemetry to know if we ever miss an env var
|
69
|
+
return nil
|
70
|
+
end
|
71
|
+
|
72
|
+
env_value = source_env[name]
|
73
|
+
if env_value.nil? && @aliases[name]
|
74
|
+
@aliases[name].each do |alias_name|
|
75
|
+
return source_env[alias_name] if source_env[alias_name]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
env_value || default_value
|
80
|
+
end
|
81
|
+
|
82
|
+
# Only used in error message creation. Match get_environment_variable logic to return the resolved environment variable name.
|
83
|
+
def resolve_env(name, source_env: @source_env)
|
84
|
+
if source_env[name].nil? && @aliases[name]
|
85
|
+
@aliases[name].each do |alias_name|
|
86
|
+
return alias_name if source_env[alias_name]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
name
|
91
|
+
end
|
92
|
+
|
93
|
+
# Anchor object that represents an undefined default value.
|
94
|
+
# This is necessary because `nil` is a valid default value.
|
95
|
+
UNSET = Object.new
|
96
|
+
private_constant :UNSET
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -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
|
@@ -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
|
|
@@ -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.
|
@@ -75,7 +83,7 @@ module Datadog
|
|
75
83
|
#
|
76
84
|
# @param value [Object] the new value to be associated with this option
|
77
85
|
# @param precedence [Precedence] from what precedence order this new value comes from
|
78
|
-
def set(value, precedence: Precedence::PROGRAMMATIC
|
86
|
+
def set(value, precedence: Precedence::PROGRAMMATIC)
|
79
87
|
# Is there a higher precedence value set?
|
80
88
|
if @precedence_set > precedence
|
81
89
|
# This should be uncommon, as higher precedence values tend to
|
@@ -94,7 +102,7 @@ module Datadog
|
|
94
102
|
return @value
|
95
103
|
end
|
96
104
|
|
97
|
-
internal_set(value, precedence
|
105
|
+
internal_set(value, precedence)
|
98
106
|
end
|
99
107
|
|
100
108
|
def unset(precedence)
|
@@ -112,7 +120,7 @@ module Datadog
|
|
112
120
|
# Look for value that is set.
|
113
121
|
# The hash `@value_per_precedence` has a custom default value of `UNSET`.
|
114
122
|
if (value = @value_per_precedence[p]) != UNSET
|
115
|
-
internal_set(value, p
|
123
|
+
internal_set(value, p)
|
116
124
|
return nil
|
117
125
|
end
|
118
126
|
end
|
@@ -172,20 +180,17 @@ module Datadog
|
|
172
180
|
private
|
173
181
|
|
174
182
|
def coerce_env_variable(value)
|
175
|
-
|
183
|
+
env_parser = @definition.env_parser
|
184
|
+
return context_exec(value, &env_parser) if env_parser
|
176
185
|
|
177
186
|
case @definition.type
|
178
187
|
when :hash
|
179
188
|
values = value.split(',') # By default we only want to support comma separated strings
|
180
189
|
|
181
|
-
values.
|
182
|
-
v.gsub!(/\A[\s,]
|
190
|
+
values.each_with_object({}) do |v, hash| # $ Hash[String, String]
|
191
|
+
v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
|
192
|
+
next if v.empty?
|
183
193
|
|
184
|
-
v.empty? ? nil : v
|
185
|
-
end
|
186
|
-
|
187
|
-
values.compact!
|
188
|
-
values.each.with_object({}) do |v, hash|
|
189
194
|
pair = v.split(':', 2)
|
190
195
|
hash[pair[0]] = pair[1]
|
191
196
|
end
|
@@ -196,14 +201,12 @@ module Datadog
|
|
196
201
|
when :array
|
197
202
|
values = value.split(',')
|
198
203
|
|
199
|
-
values.
|
200
|
-
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?
|
201
207
|
|
202
|
-
|
208
|
+
arr << v
|
203
209
|
end
|
204
|
-
|
205
|
-
values.compact!
|
206
|
-
values
|
207
210
|
when :bool
|
208
211
|
string_value = value.strip
|
209
212
|
string_value = string_value.downcase
|
@@ -277,12 +280,11 @@ module Datadog
|
|
277
280
|
end
|
278
281
|
|
279
282
|
# Directly manipulates the current value and currently set precedence.
|
280
|
-
def internal_set(value, precedence
|
283
|
+
def internal_set(value, precedence)
|
281
284
|
old_value = @value
|
282
285
|
(@value = context_exec(validate_type(value), old_value, &definition.setter)).tap do |v|
|
283
286
|
@is_set = true
|
284
287
|
@precedence_set = precedence
|
285
|
-
@resolved_env = resolved_env
|
286
288
|
# Store original value to ensure we can always safely call `#internal_set`
|
287
289
|
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
288
290
|
# on the original value, not on a value that has already been processed by `definition.setter`.
|
@@ -304,54 +306,56 @@ module Datadog
|
|
304
306
|
end
|
305
307
|
|
306
308
|
def set_env_value
|
307
|
-
value
|
308
|
-
set(value, precedence: Precedence::ENVIRONMENT
|
309
|
+
value = get_value_from_env
|
310
|
+
set(value, precedence: Precedence::ENVIRONMENT) unless value.nil?
|
309
311
|
end
|
310
312
|
|
311
313
|
def set_customer_stable_config_value
|
312
314
|
customer_config = StableConfig.configuration.dig(:local, :config)
|
313
315
|
return if customer_config.nil?
|
314
316
|
|
315
|
-
value
|
316
|
-
set(value, precedence: Precedence::LOCAL_STABLE
|
317
|
+
value = get_value_from(customer_config, 'local')
|
318
|
+
set(value, precedence: Precedence::LOCAL_STABLE) unless value.nil?
|
317
319
|
end
|
318
320
|
|
319
321
|
def set_fleet_stable_config_value
|
320
322
|
fleet_config = StableConfig.configuration.dig(:fleet, :config)
|
321
323
|
return if fleet_config.nil?
|
322
324
|
|
323
|
-
value
|
324
|
-
set(value, precedence: Precedence::FLEET_STABLE
|
325
|
+
value = get_value_from(fleet_config, 'fleet')
|
326
|
+
set(value, precedence: Precedence::FLEET_STABLE) unless value.nil?
|
325
327
|
end
|
326
328
|
|
327
|
-
def
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
if definition.env
|
332
|
-
Array(definition.env).each do |env|
|
333
|
-
next if env_vars[env].nil?
|
329
|
+
def get_value_from_env
|
330
|
+
env = definition.env
|
331
|
+
return unless env
|
334
332
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
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
|
344
343
|
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
end
|
344
|
+
def get_value_from(source_env, source_name)
|
345
|
+
env = definition.env
|
346
|
+
return unless env
|
349
347
|
|
350
|
-
|
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?
|
351
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.
|
352
354
|
raise ArgumentError,
|
353
|
-
|
354
|
-
|
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."
|
355
359
|
end
|
356
360
|
|
357
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
|
@@ -75,10 +72,6 @@ module Datadog
|
|
75
72
|
@env = value
|
76
73
|
end
|
77
74
|
|
78
|
-
def deprecated_env(value) # standard:disable Style/TrivialAccessors
|
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)
|
@@ -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,
|
@@ -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}=" => 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
|
-
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
|
@@ -122,8 +122,8 @@ module Datadog
|
|
122
122
|
# @default `DD_TRACE_DEBUG` environment variable, otherwise `false`
|
123
123
|
# @return [Boolean]
|
124
124
|
option :debug do |o|
|
125
|
-
|
126
|
-
|
125
|
+
# Note: Alias (OTEL_LOG_LEVEL) defined in supported-configurations.json
|
126
|
+
o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED
|
127
127
|
o.default false
|
128
128
|
o.type :bool
|
129
129
|
o.env_parser do |value|
|
@@ -212,6 +212,7 @@ module Datadog
|
|
212
212
|
# Log level for `Datadog.logger`.
|
213
213
|
# @see Logger::Severity
|
214
214
|
# @return Logger::Severity
|
215
|
+
# TODO: Add environment variable for this `DD_TRACE_LOG_LEVEL`
|
215
216
|
option :level, default: ::Logger::INFO
|
216
217
|
end
|
217
218
|
|
@@ -485,7 +486,7 @@ module Datadog
|
|
485
486
|
# @default `DD_PROFILING_GVL_ENABLED` environment variable as a boolean, otherwise `true`
|
486
487
|
option :gvl_enabled do |o|
|
487
488
|
o.type :bool
|
488
|
-
|
489
|
+
# Note: Deprecated alias (DD_PROFILING_PREVIEW_GVL_ENABLED) defined in supported-configurations.json
|
489
490
|
o.env 'DD_PROFILING_GVL_ENABLED'
|
490
491
|
o.default true
|
491
492
|
end
|
@@ -604,7 +605,8 @@ module Datadog
|
|
604
605
|
|
605
606
|
option :experimental_runtime_id_enabled do |o|
|
606
607
|
o.type :bool
|
607
|
-
|
608
|
+
# Note: Alias (DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED) defined in supported-configurations.json
|
609
|
+
o.env 'DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED'
|
608
610
|
o.default false
|
609
611
|
end
|
610
612
|
|
@@ -620,7 +622,8 @@ module Datadog
|
|
620
622
|
o.type :string, nilable: true
|
621
623
|
|
622
624
|
# NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
623
|
-
|
625
|
+
# Note: Alias (OTEL_SERVICE_NAME) defined in supported-configurations.json
|
626
|
+
o.env Core::Environment::Ext::ENV_SERVICE
|
624
627
|
o.default Core::Environment::Ext::FALLBACK_SERVICE_NAME
|
625
628
|
|
626
629
|
# There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
|
@@ -655,7 +658,8 @@ module Datadog
|
|
655
658
|
# @return [Hash<String,String>]
|
656
659
|
option :tags do |o|
|
657
660
|
o.type :hash, nilable: true
|
658
|
-
|
661
|
+
# Note: Alias (OTEL_RESOURCE_ATTRIBUTES) defined in supported-configurations.json
|
662
|
+
o.env Core::Environment::Ext::ENV_TAGS
|
659
663
|
o.env_parser do |env_value|
|
660
664
|
# Parses a string containing key-value pairs and returns a hash.
|
661
665
|
# Key-value pairs are delimited by ':' OR `=`, and pairs are separated by whitespace, comma, OR BOTH.
|