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
|
@@ -4,6 +4,7 @@ require 'uri'
|
|
|
4
4
|
|
|
5
5
|
require_relative 'settings'
|
|
6
6
|
require_relative 'ext'
|
|
7
|
+
require_relative 'agent_settings'
|
|
7
8
|
require_relative '../transport/ext'
|
|
8
9
|
|
|
9
10
|
module Datadog
|
|
@@ -19,49 +20,6 @@ module Datadog
|
|
|
19
20
|
# Whenever there is a conflict (different configurations are provided in different orders), it MUST warn the users
|
|
20
21
|
# about it and pick a value based on the following priority: code > environment variable > defaults.
|
|
21
22
|
class AgentSettingsResolver
|
|
22
|
-
# Immutable container for the resulting settings
|
|
23
|
-
class AgentSettings
|
|
24
|
-
attr_reader :adapter, :ssl, :hostname, :port, :uds_path, :timeout_seconds
|
|
25
|
-
|
|
26
|
-
def initialize(adapter: nil, ssl: nil, hostname: nil, port: nil, uds_path: nil, timeout_seconds: nil)
|
|
27
|
-
@adapter = adapter
|
|
28
|
-
@ssl = ssl
|
|
29
|
-
@hostname = hostname
|
|
30
|
-
@port = port
|
|
31
|
-
@uds_path = uds_path
|
|
32
|
-
@timeout_seconds = timeout_seconds
|
|
33
|
-
freeze
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def url
|
|
37
|
-
case adapter
|
|
38
|
-
when Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
39
|
-
hostname = self.hostname
|
|
40
|
-
hostname = "[#{hostname}]" if hostname =~ IPV6_REGEXP
|
|
41
|
-
"#{ssl ? 'https' : 'http'}://#{hostname}:#{port}/"
|
|
42
|
-
when Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
|
|
43
|
-
"unix://#{uds_path}"
|
|
44
|
-
else
|
|
45
|
-
raise ArgumentError, "Unexpected adapter: #{adapter}"
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def ==(other)
|
|
50
|
-
self.class == other.class &&
|
|
51
|
-
adapter == other.adapter &&
|
|
52
|
-
ssl == other.ssl &&
|
|
53
|
-
hostname == other.hostname &&
|
|
54
|
-
port == other.port &&
|
|
55
|
-
uds_path == other.uds_path &&
|
|
56
|
-
timeout_seconds == other.timeout_seconds
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# IPv6 regular expression from
|
|
61
|
-
# https://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
|
|
62
|
-
# Does not match IPv4 addresses.
|
|
63
|
-
IPV6_REGEXP = /\A(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\z)/.freeze # rubocop:disable Layout/LineLength
|
|
64
|
-
|
|
65
23
|
def self.call(settings, logger: Datadog.logger)
|
|
66
24
|
new(settings, logger: logger).send(:call)
|
|
67
25
|
end
|
|
@@ -110,7 +68,7 @@ module Datadog
|
|
|
110
68
|
),
|
|
111
69
|
DetectedConfiguration.new(
|
|
112
70
|
friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_HOST} environment variable",
|
|
113
|
-
value:
|
|
71
|
+
value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_HOST]
|
|
114
72
|
)
|
|
115
73
|
)
|
|
116
74
|
end
|
|
@@ -129,7 +87,7 @@ module Datadog
|
|
|
129
87
|
),
|
|
130
88
|
try_parsing_as_integer(
|
|
131
89
|
friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT} environment variable",
|
|
132
|
-
value:
|
|
90
|
+
value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT],
|
|
133
91
|
)
|
|
134
92
|
)
|
|
135
93
|
end
|
|
@@ -158,9 +116,9 @@ module Datadog
|
|
|
158
116
|
value: settings.agent.timeout_seconds,
|
|
159
117
|
),
|
|
160
118
|
try_parsing_as_integer(
|
|
161
|
-
friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS} "\
|
|
119
|
+
friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS} " \
|
|
162
120
|
'environment variable',
|
|
163
|
-
value:
|
|
121
|
+
value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS],
|
|
164
122
|
)
|
|
165
123
|
)
|
|
166
124
|
end
|
|
@@ -298,7 +256,7 @@ module Datadog
|
|
|
298
256
|
def parsed_url
|
|
299
257
|
return @parsed_url if defined?(@parsed_url)
|
|
300
258
|
|
|
301
|
-
unparsed_url_from_env =
|
|
259
|
+
unparsed_url_from_env = DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_URL]
|
|
302
260
|
|
|
303
261
|
@parsed_url =
|
|
304
262
|
if unparsed_url_from_env
|
|
@@ -338,13 +296,13 @@ module Datadog
|
|
|
338
296
|
log_warning(
|
|
339
297
|
'Configuration mismatch: values differ between ' \
|
|
340
298
|
"#{detected_configurations_in_priority_order
|
|
341
|
-
.map { |config| "#{config.friendly_name} (#{config.value.inspect})" }.join(
|
|
299
|
+
.map { |config| "#{config.friendly_name} (#{config.value.inspect})" }.join(" and ")}" \
|
|
342
300
|
". Using #{detected_configurations_in_priority_order.first.value.inspect} and ignoring other configuration."
|
|
343
301
|
)
|
|
344
302
|
end
|
|
345
303
|
|
|
346
304
|
def log_warning(message)
|
|
347
|
-
logger
|
|
305
|
+
logger&.warn(message)
|
|
348
306
|
end
|
|
349
307
|
|
|
350
308
|
def http_scheme?(uri)
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rubocop:disable Style/*
|
|
4
|
+
|
|
5
|
+
require 'uri'
|
|
6
|
+
|
|
7
|
+
require_relative 'agent_settings_resolver'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Core
|
|
11
|
+
module Configuration
|
|
12
|
+
# Agent settings resolver for agentless operations (currently, telemetry
|
|
13
|
+
# in agentless mode).
|
|
14
|
+
#
|
|
15
|
+
# The terminology gets a little confusing here, but transports communicate
|
|
16
|
+
# with servers which are - for most components in the tracer - the
|
|
17
|
+
# (local) agent. Hence, "agent settings" to refer to where the server
|
|
18
|
+
# is located. Telemetry supports sending to the local agent but also
|
|
19
|
+
# implements agentless mode where it sends directly to Datadog intake
|
|
20
|
+
# endpoints. The agentless mode is configured using different settings,
|
|
21
|
+
# and this class produces AgentSettings instances when in agentless mode.
|
|
22
|
+
#
|
|
23
|
+
# Agentless settings resolver uses the following configuration sources:
|
|
24
|
+
#
|
|
25
|
+
# 1. url_override constructor parameter, if provided
|
|
26
|
+
# 2. Built-in default host/port/TLS settings for the backend
|
|
27
|
+
# intake endpoint
|
|
28
|
+
#
|
|
29
|
+
# The agentless resolver does NOT use agent settings (since it is
|
|
30
|
+
# for agentless operation), specifically it ignores:
|
|
31
|
+
#
|
|
32
|
+
# - c.agent.host
|
|
33
|
+
# - DD_AGENT_HOST
|
|
34
|
+
# - c.agent.port
|
|
35
|
+
# - DD_AGENT_PORT
|
|
36
|
+
#
|
|
37
|
+
# However, agentless resolver does respect the timeout specified via
|
|
38
|
+
# c.agent.timeout_seconds or DD_TRACE_AGENT_TIMEOUT_SECONDS.
|
|
39
|
+
class AgentlessSettingsResolver < AgentSettingsResolver
|
|
40
|
+
# To avoid coupling this class to telemetry, the URL override is
|
|
41
|
+
# taken here as a parameter instead of being read out of
|
|
42
|
+
# c.telemetry.agentless_url_override. For the same reason, the
|
|
43
|
+
# +url_override_source+ parameter should be set to the string
|
|
44
|
+
# "c.telemetry.agentless_url_override".
|
|
45
|
+
def self.call(settings, host_prefix:, url_override: nil, url_override_source: nil, logger: Datadog.logger)
|
|
46
|
+
new(
|
|
47
|
+
settings,
|
|
48
|
+
host_prefix: host_prefix,
|
|
49
|
+
url_override: url_override,
|
|
50
|
+
url_override_source: url_override_source,
|
|
51
|
+
logger: logger
|
|
52
|
+
).send(:call)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
attr_reader \
|
|
58
|
+
:host_prefix,
|
|
59
|
+
:url_override,
|
|
60
|
+
:url_override_source
|
|
61
|
+
|
|
62
|
+
def initialize(settings, host_prefix:, url_override: nil, url_override_source: nil, logger: Datadog.logger)
|
|
63
|
+
if url_override && url_override_source.nil?
|
|
64
|
+
raise ArgumentError, 'url_override_source must be provided when url_override is provided'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
super(settings, logger: logger)
|
|
68
|
+
|
|
69
|
+
@host_prefix = host_prefix
|
|
70
|
+
@url_override = url_override
|
|
71
|
+
@url_override_source = url_override_source
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def hostname
|
|
75
|
+
if should_use_uds?
|
|
76
|
+
nil
|
|
77
|
+
else
|
|
78
|
+
configured_hostname || "#{host_prefix}.#{settings.site}"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def configured_hostname
|
|
83
|
+
return @configured_hostname if defined?(@configured_hostname)
|
|
84
|
+
|
|
85
|
+
if should_use_uds?
|
|
86
|
+
nil
|
|
87
|
+
else
|
|
88
|
+
@configured_hostname = (parsed_url.hostname if parsed_url)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def configured_port
|
|
93
|
+
return @configured_port if defined?(@configured_port)
|
|
94
|
+
|
|
95
|
+
@configured_port = (parsed_url.port if parsed_url)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Note that this method should always return true or false
|
|
99
|
+
def ssl?
|
|
100
|
+
if configured_hostname
|
|
101
|
+
configured_ssl || false
|
|
102
|
+
else
|
|
103
|
+
if should_use_uds?
|
|
104
|
+
false
|
|
105
|
+
else
|
|
106
|
+
# If no hostname is specified, we are communicating with the
|
|
107
|
+
# default Datadog intake, which uses TLS.
|
|
108
|
+
true
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Note that this method can return nil
|
|
114
|
+
def configured_ssl
|
|
115
|
+
return @configured_ssl if defined?(@configured_ssl)
|
|
116
|
+
|
|
117
|
+
@configured_ssl = (parsed_url_ssl? if parsed_url)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def port
|
|
121
|
+
if configured_port
|
|
122
|
+
configured_port
|
|
123
|
+
else
|
|
124
|
+
if should_use_uds?
|
|
125
|
+
nil
|
|
126
|
+
else
|
|
127
|
+
# If no hostname is specified, we are communicating with the
|
|
128
|
+
# default Datadog intake, which exists on port 443.
|
|
129
|
+
443
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def mixed_http_and_uds
|
|
135
|
+
false
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def configured_uds_path
|
|
139
|
+
return @configured_uds_path if defined?(@configured_uds_path)
|
|
140
|
+
|
|
141
|
+
parsed_url_uds_path
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def can_use_uds?
|
|
145
|
+
# While in theory agentless transport could communicate via UDS,
|
|
146
|
+
# in practice "agentless" means we are communicating with Datadog
|
|
147
|
+
# infrastructure which is always remote.
|
|
148
|
+
# Permit UDS for proxy usage?
|
|
149
|
+
!configured_uds_path.nil?
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def parsed_url
|
|
153
|
+
return @parsed_url if defined?(@parsed_url)
|
|
154
|
+
|
|
155
|
+
@parsed_url =
|
|
156
|
+
if @url_override
|
|
157
|
+
parsed = URI.parse(@url_override)
|
|
158
|
+
|
|
159
|
+
# Agentless URL should never refer to a UDS?
|
|
160
|
+
if http_scheme?(parsed) || unix_scheme?(parsed)
|
|
161
|
+
parsed
|
|
162
|
+
else
|
|
163
|
+
log_warning(
|
|
164
|
+
"Invalid URI scheme '#{parsed.scheme}' for #{url_override_source}. " \
|
|
165
|
+
"Ignoring the contents of #{url_override_source}."
|
|
166
|
+
)
|
|
167
|
+
nil
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# rubocop:enable Style/*
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'agent_settings_resolver'
|
|
4
|
+
require_relative 'components_state'
|
|
4
5
|
require_relative 'ext'
|
|
6
|
+
require_relative 'deprecations'
|
|
5
7
|
require_relative '../diagnostics/environment_logger'
|
|
6
8
|
require_relative '../diagnostics/health'
|
|
7
9
|
require_relative '../logger'
|
|
8
10
|
require_relative '../runtime/metrics'
|
|
9
11
|
require_relative '../telemetry/component'
|
|
10
12
|
require_relative '../workers/runtime_metrics'
|
|
11
|
-
|
|
12
13
|
require_relative '../remote/component'
|
|
13
14
|
require_relative '../../tracing/component'
|
|
14
15
|
require_relative '../../profiling/component'
|
|
15
16
|
require_relative '../../appsec/component'
|
|
16
17
|
require_relative '../../di/component'
|
|
18
|
+
require_relative '../../error_tracking/component'
|
|
17
19
|
require_relative '../crashtracking/component'
|
|
18
|
-
|
|
19
20
|
require_relative '../environment/agent_info'
|
|
21
|
+
require_relative '../process_discovery'
|
|
20
22
|
|
|
21
23
|
module Datadog
|
|
22
24
|
module Core
|
|
@@ -24,14 +26,12 @@ module Datadog
|
|
|
24
26
|
# Global components for the trace library.
|
|
25
27
|
class Components
|
|
26
28
|
class << self
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def build_health_metrics(settings)
|
|
29
|
+
def build_health_metrics(settings, logger, telemetry)
|
|
30
30
|
settings = settings.health_metrics
|
|
31
|
-
options = {
|
|
31
|
+
options = {enabled: settings.enabled}
|
|
32
32
|
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
|
33
33
|
|
|
34
|
-
Core::Diagnostics::Health::Metrics.new(**options)
|
|
34
|
+
Core::Diagnostics::Health::Metrics.new(telemetry: telemetry, logger: logger, **options)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def build_logger(settings)
|
|
@@ -41,22 +41,24 @@ module Datadog
|
|
|
41
41
|
logger
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
def build_runtime_metrics(settings)
|
|
45
|
-
options = {
|
|
44
|
+
def build_runtime_metrics(settings, logger, telemetry)
|
|
45
|
+
options = {enabled: settings.runtime_metrics.enabled}
|
|
46
46
|
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
|
47
47
|
options[:services] = [settings.service] unless settings.service.nil?
|
|
48
|
+
options[:experimental_runtime_id_enabled] = settings.runtime_metrics.experimental_runtime_id_enabled
|
|
48
49
|
|
|
49
|
-
Core::Runtime::Metrics.new(**options)
|
|
50
|
+
Core::Runtime::Metrics.new(logger: logger, telemetry: telemetry, **options)
|
|
50
51
|
end
|
|
51
52
|
|
|
52
|
-
def build_runtime_metrics_worker(settings)
|
|
53
|
+
def build_runtime_metrics_worker(settings, logger, telemetry)
|
|
53
54
|
# NOTE: Should we just ignore building the worker if its not enabled?
|
|
54
55
|
options = settings.runtime_metrics.opts.merge(
|
|
55
56
|
enabled: settings.runtime_metrics.enabled,
|
|
56
|
-
metrics: build_runtime_metrics(settings)
|
|
57
|
+
metrics: build_runtime_metrics(settings, logger, telemetry),
|
|
58
|
+
logger: logger,
|
|
57
59
|
)
|
|
58
60
|
|
|
59
|
-
Core::Workers::RuntimeMetrics.new(options)
|
|
61
|
+
Core::Workers::RuntimeMetrics.new(telemetry: telemetry, **options)
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
def build_telemetry(settings, agent_settings, logger)
|
|
@@ -66,7 +68,7 @@ module Datadog
|
|
|
66
68
|
def build_crashtracker(settings, agent_settings, logger:)
|
|
67
69
|
return unless settings.crashtracking.enabled
|
|
68
70
|
|
|
69
|
-
if (libdatadog_api_failure = Datadog::Core::
|
|
71
|
+
if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
|
|
70
72
|
logger.debug("Cannot enable crashtracking: #{libdatadog_api_failure}")
|
|
71
73
|
return
|
|
72
74
|
end
|
|
@@ -75,10 +77,9 @@ module Datadog
|
|
|
75
77
|
end
|
|
76
78
|
end
|
|
77
79
|
|
|
78
|
-
include Datadog::Tracing::Component::InstanceMethods
|
|
79
|
-
|
|
80
80
|
attr_reader \
|
|
81
81
|
:health_metrics,
|
|
82
|
+
:settings,
|
|
82
83
|
:logger,
|
|
83
84
|
:remote,
|
|
84
85
|
:profiler,
|
|
@@ -86,13 +87,17 @@ module Datadog
|
|
|
86
87
|
:telemetry,
|
|
87
88
|
:tracer,
|
|
88
89
|
:crashtracker,
|
|
90
|
+
:error_tracking,
|
|
89
91
|
:dynamic_instrumentation,
|
|
90
92
|
:appsec,
|
|
91
93
|
:agent_info
|
|
92
94
|
|
|
93
95
|
def initialize(settings)
|
|
96
|
+
@settings = settings
|
|
94
97
|
@logger = self.class.build_logger(settings)
|
|
95
98
|
@environment_logger_extra = {}
|
|
99
|
+
StableConfig.log_result(@logger)
|
|
100
|
+
Deprecations.log_deprecations_from_all_sources(@logger)
|
|
96
101
|
|
|
97
102
|
# This agent_settings is intended for use within Core. If you require
|
|
98
103
|
# agent_settings within a product outside of core you should extend
|
|
@@ -100,12 +105,12 @@ module Datadog
|
|
|
100
105
|
agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
|
|
101
106
|
|
|
102
107
|
# Exposes agent capability information for detection by any components
|
|
103
|
-
@agent_info = Core::Environment::AgentInfo.new(agent_settings)
|
|
108
|
+
@agent_info = Core::Environment::AgentInfo.new(agent_settings, logger: @logger)
|
|
104
109
|
|
|
105
110
|
@telemetry = self.class.build_telemetry(settings, agent_settings, @logger)
|
|
106
111
|
|
|
107
112
|
@remote = Remote::Component.build(settings, agent_settings, logger: @logger, telemetry: telemetry)
|
|
108
|
-
@tracer =
|
|
113
|
+
@tracer = Datadog::Tracing::Component.build_tracer(settings, agent_settings, logger: @logger)
|
|
109
114
|
@crashtracker = self.class.build_crashtracker(settings, agent_settings, logger: @logger)
|
|
110
115
|
|
|
111
116
|
@profiler, profiler_logger_extra = Datadog::Profiling::Component.build_profiler_component(
|
|
@@ -116,17 +121,29 @@ module Datadog
|
|
|
116
121
|
)
|
|
117
122
|
@environment_logger_extra.merge!(profiler_logger_extra) if profiler_logger_extra
|
|
118
123
|
|
|
119
|
-
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
120
|
-
@health_metrics = self.class.build_health_metrics(settings)
|
|
124
|
+
@runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger, telemetry)
|
|
125
|
+
@health_metrics = self.class.build_health_metrics(settings, @logger, telemetry)
|
|
121
126
|
@appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
|
|
122
127
|
@dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
|
|
128
|
+
@error_tracking = Datadog::ErrorTracking::Component.build(settings, @tracer, @logger)
|
|
123
129
|
@environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation
|
|
124
130
|
|
|
125
|
-
|
|
131
|
+
# Configure non-privileged components.
|
|
132
|
+
Datadog::Tracing::Contrib::Component.configure(settings)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Hot-swaps with a new sampler.
|
|
136
|
+
# This operation acquires the Components lock to ensure
|
|
137
|
+
# there is no concurrent modification of the sampler.
|
|
138
|
+
def reconfigure_sampler(settings = Datadog.configuration)
|
|
139
|
+
sampler = Datadog::Tracing::Component.build_sampler(settings)
|
|
140
|
+
Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
|
|
126
141
|
end
|
|
127
142
|
|
|
128
143
|
# Starts up components
|
|
129
144
|
def startup!(settings, old_state: nil)
|
|
145
|
+
telemetry.start(old_state&.telemetry_enabled?)
|
|
146
|
+
|
|
130
147
|
if settings.profiling.enabled
|
|
131
148
|
if profiler
|
|
132
149
|
profiler.start
|
|
@@ -137,7 +154,7 @@ module Datadog
|
|
|
137
154
|
end
|
|
138
155
|
end
|
|
139
156
|
|
|
140
|
-
if settings.remote.enabled && old_state&.
|
|
157
|
+
if settings.remote.enabled && old_state&.remote_started?
|
|
141
158
|
# The library was reconfigured and previously it already started
|
|
142
159
|
# the remote component (i.e., it received at least one request
|
|
143
160
|
# through the installed Rack middleware which started the remote).
|
|
@@ -147,6 +164,11 @@ module Datadog
|
|
|
147
164
|
remote&.start
|
|
148
165
|
end
|
|
149
166
|
|
|
167
|
+
# This should stay here, not in initialize. During reconfiguration, the order of the calls is:
|
|
168
|
+
# initialize new components, shutdown old components, startup new components.
|
|
169
|
+
# Because this is a singleton, if we call it in initialize, it will be shutdown right away.
|
|
170
|
+
Core::ProcessDiscovery.publish(settings)
|
|
171
|
+
|
|
150
172
|
Core::Diagnostics::EnvironmentLogger.collect_and_log!(@environment_logger_extra)
|
|
151
173
|
end
|
|
152
174
|
|
|
@@ -155,20 +177,20 @@ module Datadog
|
|
|
155
177
|
# and avoid tearing down parts still in use.
|
|
156
178
|
def shutdown!(replacement = nil)
|
|
157
179
|
# Shutdown remote configuration
|
|
158
|
-
remote
|
|
180
|
+
remote&.shutdown!
|
|
159
181
|
|
|
160
182
|
# Shutdown DI after remote, since remote config triggers DI operations.
|
|
161
183
|
dynamic_instrumentation&.shutdown!
|
|
162
184
|
|
|
163
185
|
# Decommission AppSec
|
|
164
|
-
appsec
|
|
186
|
+
appsec&.shutdown!
|
|
165
187
|
|
|
166
188
|
# Shutdown the old tracer, unless it's still being used.
|
|
167
189
|
# (e.g. a custom tracer instance passed in.)
|
|
168
|
-
tracer.shutdown! unless replacement && tracer
|
|
190
|
+
tracer.shutdown! unless replacement && tracer.equal?(replacement.tracer)
|
|
169
191
|
|
|
170
192
|
# Shutdown old profiler
|
|
171
|
-
profiler
|
|
193
|
+
profiler&.shutdown!
|
|
172
194
|
|
|
173
195
|
# Shutdown workers
|
|
174
196
|
runtime_metrics.stop(true, close_metrics: false)
|
|
@@ -186,21 +208,31 @@ module Datadog
|
|
|
186
208
|
health_metrics.statsd
|
|
187
209
|
].compact.uniq
|
|
188
210
|
|
|
189
|
-
new_statsd =
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
211
|
+
new_statsd = if replacement
|
|
212
|
+
[
|
|
213
|
+
replacement.runtime_metrics.metrics.statsd,
|
|
214
|
+
replacement.health_metrics.statsd
|
|
215
|
+
].compact.uniq
|
|
216
|
+
else
|
|
217
|
+
[]
|
|
218
|
+
end
|
|
197
219
|
|
|
198
220
|
unused_statsd = (old_statsd - (old_statsd & new_statsd))
|
|
199
221
|
unused_statsd.each(&:close)
|
|
200
222
|
|
|
201
|
-
# enqueue closing event before stopping telemetry so it will be
|
|
202
|
-
telemetry.emit_closing! unless replacement
|
|
203
|
-
telemetry.
|
|
223
|
+
# enqueue closing event before stopping telemetry so it will be sent out on shutdown
|
|
224
|
+
telemetry.emit_closing! unless replacement&.telemetry&.enabled
|
|
225
|
+
telemetry.shutdown!
|
|
226
|
+
|
|
227
|
+
Core::ProcessDiscovery.shutdown!
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Returns the current state of various components.
|
|
231
|
+
def state
|
|
232
|
+
ComponentsState.new(
|
|
233
|
+
telemetry_enabled: telemetry.enabled,
|
|
234
|
+
remote_started: remote&.started?,
|
|
235
|
+
)
|
|
204
236
|
end
|
|
205
237
|
end
|
|
206
238
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Configuration
|
|
6
|
+
# Stores the state of component tree when replacing the tree.
|
|
7
|
+
class ComponentsState
|
|
8
|
+
def initialize(telemetry_enabled:, remote_started:)
|
|
9
|
+
@telemetry_enabled = !!telemetry_enabled
|
|
10
|
+
@remote_started = !!remote_started
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def telemetry_enabled?
|
|
14
|
+
@telemetry_enabled
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def remote_started?
|
|
18
|
+
@remote_started
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -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
|