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,21 +1,36 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'tracer'
|
|
4
|
+
require_relative 'configuration/agent_settings_resolver'
|
|
4
5
|
require_relative 'flush'
|
|
5
6
|
require_relative 'sync_writer'
|
|
6
7
|
require_relative 'sampling/span/rule_parser'
|
|
7
8
|
require_relative 'sampling/span/sampler'
|
|
9
|
+
require_relative 'diagnostics/environment_logger'
|
|
8
10
|
|
|
9
11
|
module Datadog
|
|
10
12
|
module Tracing
|
|
11
13
|
# Tracing component
|
|
12
14
|
module Component
|
|
13
|
-
|
|
15
|
+
# Methods that interact with component instance fields.
|
|
16
|
+
module InstanceMethods
|
|
17
|
+
# Hot-swaps with a new sampler.
|
|
18
|
+
# This operation acquires the Components lock to ensure
|
|
19
|
+
# there is no concurrent modification of the sampler.
|
|
20
|
+
def reconfigure_live_sampler
|
|
21
|
+
sampler = self.class.build_sampler(Datadog.configuration)
|
|
22
|
+
Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def build_tracer(settings, logger:)
|
|
14
27
|
# If a custom tracer has been provided, use it instead.
|
|
15
28
|
# Ignore all other options (they should already be configured.)
|
|
16
29
|
tracer = settings.tracing.instance
|
|
17
30
|
return tracer unless tracer.nil?
|
|
18
31
|
|
|
32
|
+
agent_settings = Configuration::AgentSettingsResolver.call(settings, logger: logger)
|
|
33
|
+
|
|
19
34
|
# Apply test mode settings if test mode is activated
|
|
20
35
|
if settings.tracing.test_mode.enabled
|
|
21
36
|
trace_flush = build_test_mode_trace_flush(settings)
|
|
@@ -27,13 +42,18 @@ module Datadog
|
|
|
27
42
|
writer = build_writer(settings, agent_settings)
|
|
28
43
|
end
|
|
29
44
|
|
|
30
|
-
|
|
45
|
+
# The sampler instance is wrapped in a delegator,
|
|
46
|
+
# so dynamic instrumentation can hot-swap it.
|
|
47
|
+
# This prevents full tracer reinitialization on sampling changes.
|
|
48
|
+
sampler_delegator = SamplerDelegatorComponent.new(sampler)
|
|
49
|
+
|
|
50
|
+
subscribe_to_writer_events!(writer, sampler_delegator, settings.tracing.test_mode.enabled)
|
|
31
51
|
|
|
32
52
|
Tracing::Tracer.new(
|
|
33
53
|
default_service: settings.service,
|
|
34
54
|
enabled: settings.tracing.enabled,
|
|
35
55
|
trace_flush: trace_flush,
|
|
36
|
-
sampler:
|
|
56
|
+
sampler: sampler_delegator,
|
|
37
57
|
span_sampler: build_span_sampler(settings),
|
|
38
58
|
writer: writer,
|
|
39
59
|
tags: build_tracer_tags(settings),
|
|
@@ -62,6 +82,23 @@ module Datadog
|
|
|
62
82
|
else
|
|
63
83
|
ensure_priority_sampling(sampler, settings)
|
|
64
84
|
end
|
|
85
|
+
elsif (rules = settings.tracing.sampling.rules)
|
|
86
|
+
post_sampler = Tracing::Sampling::RuleSampler.parse(
|
|
87
|
+
rules,
|
|
88
|
+
settings.tracing.sampling.rate_limit,
|
|
89
|
+
settings.tracing.sampling.default_rate
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
post_sampler ||= # Fallback RuleSampler in case `rules` parsing fails
|
|
93
|
+
Tracing::Sampling::RuleSampler.new(
|
|
94
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
95
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
99
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
100
|
+
post_sampler: post_sampler
|
|
101
|
+
)
|
|
65
102
|
elsif settings.tracing.priority_sampling == false
|
|
66
103
|
Tracing::Sampling::RuleSampler.new(
|
|
67
104
|
rate_limit: settings.tracing.sampling.rate_limit,
|
|
@@ -97,21 +134,19 @@ module Datadog
|
|
|
97
134
|
# process, but can take a variety of options (including
|
|
98
135
|
# a fully custom instance) that makes the Tracer
|
|
99
136
|
# initialization process complex.
|
|
100
|
-
def build_writer(settings, agent_settings)
|
|
137
|
+
def build_writer(settings, agent_settings, options = settings.tracing.writer_options)
|
|
101
138
|
if (writer = settings.tracing.writer)
|
|
102
139
|
return writer
|
|
103
140
|
end
|
|
104
141
|
|
|
105
|
-
Tracing::Writer.new(agent_settings: agent_settings, **
|
|
142
|
+
Tracing::Writer.new(agent_settings: agent_settings, **options)
|
|
106
143
|
end
|
|
107
144
|
|
|
108
|
-
def subscribe_to_writer_events!(writer,
|
|
145
|
+
def subscribe_to_writer_events!(writer, sampler_delegator, test_mode)
|
|
109
146
|
return unless writer.respond_to?(:events) # Check if it's a custom, external writer
|
|
110
147
|
|
|
111
148
|
writer.events.after_send.subscribe(&WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK)
|
|
112
149
|
|
|
113
|
-
return unless sampler.is_a?(Tracing::Sampling::PrioritySampler)
|
|
114
|
-
|
|
115
150
|
# DEV: We need to ignore priority sampling updates coming from the agent in test mode
|
|
116
151
|
# because test mode wants to *unconditionally* sample all traces.
|
|
117
152
|
#
|
|
@@ -119,11 +154,11 @@ module Datadog
|
|
|
119
154
|
# here to achieve 100% sampling rate.
|
|
120
155
|
return if test_mode
|
|
121
156
|
|
|
122
|
-
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(
|
|
157
|
+
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(sampler_delegator))
|
|
123
158
|
end
|
|
124
159
|
|
|
125
160
|
WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK = lambda do |_, responses|
|
|
126
|
-
|
|
161
|
+
Tracing::Diagnostics::EnvironmentLogger.collect_and_log!(responses: responses)
|
|
127
162
|
end
|
|
128
163
|
|
|
129
164
|
# Create new lambda for writer callback,
|
|
@@ -143,6 +178,27 @@ module Datadog
|
|
|
143
178
|
Tracing::Sampling::Span::Sampler.new(rules || [])
|
|
144
179
|
end
|
|
145
180
|
|
|
181
|
+
# Sampler wrapper component, to allow for hot-swapping
|
|
182
|
+
# the sampler instance used by the tracer.
|
|
183
|
+
# Swapping samplers happens during Dynamic Configuration.
|
|
184
|
+
class SamplerDelegatorComponent
|
|
185
|
+
attr_accessor :sampler
|
|
186
|
+
|
|
187
|
+
def initialize(sampler)
|
|
188
|
+
@sampler = sampler
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def sample!(trace)
|
|
192
|
+
@sampler.sample!(trace)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def update(*args, **kwargs)
|
|
196
|
+
return unless @sampler.respond_to?(:update)
|
|
197
|
+
|
|
198
|
+
@sampler.update(*args, **kwargs)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
146
202
|
private
|
|
147
203
|
|
|
148
204
|
def build_tracer_tags(settings)
|
|
@@ -167,8 +223,11 @@ module Datadog
|
|
|
167
223
|
end
|
|
168
224
|
|
|
169
225
|
def build_test_mode_writer(settings, agent_settings)
|
|
170
|
-
# Flush traces synchronously, to guarantee they are written.
|
|
171
226
|
writer_options = settings.tracing.test_mode.writer_options || {}
|
|
227
|
+
|
|
228
|
+
return build_writer(settings, agent_settings, writer_options) if settings.tracing.test_mode.async
|
|
229
|
+
|
|
230
|
+
# Flush traces synchronously, to guarantee they are written.
|
|
172
231
|
Tracing::SyncWriter.new(agent_settings: agent_settings, **writer_options)
|
|
173
232
|
end
|
|
174
233
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../core/configuration/agent_settings_resolver'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Configuration
|
|
8
|
+
# This class encapsulates any tracing specific agent settings
|
|
9
|
+
class AgentSettingsResolver < Datadog::Core::Configuration::AgentSettingsResolver
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Configuration
|
|
6
|
+
module Dynamic
|
|
7
|
+
# Maps a remote dynamic configuration to a location configuration option.
|
|
8
|
+
class Option
|
|
9
|
+
attr_reader :name, :env_var
|
|
10
|
+
|
|
11
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
12
|
+
def initialize(name, env_var)
|
|
13
|
+
@name = name
|
|
14
|
+
@env_var = env_var
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
18
|
+
#
|
|
19
|
+
# @param value [Object,nil] the new value for this option
|
|
20
|
+
def call(value)
|
|
21
|
+
raise NotImplementedError
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# A dynamic configuration option that can directly mapped to a `Datadog.configuration`
|
|
26
|
+
# option and changing such option is the only requirement to apply the configuration locally.
|
|
27
|
+
class SimpleOption < Option
|
|
28
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
29
|
+
# @param env_var [String] the canonical environment variable that represents this option.
|
|
30
|
+
# This is used for telemetry reporting.
|
|
31
|
+
# @param setting_key [Symbol] option from `Datadog.configuration.tracing` that will be modified
|
|
32
|
+
#
|
|
33
|
+
# DEV: `Datadog.configuration` cannot be an argument default value because
|
|
34
|
+
# DEV: it is dynamic. Also, it is not yet declared when this method is parsed by Ruby.
|
|
35
|
+
def initialize(name, env_var, setting_key)
|
|
36
|
+
super(name, env_var)
|
|
37
|
+
@setting_key = setting_key
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
41
|
+
#
|
|
42
|
+
# @param value [Object,nil] the new value for this option
|
|
43
|
+
def call(value)
|
|
44
|
+
Datadog.logger.debug { "Reconfigured tracer option `#{@setting_key}` with value `#{value}`" }
|
|
45
|
+
|
|
46
|
+
if value.nil?
|
|
47
|
+
# Restore the local configuration value
|
|
48
|
+
configuration_object.unset_option(
|
|
49
|
+
@setting_key,
|
|
50
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
51
|
+
)
|
|
52
|
+
else
|
|
53
|
+
configuration_object.set_option(
|
|
54
|
+
@setting_key,
|
|
55
|
+
value,
|
|
56
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
protected
|
|
62
|
+
|
|
63
|
+
# The base where `setting_key` will apply
|
|
64
|
+
def configuration_object
|
|
65
|
+
Datadog.configuration.tracing
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'dynamic/option'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Configuration
|
|
8
|
+
# Tracing Dynamic Configuration,
|
|
9
|
+
# powered by the Remote Configuration platform.
|
|
10
|
+
module Dynamic
|
|
11
|
+
# Dynamic configuration for `DD_LOGS_INJECTION`.
|
|
12
|
+
class LogInjectionEnabled < SimpleOption
|
|
13
|
+
def initialize
|
|
14
|
+
super('log_injection_enabled', 'DD_LOGS_INJECTION', :log_injection)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Dynamic configuration for `DD_TRACE_HEADER_TAGS`.
|
|
19
|
+
class TracingHeaderTags < SimpleOption
|
|
20
|
+
def initialize
|
|
21
|
+
super('tracing_header_tags', 'DD_TRACE_HEADER_TAGS', :header_tags)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(tracing_header_tags)
|
|
25
|
+
# Modify the remote configuration value that it matches the
|
|
26
|
+
# environment variable it configures.
|
|
27
|
+
if tracing_header_tags
|
|
28
|
+
tracing_header_tags.map! do |hash|
|
|
29
|
+
"#{hash['header']}:#{hash['tag_name']}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
super(tracing_header_tags)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Dynamic configuration for `DD_TRACE_SAMPLE_RATE`.
|
|
38
|
+
class TracingSamplingRate < SimpleOption
|
|
39
|
+
def initialize
|
|
40
|
+
super('tracing_sampling_rate', 'DD_TRACE_SAMPLE_RATE', :default_rate)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Ensures sampler is rebuilt and new configuration is applied
|
|
44
|
+
def call(tracing_sampling_rate)
|
|
45
|
+
super
|
|
46
|
+
Datadog.send(:components).reconfigure_live_sampler
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
def configuration_object
|
|
52
|
+
Datadog.configuration.tracing.sampling
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# List of all tracing dynamic configuration options supported.
|
|
57
|
+
OPTIONS = [LogInjectionEnabled, TracingHeaderTags, TracingSamplingRate].map do |option_class|
|
|
58
|
+
option = option_class.new
|
|
59
|
+
[option.name, option.env_var, option]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -1,99 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../core/configuration/ext'
|
|
4
|
+
|
|
1
5
|
module Datadog
|
|
2
6
|
module Tracing
|
|
3
7
|
module Configuration
|
|
4
8
|
# Constants for configuration settings
|
|
5
9
|
# e.g. Env vars, default values, enums, etc...
|
|
6
10
|
module Ext
|
|
7
|
-
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
|
8
|
-
|
|
11
|
+
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
|
12
|
+
ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
|
|
13
|
+
ENV_TRACE_ID_128_BIT_GENERATION_ENABLED = 'DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED'
|
|
9
14
|
|
|
10
15
|
# @public_api
|
|
11
16
|
module SpanAttributeSchema
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
VERSION_ONE = 'v1'.freeze
|
|
17
|
+
ENV_GLOBAL_DEFAULT_SERVICE_NAME_ENABLED = 'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED'
|
|
18
|
+
ENV_PEER_SERVICE_MAPPING = 'DD_TRACE_PEER_SERVICE_MAPPING'
|
|
15
19
|
end
|
|
16
20
|
|
|
17
|
-
# @public_api
|
|
18
21
|
module Analytics
|
|
19
|
-
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
22
|
+
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
# @public_api
|
|
23
26
|
module Correlation
|
|
24
|
-
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'
|
|
25
|
-
ENV_TRACE_ID_128_BIT_LOGGING_ENABLED = 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
27
|
+
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'
|
|
28
|
+
ENV_TRACE_ID_128_BIT_LOGGING_ENABLED = 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
# @public_api
|
|
29
32
|
module Distributed
|
|
30
33
|
# Custom Datadog format
|
|
31
|
-
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
34
|
+
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
32
35
|
|
|
33
|
-
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
36
|
+
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
34
37
|
# @deprecated Use `b3multi` instead.
|
|
35
|
-
PROPAGATION_STYLE_B3 = 'B3'
|
|
38
|
+
PROPAGATION_STYLE_B3 = 'B3'
|
|
36
39
|
|
|
37
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
40
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
38
41
|
# @deprecated Use `b3` instead.
|
|
39
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
42
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
40
43
|
|
|
41
44
|
# W3C Trace Context
|
|
42
|
-
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
45
|
+
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
43
46
|
|
|
44
47
|
# Sets both extract and inject propagation style tho the provided value.
|
|
45
48
|
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
|
46
49
|
# `DD_TRACE_PROPAGATION_STYLE_EXTRACT`.
|
|
47
|
-
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
50
|
+
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
48
51
|
|
|
49
|
-
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
52
|
+
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
50
53
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_INJECT` instead.
|
|
51
|
-
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
54
|
+
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
52
55
|
|
|
53
|
-
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
56
|
+
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
54
57
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_EXTRACT` instead.
|
|
55
|
-
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
58
|
+
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
56
59
|
|
|
57
60
|
# A no-op propagator. Compatible with OpenTelemetry's `none` propagator.
|
|
58
61
|
# @see https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/#get_otel__propagators
|
|
59
|
-
PROPAGATION_STYLE_NONE = 'none'
|
|
62
|
+
PROPAGATION_STYLE_NONE = 'none'
|
|
63
|
+
|
|
64
|
+
# Strictly stop at the first successfully serialized style.
|
|
65
|
+
EXTRACT_FIRST = 'DD_TRACE_PROPAGATION_EXTRACT_FIRST'
|
|
60
66
|
|
|
61
|
-
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
67
|
+
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
62
68
|
end
|
|
63
69
|
|
|
64
70
|
# @public_api
|
|
65
71
|
module NET
|
|
66
|
-
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
72
|
+
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
67
73
|
end
|
|
68
74
|
|
|
69
75
|
# @public_api
|
|
70
76
|
module Sampling
|
|
71
|
-
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
72
|
-
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
77
|
+
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
78
|
+
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
79
|
+
ENV_RULES = 'DD_TRACE_SAMPLING_RULES'
|
|
73
80
|
|
|
74
81
|
# @public_api
|
|
75
82
|
module Span
|
|
76
|
-
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
77
|
-
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
83
|
+
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
84
|
+
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
78
85
|
end
|
|
79
86
|
end
|
|
80
87
|
|
|
81
88
|
# @public_api
|
|
82
89
|
module Test
|
|
83
|
-
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
90
|
+
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
84
91
|
end
|
|
85
92
|
|
|
86
93
|
# @public_api
|
|
87
94
|
module Transport
|
|
88
|
-
ENV_DEFAULT_PORT =
|
|
89
|
-
ENV_DEFAULT_URL =
|
|
95
|
+
ENV_DEFAULT_PORT = Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT
|
|
96
|
+
ENV_DEFAULT_URL = Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_URL
|
|
90
97
|
end
|
|
91
98
|
|
|
92
99
|
# @public_api
|
|
93
100
|
module ClientIp
|
|
94
|
-
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'
|
|
95
|
-
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED'
|
|
96
|
-
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'
|
|
101
|
+
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'
|
|
102
|
+
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED' # TODO: deprecated, remove later
|
|
103
|
+
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'
|
|
97
104
|
end
|
|
98
105
|
end
|
|
99
106
|
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Configuration
|
|
6
|
+
module HTTP
|
|
7
|
+
# Datadog tracing supports capturing HTTP request and response headers as span tags.
|
|
8
|
+
#
|
|
9
|
+
# The provided configuration String for this feature has to be pre-processed to
|
|
10
|
+
# allow for ease of utilization by each HTTP integration.
|
|
11
|
+
#
|
|
12
|
+
# This class process configuration, stores the result, and provides methods to
|
|
13
|
+
# utilize this configuration.
|
|
14
|
+
class HeaderTags
|
|
15
|
+
# @param header_tags [Array<String>] The list of strings from DD_TRACE_HEADER_TAGS.
|
|
16
|
+
def initialize(header_tags)
|
|
17
|
+
@request_headers = {}
|
|
18
|
+
@response_headers = {}
|
|
19
|
+
@header_tags = header_tags
|
|
20
|
+
|
|
21
|
+
@header_tags.each do |header_tag|
|
|
22
|
+
header, tag = header_tag.split(':', 2)
|
|
23
|
+
|
|
24
|
+
next unless header # Empty string guard
|
|
25
|
+
|
|
26
|
+
if tag && !tag.empty?
|
|
27
|
+
# When a custom tag name is provided, use that name for both
|
|
28
|
+
# request and response tags.
|
|
29
|
+
normalized_tag = Tracing::Metadata::Ext::HTTP::Headers.to_tag(tag, allow_nested: true)
|
|
30
|
+
request = response = normalized_tag
|
|
31
|
+
else
|
|
32
|
+
# Otherwise, use our internal pattern of
|
|
33
|
+
# "http.{request|response}.headers.{header}" as tag name.
|
|
34
|
+
request = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
|
|
35
|
+
response = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@request_headers[header] = request
|
|
39
|
+
@response_headers[header] = response
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Receives a case insensitive hash with the request headers and returns
|
|
44
|
+
# a list of tag names and values that can be set in a span.
|
|
45
|
+
def request_tags(headers)
|
|
46
|
+
@request_headers.map do |header_name, span_tag|
|
|
47
|
+
# Case-insensitive search
|
|
48
|
+
header_value = headers[header_name]
|
|
49
|
+
|
|
50
|
+
[span_tag, header_value] if header_value
|
|
51
|
+
end.compact
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Receives a case insensitive hash with the response headers and returns
|
|
55
|
+
# a list of tag names and values that can be set in a span.
|
|
56
|
+
def response_tags(headers)
|
|
57
|
+
@response_headers.map do |header_name, span_tag|
|
|
58
|
+
# Case-insensitive search
|
|
59
|
+
header_value = headers[header_name]
|
|
60
|
+
|
|
61
|
+
[span_tag, header_value] if header_value
|
|
62
|
+
end.compact
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# For easy configuration inspection,
|
|
66
|
+
# print the original configuration setting.
|
|
67
|
+
def to_s
|
|
68
|
+
@header_tags.join(',').to_s
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|