datadog 2.7.1 → 2.17.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 +310 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
- 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 +7 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +17 -15
- 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/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +49 -0
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +41 -33
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +152 -25
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- 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 +33 -25
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -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 +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +5 -4
- data/lib/datadog/appsec/remote.rb +26 -12
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +23 -10
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +76 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +100 -41
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- 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 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- 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 +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +27 -27
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- 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 +2 -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/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +84 -49
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -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_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 +179 -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 +17 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- 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 +128 -25
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- 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 +6 -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/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 +8 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +111 -20
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +34 -8
- data/lib/datadog/di/probe_notifier_worker.rb +52 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +14 -7
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +67 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +62 -0
- data/lib/datadog/di/utils.rb +103 -0
- data/lib/datadog/di.rb +14 -76
- 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.rb +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- 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 +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +60 -76
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +6 -85
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- 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/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- 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/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -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.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +9 -5
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +60 -12
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +143 -50
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- 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
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -18,6 +18,10 @@ module Datadog
|
|
18
18
|
ENV_DEFAULT_PORT = 'DD_METRIC_AGENT_PORT'
|
19
19
|
end
|
20
20
|
|
21
|
+
module APM
|
22
|
+
ENV_TRACING_ENABLED = 'DD_APM_TRACING_ENABLED'
|
23
|
+
end
|
24
|
+
|
21
25
|
module Agent
|
22
26
|
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'
|
23
27
|
# Some env vars have "trace" in them, but they apply to all products
|
@@ -37,7 +41,7 @@ module Datadog
|
|
37
41
|
module UnixSocket
|
38
42
|
ADAPTER = :unix
|
39
43
|
DEFAULT_PATH = '/var/run/datadog/apm.socket'
|
40
|
-
DEFAULT_TIMEOUT_SECONDS =
|
44
|
+
DEFAULT_TIMEOUT_SECONDS = 30
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'stable_config'
|
3
4
|
require_relative '../utils/safe_dup'
|
4
5
|
|
5
6
|
module Datadog
|
@@ -32,17 +33,25 @@ module Datadog
|
|
32
33
|
end
|
33
34
|
|
34
35
|
# Remote configuration provided through the Datadog app.
|
35
|
-
REMOTE_CONFIGURATION = Value.new(
|
36
|
+
REMOTE_CONFIGURATION = Value.new(5, :remote_configuration).freeze
|
36
37
|
|
37
38
|
# Configuration provided in Ruby code, in this same process
|
38
|
-
|
39
|
-
|
39
|
+
PROGRAMMATIC = Value.new(4, :programmatic).freeze
|
40
|
+
|
41
|
+
# Configuration provided by fleet managed stable config
|
42
|
+
FLEET_STABLE = Value.new(3, :fleet_stable).freeze
|
43
|
+
|
44
|
+
# Configuration provided via environment variable
|
45
|
+
ENVIRONMENT = Value.new(2, :environment).freeze
|
46
|
+
|
47
|
+
# Configuration provided by local stable config file
|
48
|
+
LOCAL_STABLE = Value.new(1, :local_stable).freeze
|
40
49
|
|
41
50
|
# Configuration that comes from default values
|
42
51
|
DEFAULT = Value.new(0, :default).freeze
|
43
52
|
|
44
53
|
# All precedences, sorted from highest to lowest
|
45
|
-
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, DEFAULT].sort.reverse.freeze
|
54
|
+
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, FLEET_STABLE, ENVIRONMENT, LOCAL_STABLE, DEFAULT].sort.reverse.freeze
|
46
55
|
end
|
47
56
|
|
48
57
|
def initialize(definition, context)
|
@@ -118,23 +127,29 @@ module Datadog
|
|
118
127
|
end
|
119
128
|
|
120
129
|
def get
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
130
|
+
unless @is_set
|
131
|
+
# Ensures that both the default value and the environment value are set.
|
132
|
+
# This approach handles scenarios where an environment value is unset
|
133
|
+
# by falling back to the default value consistently.
|
134
|
+
set_default_value
|
135
|
+
set_customer_stable_config_value
|
136
|
+
set_env_value
|
137
|
+
set_fleet_stable_config_value
|
125
138
|
end
|
139
|
+
|
140
|
+
@value
|
126
141
|
end
|
127
142
|
|
128
143
|
def reset
|
129
144
|
@value = if definition.resetter
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
145
|
+
# Don't change @is_set to false; custom resetters are
|
146
|
+
# responsible for changing @value back to a good state.
|
147
|
+
# Setting @is_set = false would cause a default to be applied.
|
148
|
+
context_exec(@value, &definition.resetter)
|
149
|
+
else
|
150
|
+
@is_set = false
|
151
|
+
nil
|
152
|
+
end
|
138
153
|
|
139
154
|
# Reset back to the lowest precedence, to allow all `set`s to succeed right after a reset.
|
140
155
|
@precedence_set = Precedence::DEFAULT
|
@@ -192,7 +207,7 @@ module Datadog
|
|
192
207
|
when :bool
|
193
208
|
string_value = value.strip
|
194
209
|
string_value = string_value.downcase
|
195
|
-
string_value == 'true' || string_value == '1'
|
210
|
+
string_value == 'true' || string_value == '1'
|
196
211
|
when :string, NilClass
|
197
212
|
value
|
198
213
|
else
|
@@ -212,20 +227,20 @@ module Datadog
|
|
212
227
|
|
213
228
|
unless valid_type
|
214
229
|
raise_error = if @definition.type_options[:nilable]
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
230
|
+
!value.is_a?(NilClass)
|
231
|
+
else
|
232
|
+
true
|
233
|
+
end
|
219
234
|
end
|
220
235
|
|
221
236
|
if raise_error
|
222
237
|
error_msg = if @definition.type_options[:nilable]
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
238
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a " \
|
239
|
+
"#{@definition.type} or `nil`, but a `#{value.class}` was provided (#{value.inspect})." \
|
240
|
+
else
|
241
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a " \
|
242
|
+
"#{@definition.type}, but a `#{value.class}` was provided (#{value.inspect})." \
|
243
|
+
end
|
229
244
|
|
230
245
|
error_msg = "#{error_msg} Please update your `configure` block. "
|
231
246
|
|
@@ -256,7 +271,8 @@ module Datadog
|
|
256
271
|
when NilClass
|
257
272
|
true # No validation is performed when option is typeless
|
258
273
|
else
|
259
|
-
raise
|
274
|
+
raise InvalidDefinitionError,
|
275
|
+
"The option #{@definition.name} is using an unsupported type option `#{@definition.type}`"
|
260
276
|
end
|
261
277
|
end
|
262
278
|
|
@@ -269,7 +285,7 @@ module Datadog
|
|
269
285
|
@resolved_env = resolved_env
|
270
286
|
# Store original value to ensure we can always safely call `#internal_set`
|
271
287
|
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
272
|
-
# on the original value, not on a
|
288
|
+
# on the original value, not on a value that has already been processed by `definition.setter`.
|
273
289
|
@value_per_precedence[precedence] = value
|
274
290
|
context_exec(v, old_value, precedence, &definition.after_set) if definition.after_set
|
275
291
|
end
|
@@ -283,39 +299,59 @@ module Datadog
|
|
283
299
|
@context.instance_eval(&block)
|
284
300
|
end
|
285
301
|
|
286
|
-
def
|
302
|
+
def set_default_value
|
303
|
+
set(default_value, precedence: Precedence::DEFAULT)
|
304
|
+
end
|
305
|
+
|
306
|
+
def set_env_value
|
307
|
+
value, resolved_env = get_value_and_resolved_env_from(ENV)
|
308
|
+
set(value, precedence: Precedence::ENVIRONMENT, resolved_env: resolved_env) unless value.nil?
|
309
|
+
end
|
310
|
+
|
311
|
+
def set_customer_stable_config_value
|
312
|
+
customer_config = StableConfig.configuration[:local]
|
313
|
+
return if customer_config.nil?
|
314
|
+
|
315
|
+
value, resolved_env = get_value_and_resolved_env_from(customer_config, source: 'local stable config')
|
316
|
+
set(value, precedence: Precedence::LOCAL_STABLE, resolved_env: resolved_env) unless value.nil?
|
317
|
+
end
|
318
|
+
|
319
|
+
def set_fleet_stable_config_value
|
320
|
+
fleet_config = StableConfig.configuration[:fleet]
|
321
|
+
return if fleet_config.nil?
|
322
|
+
|
323
|
+
value, resolved_env = get_value_and_resolved_env_from(fleet_config, source: 'fleet stable config')
|
324
|
+
set(value, precedence: Precedence::FLEET_STABLE, resolved_env: resolved_env) unless value.nil?
|
325
|
+
end
|
326
|
+
|
327
|
+
def get_value_and_resolved_env_from(env_vars, source: 'environment variable')
|
287
328
|
value = nil
|
288
|
-
precedence = nil
|
289
329
|
resolved_env = nil
|
290
330
|
|
291
331
|
if definition.env
|
292
332
|
Array(definition.env).each do |env|
|
293
|
-
next if
|
333
|
+
next if env_vars[env].nil?
|
294
334
|
|
295
335
|
resolved_env = env
|
296
|
-
value = coerce_env_variable(
|
297
|
-
precedence = Precedence::PROGRAMMATIC
|
336
|
+
value = coerce_env_variable(env_vars[env])
|
298
337
|
break
|
299
338
|
end
|
300
339
|
end
|
301
340
|
|
302
|
-
if value.nil? && definition.deprecated_env &&
|
341
|
+
if value.nil? && definition.deprecated_env && env_vars[definition.deprecated_env]
|
303
342
|
resolved_env = definition.deprecated_env
|
304
|
-
value = coerce_env_variable(
|
305
|
-
precedence = Precedence::PROGRAMMATIC
|
343
|
+
value = coerce_env_variable(env_vars[definition.deprecated_env])
|
306
344
|
|
307
345
|
Datadog::Core.log_deprecation do
|
308
|
-
"#{definition.deprecated_env}
|
346
|
+
"#{definition.deprecated_env} #{source} is deprecated, use #{definition.env} instead."
|
309
347
|
end
|
310
348
|
end
|
311
349
|
|
312
|
-
|
313
|
-
|
314
|
-
set(option_value, precedence: precedence || Precedence::DEFAULT, resolved_env: resolved_env)
|
350
|
+
[value, resolved_env]
|
315
351
|
rescue ArgumentError
|
316
352
|
raise ArgumentError,
|
317
|
-
"Expected
|
318
|
-
"but '#{
|
353
|
+
"Expected #{source} #{resolved_env} to be a #{@definition.type}, " \
|
354
|
+
"but '#{env_vars[resolved_env]}' was provided"
|
319
355
|
end
|
320
356
|
|
321
357
|
# Anchor object that represents a value that is not set.
|
@@ -71,14 +71,16 @@ module Datadog
|
|
71
71
|
validate_options!
|
72
72
|
end
|
73
73
|
|
74
|
-
def env(value)
|
74
|
+
def env(value) # standard:disable Style/TrivialAccessors
|
75
75
|
@env = value
|
76
76
|
end
|
77
77
|
|
78
|
-
def deprecated_env(value)
|
78
|
+
def deprecated_env(value) # standard:disable Style/TrivialAccessors
|
79
79
|
@deprecated_env = value
|
80
80
|
end
|
81
81
|
|
82
|
+
# Invoked when the option is first read, and {#env} is defined.
|
83
|
+
# The block provided is only invoked if the environment variable is present (not-nil).
|
82
84
|
def env_parser(&block)
|
83
85
|
@env_parser = block
|
84
86
|
end
|
@@ -109,7 +111,7 @@ module Datadog
|
|
109
111
|
|
110
112
|
def type(value, nilable: false)
|
111
113
|
@type = value
|
112
|
-
@type_options = {
|
114
|
+
@type_options = {nilable: nilable}
|
113
115
|
|
114
116
|
value
|
115
117
|
end
|
@@ -154,7 +156,7 @@ module Datadog
|
|
154
156
|
if !@default.nil? && @default_proc
|
155
157
|
raise InvalidOptionError,
|
156
158
|
'Using `default` and `default_proc` is not allowed. Please use one or the other.' \
|
157
|
-
'If you want to store a block as the default value use `default_proc`'\
|
159
|
+
'If you want to store a block as the default value use `default_proc`' \
|
158
160
|
' otherwise use `default`'
|
159
161
|
end
|
160
162
|
end
|
@@ -18,7 +18,7 @@ module Datadog
|
|
18
18
|
module ClassMethods
|
19
19
|
def options
|
20
20
|
# Allows for class inheritance of option definitions
|
21
|
-
@options ||= superclass <= Options ? superclass.options.dup : {}
|
21
|
+
@options ||= (superclass <= Options) ? superclass.options.dup : {}
|
22
22
|
end
|
23
23
|
|
24
24
|
protected
|
@@ -45,7 +45,7 @@ module Datadog
|
|
45
45
|
option_name.to_sym => proc do
|
46
46
|
get_option(option_name)
|
47
47
|
end,
|
48
|
-
"#{option_name}="
|
48
|
+
:"#{option_name}=" => proc do |value|
|
49
49
|
set_option(option_name, value)
|
50
50
|
end
|
51
51
|
}
|
@@ -117,7 +117,7 @@ module Datadog
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def resolved_env(name)
|
120
|
-
|
120
|
+
options[name].resolved_env if options.key?(name)
|
121
121
|
end
|
122
122
|
|
123
123
|
def assert_valid_option!(name)
|
@@ -18,7 +18,7 @@ module Datadog
|
|
18
18
|
module Configuration
|
19
19
|
# Global configuration settings for the Datadog library.
|
20
20
|
# @public_api
|
21
|
-
#
|
21
|
+
# standard:disable Metrics/BlockLength
|
22
22
|
class Settings
|
23
23
|
include Base
|
24
24
|
|
@@ -123,7 +123,7 @@ module Datadog
|
|
123
123
|
# @return [Boolean]
|
124
124
|
option :debug do |o|
|
125
125
|
o.env [Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED,
|
126
|
-
|
126
|
+
Datadog::Core::Configuration::Ext::Diagnostics::ENV_OTEL_LOG_LEVEL]
|
127
127
|
o.default false
|
128
128
|
o.type :bool
|
129
129
|
o.env_parser do |value|
|
@@ -137,7 +137,7 @@ module Datadog
|
|
137
137
|
o.after_set do |enabled|
|
138
138
|
# Enable rich debug print statements.
|
139
139
|
# We do not need to unnecessarily load 'pp' unless in debugging mode.
|
140
|
-
require 'pp' if enabled
|
140
|
+
require 'pp' if enabled # standard:disable Lint/RedundantRequireStatement
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
@@ -454,22 +454,38 @@ module Datadog
|
|
454
454
|
o.after_set do |_, _, precedence|
|
455
455
|
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
456
456
|
Core.log_deprecation(key: :experimental_crash_tracking_enabled) do
|
457
|
-
'The profiling.advanced.experimental_crash_tracking_enabled setting has been deprecated for removal '\
|
457
|
+
'The profiling.advanced.experimental_crash_tracking_enabled setting has been deprecated for removal ' \
|
458
458
|
'and no longer does anything. Please remove it from your Datadog.configure block.'
|
459
459
|
end
|
460
460
|
end
|
461
461
|
end
|
462
462
|
end
|
463
463
|
|
464
|
-
#
|
465
|
-
#
|
466
|
-
# This is a preview feature and disabled by default. It requires Ruby 3.2+.
|
467
|
-
#
|
468
|
-
# @default `DD_PROFILING_PREVIEW_GVL_ENABLED` environment variable as a boolean, otherwise `false`
|
464
|
+
# @deprecated Use {:gvl_enabled} instead.
|
469
465
|
option :preview_gvl_enabled do |o|
|
470
466
|
o.type :bool
|
471
|
-
o.env 'DD_PROFILING_PREVIEW_GVL_ENABLED'
|
472
467
|
o.default false
|
468
|
+
o.after_set do |_, _, precedence|
|
469
|
+
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
470
|
+
Datadog.logger.warn(
|
471
|
+
'The profiling.advanced.preview_gvl_enabled setting has been deprecated for removal and ' \
|
472
|
+
'no longer does anything. Please remove it from your Datadog.configure block. ' \
|
473
|
+
'GVL profiling is now controlled by the profiling.advanced.gvl_enabled setting instead.'
|
474
|
+
)
|
475
|
+
end
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
# Controls GVL profiling. This will show when threads are waiting for GVL in the timeline view.
|
480
|
+
#
|
481
|
+
# This feature requires Ruby 3.2+.
|
482
|
+
#
|
483
|
+
# @default `DD_PROFILING_GVL_ENABLED` environment variable as a boolean, otherwise `true`
|
484
|
+
option :gvl_enabled do |o|
|
485
|
+
o.type :bool
|
486
|
+
o.deprecated_env 'DD_PROFILING_PREVIEW_GVL_ENABLED'
|
487
|
+
o.env 'DD_PROFILING_GVL_ENABLED'
|
488
|
+
o.default true
|
473
489
|
end
|
474
490
|
|
475
491
|
# Controls the smallest time period the profiler will report a thread waiting for the GVL.
|
@@ -554,6 +570,12 @@ module Datadog
|
|
554
570
|
o.type :bool
|
555
571
|
end
|
556
572
|
|
573
|
+
option :experimental_runtime_id_enabled do |o|
|
574
|
+
o.type :bool
|
575
|
+
o.env 'DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED'
|
576
|
+
o.default false
|
577
|
+
end
|
578
|
+
|
557
579
|
option :opts, default: {}, type: :hash
|
558
580
|
option :statsd
|
559
581
|
end
|
@@ -603,38 +625,31 @@ module Datadog
|
|
603
625
|
o.type :hash, nilable: true
|
604
626
|
o.env [Core::Environment::Ext::ENV_TAGS, Core::Environment::Ext::ENV_OTEL_RESOURCE_ATTRIBUTES]
|
605
627
|
o.env_parser do |env_value|
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
when 'deployment.environment'
|
629
|
-
tags['env'] = value
|
630
|
-
when 'service.version'
|
631
|
-
tags['version'] = value
|
632
|
-
when 'service.name'
|
633
|
-
tags['service'] = value
|
634
|
-
else
|
635
|
-
tags[key] = value
|
628
|
+
# Parses a string containing key-value pairs and returns a hash.
|
629
|
+
# Key-value pairs are delimited by ':' OR `=`, and pairs are separated by whitespace, comma, OR BOTH.
|
630
|
+
result = {}
|
631
|
+
unless env_value.nil? || env_value.empty?
|
632
|
+
# falling back to comma as separator
|
633
|
+
sep = env_value.include?(',') ? ',' : ' '
|
634
|
+
# split by separator
|
635
|
+
env_value.split(sep).each do |tag|
|
636
|
+
tag.strip!
|
637
|
+
next if tag.empty?
|
638
|
+
|
639
|
+
# tag by : or = (for OpenTelemetry)
|
640
|
+
key, val = tag.split(/[:=]/, 2).map(&:strip)
|
641
|
+
val ||= ''
|
642
|
+
# maps OpenTelemetry semantic attributes to Datadog tags
|
643
|
+
key = case key.downcase
|
644
|
+
when 'deployment.environment' then 'env'
|
645
|
+
when 'service.version' then 'version'
|
646
|
+
when 'service.name' then 'service'
|
647
|
+
else key
|
648
|
+
end
|
649
|
+
result[key] = val unless key.empty?
|
636
650
|
end
|
637
651
|
end
|
652
|
+
result
|
638
653
|
end
|
639
654
|
o.setter do |new_value, old_value|
|
640
655
|
raw_tags = new_value || {}
|
@@ -863,6 +878,26 @@ module Datadog
|
|
863
878
|
o.type :float
|
864
879
|
o.default 1.0
|
865
880
|
end
|
881
|
+
|
882
|
+
# Enable log collection for telemetry. Log collection only works when telemetry is enabled and
|
883
|
+
# logs are enabled.
|
884
|
+
# @default `DD_TELEMETRY_LOG_COLLECTION_ENABLED` environment variable, otherwise `true`.
|
885
|
+
# @return [Boolean]
|
886
|
+
option :log_collection_enabled do |o|
|
887
|
+
o.type :bool
|
888
|
+
o.env Core::Telemetry::Ext::ENV_LOG_COLLECTION
|
889
|
+
o.default true
|
890
|
+
end
|
891
|
+
|
892
|
+
# For internal use only.
|
893
|
+
# Enables telemetry debugging through the Datadog platform.
|
894
|
+
#
|
895
|
+
# @default `false`.
|
896
|
+
# @return [Boolean]
|
897
|
+
option :debug do |o|
|
898
|
+
o.type :bool
|
899
|
+
o.default false
|
900
|
+
end
|
866
901
|
end
|
867
902
|
|
868
903
|
# Remote configuration
|
@@ -932,11 +967,35 @@ module Datadog
|
|
932
967
|
end
|
933
968
|
end
|
934
969
|
|
970
|
+
# Tracer specific configuration starting with APM (e.g. DD_APM_TRACING_ENABLED).
|
971
|
+
# @public_api
|
972
|
+
settings :apm do
|
973
|
+
# Tracing as a transport
|
974
|
+
# @public_api
|
975
|
+
settings :tracing do
|
976
|
+
# Enables tracing as transport.
|
977
|
+
# Disabling it will set sampling priority to -1 (FORCE_DROP) on most traces,
|
978
|
+
# (which tells to the agent to drop these traces)
|
979
|
+
# except heartbeat ones (1 per minute) and manually kept ones (sampling priority to 2) (e.g. appsec events)
|
980
|
+
#
|
981
|
+
# This is different than `DD_TRACE_ENABLED`, which completely disables tracing (sends no trace at all),
|
982
|
+
# while this will send heartbeat traces (1 per minute) so that the service is considered alive in the backend.
|
983
|
+
#
|
984
|
+
# @default `DD_APM_TRACING_ENABLED` environment variable, otherwise `true`
|
985
|
+
# @return [Boolean]
|
986
|
+
option :enabled do |o|
|
987
|
+
o.env Configuration::Ext::APM::ENV_TRACING_ENABLED
|
988
|
+
o.default true
|
989
|
+
o.type :bool
|
990
|
+
end
|
991
|
+
end
|
992
|
+
end
|
993
|
+
|
935
994
|
# TODO: Tracing should manage its own settings.
|
936
995
|
# Keep this extension here for now to keep things working.
|
937
996
|
extend Datadog::Tracing::Configuration::Settings
|
938
997
|
end
|
939
|
-
#
|
998
|
+
# standard:enable Metrics/BlockLength
|
940
999
|
end
|
941
1000
|
end
|
942
1001
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Configuration
|
6
|
+
# Import config from config files (fleet automation)
|
7
|
+
module StableConfig
|
8
|
+
def self.extract_configuration
|
9
|
+
if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
|
10
|
+
Datadog.config_init_logger.debug("Cannot enable stable config: #{libdatadog_api_failure}")
|
11
|
+
return {}
|
12
|
+
end
|
13
|
+
Configurator.new.get
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configuration
|
17
|
+
# @configuration ||= StableConfig.extract_configuration # TODO: After libdatadog 17.1 release, uncomment this line
|
18
|
+
@configuration ||= {} # TODO: After libdatadog 17.1 release, delete this line
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -172,6 +172,10 @@ module Datadog
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
+
def config_init_logger
|
176
|
+
configuration? ? logger : logger_without_configuration
|
177
|
+
end
|
178
|
+
|
175
179
|
# Gracefully shuts down all components.
|
176
180
|
#
|
177
181
|
# Components will still respond to method calls as usual,
|
@@ -231,19 +235,21 @@ module Datadog
|
|
231
235
|
end
|
232
236
|
|
233
237
|
COMPONENTS_WRITE_LOCK.synchronize do
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
nil
|
243
|
-
end
|
238
|
+
yield write_components
|
239
|
+
rescue ThreadError => e
|
240
|
+
logger_without_components.error(
|
241
|
+
'Detected deadlock during datadog initialization. ' \
|
242
|
+
'Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
243
|
+
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
244
|
+
)
|
245
|
+
nil
|
244
246
|
end
|
245
247
|
end
|
246
248
|
|
249
|
+
def configuration?
|
250
|
+
(defined?(@configuration) && @configuration) != nil
|
251
|
+
end
|
252
|
+
|
247
253
|
def components?
|
248
254
|
# This does not need to grab the COMPONENTS_READ_LOCK because it's not returning the components
|
249
255
|
(defined?(@components) && @components) != nil
|
@@ -258,14 +264,25 @@ module Datadog
|
|
258
264
|
def replace_components!(settings, old)
|
259
265
|
components = Components.new(settings)
|
260
266
|
|
267
|
+
# Carry over state from existing components to the new ones.
|
268
|
+
# Currently:
|
269
|
+
# 1. If we already started the remote component (which
|
270
|
+
# happens after a request goes through installed Rack middleware),
|
271
|
+
# we will start the new remote component as well.
|
272
|
+
# 2. If telemetry has been enabled and is enabled in the new
|
273
|
+
# component tree, we send AppConfigurationChange event instead
|
274
|
+
# of AppStarted event.
|
275
|
+
old_state = old.state
|
276
|
+
|
261
277
|
old.shutdown!(components)
|
262
|
-
components.startup!(settings)
|
278
|
+
components.startup!(settings, old_state: old_state)
|
263
279
|
components
|
264
280
|
end
|
265
281
|
|
266
282
|
def logger_without_components
|
267
283
|
# Use default logger without initializing components.
|
268
284
|
# This enables logging during initialization, otherwise we'd run into deadlocks.
|
285
|
+
|
269
286
|
@temp_logger ||= begin
|
270
287
|
logger = configuration.logger.instance || Core::Logger.new($stdout)
|
271
288
|
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
@@ -273,6 +290,21 @@ module Datadog
|
|
273
290
|
end
|
274
291
|
end
|
275
292
|
|
293
|
+
def logger_without_configuration
|
294
|
+
# There's rare cases where we need to use logger during configuration initialization,
|
295
|
+
# such as reading stable config. In this case we cannot access configuration.
|
296
|
+
|
297
|
+
@temp_config_logger ||= begin
|
298
|
+
debug_env_value = ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
|
299
|
+
debug_value = debug_env_value == 'true' || debug_env_value == '1'
|
300
|
+
|
301
|
+
logger = Core::Logger.new($stdout)
|
302
|
+
# We cannot access config and the default level is INFO, so we need to set the level manually
|
303
|
+
logger.level = debug_value ? ::Logger::DEBUG : ::Logger::INFO
|
304
|
+
logger
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
276
308
|
# Called from our at_exit hook whenever there was a pending Interrupt exception (e.g. typically due to ctrl+c)
|
277
309
|
# to print a nice message whenever we're taking a bit longer than usual to finish the process.
|
278
310
|
def handle_interrupt_shutdown!
|