ddtrace 1.12.1 → 1.23.2
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 +613 -9
- data/LICENSE-3rdparty.csv +1 -1
- data/bin/ddprofrb +15 -0
- data/bin/ddtracerb +3 -1
- data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
- data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +3 -5
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +3 -22
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +338 -108
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +3 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +111 -118
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +11 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +545 -144
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +3 -2
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +68 -17
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +60 -32
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +155 -32
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +16 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +19 -3
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
- data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
- data/lib/datadog/appsec/assets.rb +8 -0
- data/lib/datadog/appsec/component.rb +21 -2
- data/lib/datadog/appsec/configuration/settings.rb +167 -189
- data/lib/datadog/appsec/configuration.rb +0 -79
- data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
- data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
- data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +3 -8
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +77 -27
- data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +3 -6
- data/lib/datadog/appsec/event.rb +106 -50
- data/lib/datadog/appsec/extensions.rb +1 -130
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
- data/lib/datadog/appsec/processor.rb +35 -7
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +17 -11
- data/lib/datadog/appsec/response.rb +82 -4
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec.rb +3 -4
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/backport.rb +51 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
- data/lib/datadog/core/configuration/base.rb +6 -16
- data/lib/datadog/core/configuration/components.rb +20 -7
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +271 -21
- data/lib/datadog/core/configuration/option_definition.rb +73 -32
- data/lib/datadog/core/configuration/options.rb +27 -15
- data/lib/datadog/core/configuration/settings.rb +398 -119
- data/lib/datadog/core/configuration.rb +24 -4
- data/lib/datadog/core/diagnostics/environment_logger.rb +132 -235
- data/lib/datadog/core/environment/class_count.rb +6 -6
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +18 -48
- data/lib/datadog/core/environment/platform.rb +7 -1
- data/lib/datadog/core/environment/variable_helpers.rb +0 -69
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/error.rb +1 -0
- data/lib/datadog/core/git/ext.rb +6 -23
- data/lib/datadog/core/logging/ext.rb +3 -1
- data/lib/datadog/core/metrics/ext.rb +7 -5
- data/lib/datadog/core/remote/client/capabilities.rb +7 -2
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +52 -48
- data/lib/datadog/core/remote/configuration/content.rb +28 -1
- data/lib/datadog/core/remote/configuration/repository.rb +3 -1
- data/lib/datadog/core/remote/ext.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +20 -7
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +27 -0
- data/lib/datadog/core/remote/transport/config.rb +60 -0
- data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
- data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
- data/lib/datadog/core/remote/transport/http/api.rb +58 -0
- data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
- data/lib/datadog/core/remote/transport/http/client.rb +48 -0
- data/lib/datadog/core/remote/transport/http/config.rb +280 -0
- data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
- data/lib/datadog/core/remote/transport/http.rb +179 -0
- data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
- data/lib/datadog/core/remote/worker.rb +11 -5
- data/lib/datadog/core/runtime/ext.rb +22 -12
- data/lib/datadog/core/runtime/metrics.rb +43 -0
- data/lib/datadog/core/telemetry/client.rb +28 -10
- data/lib/datadog/core/telemetry/emitter.rb +9 -11
- data/lib/datadog/core/telemetry/event.rb +250 -44
- data/lib/datadog/core/telemetry/ext.rb +8 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +3 -7
- data/lib/datadog/core/telemetry/http/ext.rb +13 -8
- data/lib/datadog/core/telemetry/http/response.rb +4 -0
- data/lib/datadog/core/telemetry/http/transport.rb +10 -3
- data/lib/datadog/core/telemetry/request.rb +59 -0
- data/lib/datadog/core/transport/ext.rb +49 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
- data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/env.rb +62 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/parcel.rb +22 -0
- data/lib/datadog/core/transport/request.rb +17 -0
- data/lib/datadog/core/transport/response.rb +64 -0
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/hash.rb +47 -0
- data/lib/datadog/core/utils/network.rb +1 -1
- data/lib/datadog/core/utils/safe_dup.rb +27 -20
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +3 -2
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/kit/appsec/events.rb +139 -89
- data/lib/datadog/kit/enable_core_dumps.rb +5 -6
- data/lib/datadog/kit/identity.rb +80 -65
- data/lib/datadog/opentelemetry/api/context.rb +10 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
- data/lib/datadog/opentelemetry/trace.rb +58 -0
- data/lib/datadog/opentelemetry.rb +4 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +43 -20
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/info.rb +101 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +248 -97
- data/lib/datadog/profiling/exporter.rb +26 -5
- data/lib/datadog/profiling/ext.rb +2 -12
- data/lib/datadog/profiling/flush.rb +10 -5
- data/lib/datadog/profiling/http_transport.rb +23 -6
- data/lib/datadog/profiling/load_native_extension.rb +25 -6
- data/lib/datadog/profiling/native_extension.rb +1 -22
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +20 -15
- data/lib/datadog/profiling/stack_recorder.rb +19 -4
- data/lib/datadog/profiling/tag_builder.rb +5 -0
- data/lib/datadog/profiling/tasks/exec.rb +3 -3
- data/lib/datadog/profiling/tasks/help.rb +3 -3
- data/lib/datadog/profiling.rb +28 -79
- data/lib/datadog/tracing/component.rb +70 -11
- data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
- data/lib/datadog/tracing/configuration/ext.rb +40 -33
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +136 -99
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +26 -23
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -15
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +18 -15
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/analytics.rb +0 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +38 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +19 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +21 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +27 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +20 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
- data/lib/datadog/tracing/contrib/ext.rb +26 -1
- data/lib/datadog/tracing/contrib/extensions.rb +38 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +27 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +22 -6
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +40 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
- data/lib/datadog/tracing/contrib/grpc/ext.rb +17 -13
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +18 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +43 -39
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +21 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +22 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +16 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +22 -7
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +23 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +23 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +49 -9
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +26 -20
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -12
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +16 -50
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +20 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
- data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +18 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +23 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +5 -40
- data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
- data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +10 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +33 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +16 -13
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/trilogy}/patcher.rb +10 -6
- data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
- data/lib/datadog/tracing/contrib.rb +2 -0
- data/lib/datadog/tracing/correlation.rb +29 -12
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
- data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
- data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/datadog.rb +0 -1
- data/lib/datadog/tracing/distributed/propagation.rb +35 -34
- data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
- data/lib/datadog/tracing/metadata/ext.rb +9 -6
- data/lib/datadog/tracing/metadata/tagging.rb +3 -3
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/sampling/matcher.rb +23 -3
- data/lib/datadog/tracing/sampling/rule.rb +7 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +31 -0
- data/lib/datadog/tracing/span_operation.rb +3 -15
- data/lib/datadog/tracing/sync_writer.rb +3 -3
- data/lib/datadog/tracing/trace_digest.rb +31 -0
- data/lib/datadog/tracing/trace_operation.rb +17 -5
- data/lib/datadog/tracing/trace_segment.rb +5 -2
- data/lib/datadog/tracing/tracer.rb +12 -1
- data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
- data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
- data/lib/datadog/tracing/transport/http/api.rb +43 -0
- data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
- data/lib/datadog/tracing/transport/http/client.rb +57 -0
- data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
- data/lib/datadog/tracing/transport/http/traces.rb +152 -0
- data/lib/datadog/tracing/transport/http.rb +125 -0
- data/lib/datadog/tracing/transport/io/client.rb +89 -0
- data/lib/datadog/tracing/transport/io/response.rb +27 -0
- data/lib/datadog/tracing/transport/io/traces.rb +101 -0
- data/lib/datadog/tracing/transport/io.rb +30 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
- data/lib/datadog/tracing/workers.rb +4 -2
- data/lib/datadog/tracing/writer.rb +5 -2
- data/lib/datadog/tracing.rb +8 -2
- data/lib/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +157 -139
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -25
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -591
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -14
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +0 -17
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +0 -10
- data/lib/datadog/ci/configuration/components.rb +0 -32
- data/lib/datadog/ci/configuration/settings.rb +0 -53
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
- data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
- data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
- data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
- data/lib/datadog/ci/ext/app_types.rb +0 -9
- data/lib/datadog/ci/ext/environment.rb +0 -575
- data/lib/datadog/ci/ext/settings.rb +0 -10
- data/lib/datadog/ci/ext/test.rb +0 -35
- data/lib/datadog/ci/extensions.rb +0 -19
- data/lib/datadog/ci/flush.rb +0 -38
- data/lib/datadog/ci/test.rb +0 -81
- data/lib/datadog/ci.rb +0 -20
- data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
- data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
- data/lib/datadog/core/configuration/option_set.rb +0 -10
- data/lib/datadog/core/telemetry/collector.rb +0 -231
- data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
- data/lib/datadog/core/telemetry/v1/application.rb +0 -92
- data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
- data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
- data/lib/datadog/core/telemetry/v1/host.rb +0 -59
- data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
- data/lib/datadog/core/telemetry/v1/product.rb +0 -36
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
- data/lib/datadog/core/transport/config.rb +0 -58
- data/lib/datadog/core/transport/http/api.rb +0 -57
- data/lib/datadog/core/transport/http/client.rb +0 -45
- data/lib/datadog/core/transport/http/config.rb +0 -268
- data/lib/datadog/core/transport/http/negotiation.rb +0 -144
- data/lib/datadog/core/transport/http.rb +0 -169
- data/lib/datadog/core/utils/object_set.rb +0 -43
- data/lib/datadog/core/utils/string_table.rb +0 -47
- data/lib/datadog/profiling/backtrace_location.rb +0 -34
- data/lib/datadog/profiling/buffer.rb +0 -43
- data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
- data/lib/datadog/profiling/encoding/profile.rb +0 -41
- data/lib/datadog/profiling/event.rb +0 -15
- data/lib/datadog/profiling/events/stack.rb +0 -82
- data/lib/datadog/profiling/old_recorder.rb +0 -107
- data/lib/datadog/profiling/pprof/builder.rb +0 -125
- data/lib/datadog/profiling/pprof/converter.rb +0 -102
- data/lib/datadog/profiling/pprof/message_set.rb +0 -16
- data/lib/datadog/profiling/pprof/payload.rb +0 -20
- data/lib/datadog/profiling/pprof/pprof.proto +0 -212
- data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
- data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
- data/lib/datadog/profiling/pprof/string_table.rb +0 -12
- data/lib/datadog/profiling/pprof/template.rb +0 -118
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
- data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
- data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
- data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
- data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
- data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
- data/lib/ddtrace/transport/http/api/instance.rb +0 -35
- data/lib/ddtrace/transport/http/api/map.rb +0 -16
- data/lib/ddtrace/transport/http/api/spec.rb +0 -17
- data/lib/ddtrace/transport/http/api.rb +0 -39
- data/lib/ddtrace/transport/http/builder.rb +0 -176
- data/lib/ddtrace/transport/http/client.rb +0 -52
- data/lib/ddtrace/transport/http/env.rb +0 -58
- data/lib/ddtrace/transport/http/response.rb +0 -58
- data/lib/ddtrace/transport/http/statistics.rb +0 -43
- data/lib/ddtrace/transport/http/traces.rb +0 -144
- data/lib/ddtrace/transport/http.rb +0 -117
- data/lib/ddtrace/transport/io/client.rb +0 -85
- data/lib/ddtrace/transport/io/response.rb +0 -25
- data/lib/ddtrace/transport/io/traces.rb +0 -99
- data/lib/ddtrace/transport/io.rb +0 -28
- data/lib/ddtrace/transport/parcel.rb +0 -20
- data/lib/ddtrace/transport/request.rb +0 -15
- data/lib/ddtrace/transport/response.rb +0 -60
- data/lib/ddtrace/transport/serializable_trace.rb +0 -122
- data/lib/ddtrace/transport/statistics.rb +0 -75
- data/lib/ddtrace/transport/trace_formatter.rb +0 -198
- data/lib/ddtrace/transport/traces.rb +0 -216
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
|
@@ -1,61 +1,279 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../utils/safe_dup'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Core
|
|
5
7
|
module Configuration
|
|
6
8
|
# Represents an instance of an integration configuration option
|
|
7
9
|
# @public_api
|
|
8
10
|
class Option
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
# @!attribute [r] definition
|
|
12
|
+
# The definition object that matches this option.
|
|
13
|
+
# @return [Configuration::OptionDefinition]
|
|
14
|
+
# @!attribute [r] precedence_set
|
|
15
|
+
# When this option was last set, what was the value precedence used?
|
|
16
|
+
# @return [Precedence::Value]
|
|
17
|
+
attr_reader :definition, :precedence_set
|
|
18
|
+
|
|
19
|
+
# Option setting precedence.
|
|
20
|
+
module Precedence
|
|
21
|
+
# Represents an Option precedence level.
|
|
22
|
+
# Each precedence has a `numeric` value; higher values means higher precedence.
|
|
23
|
+
# `name` is for inspection purposes only.
|
|
24
|
+
Value = Struct.new(:numeric, :name) do
|
|
25
|
+
include Comparable
|
|
26
|
+
|
|
27
|
+
def <=>(other)
|
|
28
|
+
return nil unless other.is_a?(Value)
|
|
29
|
+
|
|
30
|
+
numeric <=> other.numeric
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Remote configuration provided through the Datadog app.
|
|
35
|
+
REMOTE_CONFIGURATION = Value.new(2, :remote_configuration).freeze
|
|
36
|
+
|
|
37
|
+
# Configuration provided in Ruby code, in this same process
|
|
38
|
+
# or via Environment variable
|
|
39
|
+
PROGRAMMATIC = Value.new(1, :programmatic).freeze
|
|
40
|
+
|
|
41
|
+
# Configuration that comes from default values
|
|
42
|
+
DEFAULT = Value.new(0, :default).freeze
|
|
43
|
+
|
|
44
|
+
# All precedences, sorted from highest to lowest
|
|
45
|
+
LIST = [REMOTE_CONFIGURATION, PROGRAMMATIC, DEFAULT].sort.reverse.freeze
|
|
46
|
+
end
|
|
11
47
|
|
|
12
48
|
def initialize(definition, context)
|
|
13
49
|
@definition = definition
|
|
14
50
|
@context = context
|
|
15
51
|
@value = nil
|
|
16
52
|
@is_set = false
|
|
53
|
+
|
|
54
|
+
# One value is stored per precedence, to allow unsetting a higher
|
|
55
|
+
# precedence value and falling back to a lower precedence one.
|
|
56
|
+
@value_per_precedence = Hash.new(UNSET)
|
|
57
|
+
|
|
58
|
+
# Lowest precedence, to allow for `#set` to always succeed for a brand new `Option` instance.
|
|
59
|
+
@precedence_set = Precedence::DEFAULT
|
|
17
60
|
end
|
|
18
61
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
62
|
+
# Overrides the current value for this option if the `precedence` is equal or higher than
|
|
63
|
+
# the previously set value.
|
|
64
|
+
# The first call to `#set` will always store the value regardless of precedence.
|
|
65
|
+
#
|
|
66
|
+
# @param value [Object] the new value to be associated with this option
|
|
67
|
+
# @param precedence [Precedence] from what precedence order this new value comes from
|
|
68
|
+
def set(value, precedence: Precedence::PROGRAMMATIC)
|
|
69
|
+
# Is there a higher precedence value set?
|
|
70
|
+
if @precedence_set > precedence
|
|
71
|
+
# This should be uncommon, as higher precedence values tend to
|
|
72
|
+
# happen later in the application lifecycle.
|
|
73
|
+
Datadog.logger.info do
|
|
74
|
+
"Option '#{definition.name}' not changed to '#{value}' (precedence: #{precedence.name}) because the higher " \
|
|
75
|
+
"precedence value '#{@value}' (precedence: #{@precedence_set.name}) was already set."
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# But if it happens, we have to store the lower precedence value `value`
|
|
79
|
+
# because it's possible to revert to it by `#unset`ting
|
|
80
|
+
# the existing, higher-precedence value.
|
|
81
|
+
# Effectively, we always store one value pre precedence.
|
|
82
|
+
@value_per_precedence[precedence] = value
|
|
83
|
+
|
|
84
|
+
return @value
|
|
24
85
|
end
|
|
86
|
+
|
|
87
|
+
internal_set(value, precedence)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def unset(precedence)
|
|
91
|
+
@value_per_precedence[precedence] = UNSET
|
|
92
|
+
|
|
93
|
+
# If we are unsetting the currently active value, we have to restore
|
|
94
|
+
# a lower precedence one...
|
|
95
|
+
if precedence == @precedence_set
|
|
96
|
+
# Find a lower precedence value that is already set.
|
|
97
|
+
Precedence::LIST.each do |p|
|
|
98
|
+
# DEV: This search can be optimized, but the list is small, and unset is
|
|
99
|
+
# DEV: only called from direct user interaction in the Datadog UI.
|
|
100
|
+
next unless p < precedence
|
|
101
|
+
|
|
102
|
+
# Look for value that is set.
|
|
103
|
+
# The hash `@value_per_precedence` has a custom default value of `UNSET`.
|
|
104
|
+
if (value = @value_per_precedence[p]) != UNSET
|
|
105
|
+
internal_set(value, p)
|
|
106
|
+
return nil
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# If no value is left to fall back on, reset this option
|
|
111
|
+
reset
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# ... otherwise, we are either unsetting a higher precedence value that is not
|
|
115
|
+
# yet set, thus there's nothing to do; or we are unsetting a lower precedence
|
|
116
|
+
# value, which also does not change the current value.
|
|
25
117
|
end
|
|
26
118
|
|
|
27
119
|
def get
|
|
28
120
|
if @is_set
|
|
29
121
|
@value
|
|
30
|
-
elsif definition.delegate_to
|
|
31
|
-
context_eval(&definition.delegate_to)
|
|
32
122
|
else
|
|
33
|
-
|
|
123
|
+
set_value_from_env_or_default
|
|
34
124
|
end
|
|
35
125
|
end
|
|
36
126
|
|
|
37
127
|
def reset
|
|
38
|
-
@value =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
128
|
+
@value = if definition.resetter
|
|
129
|
+
# Don't change @is_set to false; custom resetters are
|
|
130
|
+
# responsible for changing @value back to a good state.
|
|
131
|
+
# Setting @is_set = false would cause a default to be applied.
|
|
132
|
+
context_exec(@value, &definition.resetter)
|
|
133
|
+
else
|
|
134
|
+
@is_set = false
|
|
135
|
+
nil
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Reset back to the lowest precedence, to allow all `set`s to succeed right after a reset.
|
|
139
|
+
@precedence_set = Precedence::DEFAULT
|
|
140
|
+
# Reset all stored values
|
|
141
|
+
@value_per_precedence = Hash.new(UNSET)
|
|
47
142
|
end
|
|
48
143
|
|
|
49
144
|
def default_value
|
|
50
|
-
if definition.
|
|
145
|
+
if definition.default.instance_of?(Proc)
|
|
51
146
|
context_eval(&definition.default)
|
|
52
147
|
else
|
|
53
|
-
definition.default
|
|
148
|
+
definition.default_proc || Core::Utils::SafeDup.frozen_or_dup(definition.default)
|
|
54
149
|
end
|
|
55
150
|
end
|
|
56
151
|
|
|
152
|
+
def default_precedence?
|
|
153
|
+
precedence_set == Precedence::DEFAULT
|
|
154
|
+
end
|
|
155
|
+
|
|
57
156
|
private
|
|
58
157
|
|
|
158
|
+
def coerce_env_variable(value)
|
|
159
|
+
return context_exec(value, &@definition.env_parser) if @definition.env_parser
|
|
160
|
+
|
|
161
|
+
case @definition.type
|
|
162
|
+
when :hash
|
|
163
|
+
values = value.split(',') # By default we only want to support comma separated strings
|
|
164
|
+
|
|
165
|
+
values.map! do |v|
|
|
166
|
+
v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
|
|
167
|
+
|
|
168
|
+
v.empty? ? nil : v
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
values.compact!
|
|
172
|
+
values.each.with_object({}) do |v, hash|
|
|
173
|
+
pair = v.split(':', 2)
|
|
174
|
+
hash[pair[0]] = pair[1]
|
|
175
|
+
end
|
|
176
|
+
when :int
|
|
177
|
+
# DEV-2.0: Change to a more strict coercion method. Integer(value).
|
|
178
|
+
value.to_i
|
|
179
|
+
when :float
|
|
180
|
+
# DEV-2.0: Change to a more strict coercion method. Float(value).
|
|
181
|
+
value.to_f
|
|
182
|
+
when :array
|
|
183
|
+
values = value.split(',')
|
|
184
|
+
|
|
185
|
+
values.map! do |v|
|
|
186
|
+
v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
|
|
187
|
+
|
|
188
|
+
v.empty? ? nil : v
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
values.compact!
|
|
192
|
+
values
|
|
193
|
+
when :bool
|
|
194
|
+
string_value = value.strip
|
|
195
|
+
string_value = string_value.downcase
|
|
196
|
+
string_value == 'true' || string_value == '1' # rubocop:disable Style/MultipleComparison
|
|
197
|
+
when :string, NilClass
|
|
198
|
+
value
|
|
199
|
+
else
|
|
200
|
+
raise ArgumentError,
|
|
201
|
+
"The option #{@definition.name} is using an unsupported type option for env coercion `#{@definition.type}`"
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def validate_type(value)
|
|
206
|
+
return value if skip_validation?
|
|
207
|
+
|
|
208
|
+
raise_error = false
|
|
209
|
+
|
|
210
|
+
valid_type = validate(@definition.type, value)
|
|
211
|
+
|
|
212
|
+
unless valid_type
|
|
213
|
+
raise_error = if @definition.type_options[:nilable]
|
|
214
|
+
!value.is_a?(NilClass)
|
|
215
|
+
else
|
|
216
|
+
true
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
if raise_error
|
|
221
|
+
error_msg = if @definition.type_options[:nilable]
|
|
222
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a "\
|
|
223
|
+
"#{@definition.type} or `nil`, but a `#{value.class}` was provided (#{value.inspect})."\
|
|
224
|
+
else
|
|
225
|
+
"The setting `#{@definition.name}` inside your app's `Datadog.configure` block expects a "\
|
|
226
|
+
"#{@definition.type}, but a `#{value.class}` was provided (#{value.inspect})."\
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
error_msg = "#{error_msg} Please update your `configure` block. "\
|
|
230
|
+
'Alternatively, you can disable this validation using the '\
|
|
231
|
+
'`DD_EXPERIMENTAL_SKIP_CONFIGURATION_VALIDATION=true`environment variable. '\
|
|
232
|
+
'For help, please open an issue on <https://github.com/datadog/dd-trace-rb/issues/new/choose>.'
|
|
233
|
+
|
|
234
|
+
raise ArgumentError, error_msg
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
value
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def validate(type, value)
|
|
241
|
+
case type
|
|
242
|
+
when :string
|
|
243
|
+
value.is_a?(String)
|
|
244
|
+
when :int, :float
|
|
245
|
+
value.is_a?(Numeric)
|
|
246
|
+
when :array
|
|
247
|
+
value.is_a?(Array)
|
|
248
|
+
when :hash
|
|
249
|
+
value.is_a?(Hash)
|
|
250
|
+
when :bool
|
|
251
|
+
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
252
|
+
when :proc
|
|
253
|
+
value.is_a?(Proc)
|
|
254
|
+
when :symbol
|
|
255
|
+
value.is_a?(Symbol)
|
|
256
|
+
when NilClass
|
|
257
|
+
true # No validation is performed when option is typeless
|
|
258
|
+
else
|
|
259
|
+
raise ArgumentError, "The option #{@definition.name} is using an unsupported type option `#{@definition.type}`"
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Directly manipulates the current value and currently set precedence.
|
|
264
|
+
def internal_set(value, precedence)
|
|
265
|
+
old_value = @value
|
|
266
|
+
(@value = context_exec(validate_type(value), old_value, &definition.setter)).tap do |v|
|
|
267
|
+
@is_set = true
|
|
268
|
+
@precedence_set = precedence
|
|
269
|
+
# Store original value to ensure we can always safely call `#internal_set`
|
|
270
|
+
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
|
271
|
+
# on the original value, not on a valud that has already been processed by `definition.setter`.
|
|
272
|
+
@value_per_precedence[precedence] = value
|
|
273
|
+
context_exec(v, old_value, precedence, &definition.after_set) if definition.after_set
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
59
277
|
def context_exec(*args, &block)
|
|
60
278
|
@context.instance_exec(*args, &block)
|
|
61
279
|
end
|
|
@@ -63,6 +281,38 @@ module Datadog
|
|
|
63
281
|
def context_eval(&block)
|
|
64
282
|
@context.instance_eval(&block)
|
|
65
283
|
end
|
|
284
|
+
|
|
285
|
+
def set_value_from_env_or_default
|
|
286
|
+
value = nil
|
|
287
|
+
precedence = nil
|
|
288
|
+
|
|
289
|
+
if definition.env && ENV[definition.env]
|
|
290
|
+
value = coerce_env_variable(ENV[definition.env])
|
|
291
|
+
precedence = Precedence::PROGRAMMATIC
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
if value.nil? && definition.deprecated_env && ENV[definition.deprecated_env]
|
|
295
|
+
value = coerce_env_variable(ENV[definition.deprecated_env])
|
|
296
|
+
precedence = Precedence::PROGRAMMATIC
|
|
297
|
+
|
|
298
|
+
Datadog::Core.log_deprecation do
|
|
299
|
+
"#{definition.deprecated_env} environment variable is deprecated, use #{definition.env} instead."
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
option_value = value.nil? ? default_value : value
|
|
304
|
+
|
|
305
|
+
set(option_value, precedence: precedence || Precedence::DEFAULT)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def skip_validation?
|
|
309
|
+
['true', '1'].include?(ENV.fetch('DD_EXPERIMENTAL_SKIP_CONFIGURATION_VALIDATION', '').strip)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
# Anchor object that represents a value that is not set.
|
|
313
|
+
# This is necessary because `nil` is a valid value to be set.
|
|
314
|
+
UNSET = Object.new
|
|
315
|
+
private_constant :UNSET
|
|
66
316
|
end
|
|
67
317
|
end
|
|
68
318
|
end
|
|
@@ -11,25 +11,29 @@ module Datadog
|
|
|
11
11
|
|
|
12
12
|
attr_reader \
|
|
13
13
|
:default,
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:
|
|
14
|
+
:default_proc,
|
|
15
|
+
:env,
|
|
16
|
+
:deprecated_env,
|
|
17
|
+
:env_parser,
|
|
17
18
|
:name,
|
|
18
|
-
:
|
|
19
|
+
:after_set,
|
|
19
20
|
:resetter,
|
|
20
21
|
:setter,
|
|
21
|
-
:type
|
|
22
|
+
:type,
|
|
23
|
+
:type_options
|
|
22
24
|
|
|
23
25
|
def initialize(name, meta = {}, &block)
|
|
24
26
|
@default = meta[:default]
|
|
25
|
-
@
|
|
26
|
-
@
|
|
27
|
-
@
|
|
27
|
+
@default_proc = meta[:default_proc]
|
|
28
|
+
@env = meta[:env]
|
|
29
|
+
@deprecated_env = meta[:deprecated_env]
|
|
30
|
+
@env_parser = meta[:env_parser]
|
|
28
31
|
@name = name.to_sym
|
|
29
|
-
@
|
|
32
|
+
@after_set = meta[:after_set]
|
|
30
33
|
@resetter = meta[:resetter]
|
|
31
34
|
@setter = meta[:setter] || block || IDENTITY
|
|
32
35
|
@type = meta[:type]
|
|
36
|
+
@type_options = meta[:type_options]
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
# Creates a new Option, bound to the context provided.
|
|
@@ -40,50 +44,69 @@ module Datadog
|
|
|
40
44
|
# Acts as DSL for building OptionDefinitions
|
|
41
45
|
# @public_api
|
|
42
46
|
class Builder
|
|
47
|
+
class InvalidOptionError < StandardError; end
|
|
48
|
+
|
|
43
49
|
attr_reader \
|
|
44
50
|
:helpers
|
|
45
51
|
|
|
46
52
|
def initialize(name, options = {})
|
|
53
|
+
@env = nil
|
|
54
|
+
@deprecated_env = nil
|
|
55
|
+
@env_parser = nil
|
|
47
56
|
@default = nil
|
|
48
|
-
@
|
|
49
|
-
@depends_on = []
|
|
57
|
+
@default_proc = nil
|
|
50
58
|
@helpers = {}
|
|
51
|
-
@lazy = false
|
|
52
59
|
@name = name.to_sym
|
|
53
|
-
@
|
|
60
|
+
@after_set = nil
|
|
54
61
|
@resetter = nil
|
|
55
62
|
@setter = OptionDefinition::IDENTITY
|
|
56
63
|
@type = nil
|
|
57
|
-
|
|
64
|
+
@type_options = {}
|
|
58
65
|
# If options were supplied, apply them.
|
|
59
66
|
apply_options!(options)
|
|
60
67
|
|
|
61
68
|
# Apply block if given.
|
|
62
69
|
yield(self) if block_given?
|
|
70
|
+
|
|
71
|
+
validate_options!
|
|
63
72
|
end
|
|
64
73
|
|
|
65
|
-
def
|
|
66
|
-
@
|
|
74
|
+
def env(value)
|
|
75
|
+
@env = value
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def deprecated_env(value)
|
|
79
|
+
@deprecated_env = value
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def env_parser(&block)
|
|
83
|
+
@env_parser = block
|
|
67
84
|
end
|
|
68
85
|
|
|
69
86
|
def default(value = nil, &block)
|
|
70
87
|
@default = block || value
|
|
71
88
|
end
|
|
72
89
|
|
|
73
|
-
def
|
|
74
|
-
@
|
|
90
|
+
def default_proc(&block)
|
|
91
|
+
@default_proc = block
|
|
75
92
|
end
|
|
76
93
|
|
|
77
94
|
def helper(name, *_args, &block)
|
|
78
95
|
@helpers[name] = block
|
|
79
96
|
end
|
|
80
97
|
|
|
81
|
-
def lazy(
|
|
82
|
-
|
|
98
|
+
def lazy(_value = true)
|
|
99
|
+
Datadog::Core.log_deprecation do
|
|
100
|
+
'Defining an option as lazy is deprecated for removal. Options now always behave as lazy. '\
|
|
101
|
+
"Please remove all references to the lazy setting.\n"\
|
|
102
|
+
'Non-lazy options that were previously stored as blocks are no longer supported. '\
|
|
103
|
+
'If you used this feature, please let us know by opening an issue on: '\
|
|
104
|
+
'https://github.com/datadog/dd-trace-rb/issues/new so we can better understand and support your use case.'
|
|
105
|
+
end
|
|
83
106
|
end
|
|
84
107
|
|
|
85
|
-
def
|
|
86
|
-
@
|
|
108
|
+
def after_set(&block)
|
|
109
|
+
@after_set = block
|
|
87
110
|
end
|
|
88
111
|
|
|
89
112
|
def resetter(&block)
|
|
@@ -94,8 +117,11 @@ module Datadog
|
|
|
94
117
|
@setter = block
|
|
95
118
|
end
|
|
96
119
|
|
|
97
|
-
def type(value
|
|
120
|
+
def type(value, nilable: false)
|
|
98
121
|
@type = value
|
|
122
|
+
@type_options = { nilable: nilable }
|
|
123
|
+
|
|
124
|
+
value
|
|
99
125
|
end
|
|
100
126
|
|
|
101
127
|
# For applying options for OptionDefinition
|
|
@@ -103,13 +129,15 @@ module Datadog
|
|
|
103
129
|
return if options.nil? || options.empty?
|
|
104
130
|
|
|
105
131
|
default(options[:default]) if options.key?(:default)
|
|
106
|
-
|
|
107
|
-
|
|
132
|
+
default_proc(&options[:default_proc]) if options.key?(:default_proc)
|
|
133
|
+
env(options[:env]) if options.key?(:env)
|
|
134
|
+
deprecated_env(options[:deprecated_env]) if options.key?(:deprecated_env)
|
|
135
|
+
env_parser(&options[:env_parser]) if options.key?(:env_parser)
|
|
108
136
|
lazy(options[:lazy]) if options.key?(:lazy)
|
|
109
|
-
|
|
137
|
+
after_set(&options[:after_set]) if options.key?(:after_set)
|
|
110
138
|
resetter(&options[:resetter]) if options.key?(:resetter)
|
|
111
139
|
setter(&options[:setter]) if options.key?(:setter)
|
|
112
|
-
type(
|
|
140
|
+
type(options[:type], **(options[:type_options] || {})) if options.key?(:type)
|
|
113
141
|
end
|
|
114
142
|
|
|
115
143
|
def to_definition
|
|
@@ -119,15 +147,28 @@ module Datadog
|
|
|
119
147
|
def meta
|
|
120
148
|
{
|
|
121
149
|
default: @default,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
150
|
+
default_proc: @default_proc,
|
|
151
|
+
env: @env,
|
|
152
|
+
deprecated_env: @deprecated_env,
|
|
153
|
+
env_parser: @env_parser,
|
|
154
|
+
after_set: @after_set,
|
|
126
155
|
resetter: @resetter,
|
|
127
156
|
setter: @setter,
|
|
128
|
-
type: @type
|
|
157
|
+
type: @type,
|
|
158
|
+
type_options: @type_options
|
|
129
159
|
}
|
|
130
160
|
end
|
|
161
|
+
|
|
162
|
+
private
|
|
163
|
+
|
|
164
|
+
def validate_options!
|
|
165
|
+
if !@default.nil? && @default_proc
|
|
166
|
+
raise InvalidOptionError,
|
|
167
|
+
'Using `default` and `default_proc` is not allowed. Please use one or the other.' \
|
|
168
|
+
'If you want to store a block as the default value use `default_proc`'\
|
|
169
|
+
' otherwise use `default`'
|
|
170
|
+
end
|
|
171
|
+
end
|
|
131
172
|
end
|
|
132
173
|
end
|
|
133
174
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require_relative 'option_definition'
|
|
3
|
-
require_relative 'option_definition_set'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Core
|
|
@@ -18,13 +18,15 @@ 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
|
|
25
25
|
|
|
26
26
|
def option(name, meta = {}, &block)
|
|
27
|
-
|
|
27
|
+
settings_name = defined?(@settings_name) && @settings_name
|
|
28
|
+
option_name = settings_name ? "#{settings_name}.#{name}" : name
|
|
29
|
+
builder = OptionDefinition::Builder.new(option_name, meta, &block)
|
|
28
30
|
options[name] = builder.to_definition.tap do
|
|
29
31
|
# Resolve and define helper functions
|
|
30
32
|
helpers = default_helpers(name)
|
|
@@ -62,17 +64,19 @@ module Datadog
|
|
|
62
64
|
# @public_api
|
|
63
65
|
module InstanceMethods
|
|
64
66
|
def options
|
|
65
|
-
@options ||=
|
|
67
|
+
@options ||= {}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def set_option(name, value, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
71
|
+
resolve_option(name).set(value, precedence: precedence)
|
|
66
72
|
end
|
|
67
73
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
options[name].set(value)
|
|
74
|
+
def unset_option(name, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
|
|
75
|
+
resolve_option(name).unset(precedence)
|
|
71
76
|
end
|
|
72
77
|
|
|
73
78
|
def get_option(name)
|
|
74
|
-
|
|
75
|
-
options[name].get
|
|
79
|
+
resolve_option(name).get
|
|
76
80
|
end
|
|
77
81
|
|
|
78
82
|
def reset_option(name)
|
|
@@ -84,6 +88,12 @@ module Datadog
|
|
|
84
88
|
self.class.options.key?(name)
|
|
85
89
|
end
|
|
86
90
|
|
|
91
|
+
# Is this option's value the default fallback value?
|
|
92
|
+
def using_default?(name)
|
|
93
|
+
get_option(name) # Resolve value check if environment variable overwrote the default
|
|
94
|
+
options[name].default_precedence?
|
|
95
|
+
end
|
|
96
|
+
|
|
87
97
|
def options_hash
|
|
88
98
|
self.class.options.merge(options).each_with_object({}) do |(key, _), hash|
|
|
89
99
|
hash[key] = get_option(key)
|
|
@@ -91,17 +101,19 @@ module Datadog
|
|
|
91
101
|
end
|
|
92
102
|
|
|
93
103
|
def reset_options!
|
|
94
|
-
options.
|
|
104
|
+
options.each_value(&:reset)
|
|
95
105
|
end
|
|
96
106
|
|
|
97
107
|
private
|
|
98
108
|
|
|
99
|
-
|
|
109
|
+
# Ensure option DSL is loaded
|
|
110
|
+
def resolve_option(name)
|
|
111
|
+
option = options[name]
|
|
112
|
+
return option if option
|
|
113
|
+
|
|
100
114
|
assert_valid_option!(name)
|
|
101
115
|
definition = self.class.options[name]
|
|
102
|
-
definition.build(self)
|
|
103
|
-
options[name] = option
|
|
104
|
-
end
|
|
116
|
+
options[name] = definition.build(self)
|
|
105
117
|
end
|
|
106
118
|
|
|
107
119
|
def assert_valid_option!(name)
|