ddtrace 1.12.1 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +388 -10
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +3 -5
- data/ext/ddtrace_profiling_native_extension/clock_id.h +0 -3
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -22
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +41 -6
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +76 -24
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +1 -1
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +292 -27
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/ddtrace_profiling_native_extension/extconf.rb +40 -10
- data/ext/ddtrace_profiling_native_extension/http_transport.c +48 -16
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +42 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +6 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -1
- data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
- data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +136 -32
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +12 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +1 -2
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +81 -50
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +40 -4
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +14 -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 +49 -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 +36 -17
- 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/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 +15 -3
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +269 -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 +182 -102
- data/lib/datadog/core/configuration.rb +4 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +130 -234
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- 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 +26 -22
- 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 +6 -1
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +27 -36
- 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 +1 -1
- data/lib/datadog/core/remote/negotiation.rb +19 -6
- 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 +4 -1
- 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 +12 -2
- data/lib/datadog/core/telemetry/collector.rb +13 -4
- data/lib/datadog/core/telemetry/emitter.rb +4 -2
- data/lib/datadog/core/telemetry/event.rb +19 -4
- data/lib/datadog/core/telemetry/ext.rb +4 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +2 -4
- data/lib/datadog/core/telemetry/http/ext.rb +10 -8
- data/lib/datadog/core/telemetry/http/transport.rb +2 -0
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- data/lib/datadog/core/transport/ext.rb +47 -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.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 +2 -1
- 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 +1 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +16 -17
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +69 -94
- data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
- data/lib/datadog/profiling/exporter.rb +5 -1
- data/lib/datadog/profiling/ext.rb +0 -12
- data/lib/datadog/profiling/flush.rb +7 -5
- data/lib/datadog/profiling/http_transport.rb +19 -6
- data/lib/datadog/profiling/load_native_extension.rb +7 -1
- data/lib/datadog/profiling/native_extension.rb +0 -21
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +16 -9
- data/lib/datadog/profiling.rb +16 -78
- 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 -32
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +134 -98
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -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 +9 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +18 -11
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -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 +9 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -16
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +37 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- 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 +8 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +20 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +19 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +16 -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 +32 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +21 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +39 -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 +16 -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 +33 -11
- data/lib/datadog/tracing/contrib/http/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -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 +14 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +20 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -6
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -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 +22 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +38 -5
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +25 -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 +12 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -12
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +18 -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 +8 -49
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +19 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +7 -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 +13 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +3 -38
- 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 +13 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +9 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +9 -6
- 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 +9 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +18 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +21 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -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 +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -13
- 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 +1 -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/rule_sampler.rb +29 -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 +16 -3
- 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 +124 -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 +209 -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/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +101 -93
- 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/cucumber/patcher.rb +0 -27
- 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/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/lib/datadog/profiling.rb
CHANGED
|
@@ -5,22 +5,15 @@ require_relative 'core/utils/only_once'
|
|
|
5
5
|
module Datadog
|
|
6
6
|
# Datadog Continuous Profiler implementation: https://docs.datadoghq.com/profiler/
|
|
7
7
|
module Profiling
|
|
8
|
-
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
9
|
-
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
10
|
-
|
|
11
8
|
def self.supported?
|
|
12
9
|
unsupported_reason.nil?
|
|
13
10
|
end
|
|
14
11
|
|
|
15
12
|
def self.unsupported_reason
|
|
16
13
|
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
|
|
17
|
-
# first that they can't use this on JRuby before telling them that
|
|
14
|
+
# first that they can't use this on JRuby before telling them that something else failed
|
|
18
15
|
|
|
19
|
-
native_library_compilation_skipped? ||
|
|
20
|
-
native_library_failed_to_load? ||
|
|
21
|
-
protobuf_gem_unavailable? ||
|
|
22
|
-
protobuf_version_unsupported? ||
|
|
23
|
-
protobuf_failed_to_load?
|
|
16
|
+
native_library_compilation_skipped? || native_library_failed_to_load?
|
|
24
17
|
end
|
|
25
18
|
|
|
26
19
|
# Starts the profiler, if the profiler is supported by in
|
|
@@ -53,9 +46,7 @@ module Datadog
|
|
|
53
46
|
#
|
|
54
47
|
# Note 2: All fibers in the same thread will share the same counter values.
|
|
55
48
|
#
|
|
56
|
-
# Only available when the profiler is running,
|
|
57
|
-
# features are not disabled via configuration.
|
|
58
|
-
# For instructions on enabling CPU Profiling 2.0 see the ddtrace release notes.
|
|
49
|
+
# Only available when the profiler is running, and allocation-related features are not disabled via configuration.
|
|
59
50
|
#
|
|
60
51
|
# @return [Integer] number of allocations observed in the current thread.
|
|
61
52
|
# @return [nil] when not available.
|
|
@@ -66,8 +57,14 @@ module Datadog
|
|
|
66
57
|
nil
|
|
67
58
|
end
|
|
68
59
|
|
|
60
|
+
def self.enabled?
|
|
61
|
+
profiler = Datadog.send(:components).profiler
|
|
62
|
+
# Use .send(...) to avoid exposing the attr_reader as an API to the outside
|
|
63
|
+
!!(profiler.send(:scheduler).running? if profiler)
|
|
64
|
+
end
|
|
65
|
+
|
|
69
66
|
private_class_method def self.replace_noop_allocation_count
|
|
70
|
-
def self.allocation_count # rubocop:disable Lint/
|
|
67
|
+
def self.allocation_count # rubocop:disable Lint/NestedMethodDefinition (On purpose!)
|
|
71
68
|
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
72
69
|
end
|
|
73
70
|
end
|
|
@@ -92,66 +89,6 @@ module Datadog
|
|
|
92
89
|
end
|
|
93
90
|
end
|
|
94
91
|
|
|
95
|
-
private_class_method def self.protobuf_gem_unavailable?
|
|
96
|
-
# NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
|
|
97
|
-
# where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
|
|
98
|
-
# https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
|
|
99
|
-
if !protobuf_already_loaded? && Gem.loaded_specs['google-protobuf'].nil?
|
|
100
|
-
"Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
private_class_method def self.protobuf_version_unsupported?
|
|
105
|
-
# See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
|
|
106
|
-
# we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
|
|
107
|
-
# expose the gem version constant elsewhere, so in that setup we are not able to check the version.
|
|
108
|
-
if !protobuf_already_loaded? && Gem.loaded_specs['google-protobuf'].version < GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
109
|
-
'Your google-protobuf is too old; ensure that you have google-protobuf >= 3.0 by ' \
|
|
110
|
-
"adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
private_class_method def self.protobuf_already_loaded?
|
|
115
|
-
defined?(::Google::Protobuf) && !defined?(::Protobuf)
|
|
116
|
-
!!(defined?(::Google::Protobuf) && !defined?(::Protobuf))
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
private_class_method def self.protobuf_failed_to_load?
|
|
120
|
-
unless protobuf_loaded_successfully?
|
|
121
|
-
'There was an error loading the google-protobuf library; see previous warning message for details'
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# The `google-protobuf` gem depends on a native component, and its creators helpfully tried to provide precompiled
|
|
126
|
-
# versions of this extension on rubygems.org.
|
|
127
|
-
#
|
|
128
|
-
# Unfortunately, for a long time, the supported Ruby versions metadata on these precompiled versions of the extension
|
|
129
|
-
# was not correctly set. (This is fixed in newer versions -- but not all Ruby versions we want to support can use
|
|
130
|
-
# these.)
|
|
131
|
-
#
|
|
132
|
-
# Thus, the gem can still be installed, but can be in a broken state. To avoid breaking customer applications, we
|
|
133
|
-
# use this helper to load it and gracefully handle failures.
|
|
134
|
-
private_class_method def self.protobuf_loaded_successfully?
|
|
135
|
-
return @protobuf_loaded if defined?(@protobuf_loaded)
|
|
136
|
-
|
|
137
|
-
begin
|
|
138
|
-
require 'google/protobuf'
|
|
139
|
-
@protobuf_loaded = true
|
|
140
|
-
rescue LoadError => e
|
|
141
|
-
# NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
|
|
142
|
-
# In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
|
|
143
|
-
Kernel.warn(
|
|
144
|
-
'[ddtrace] Error while loading google-protobuf gem. ' \
|
|
145
|
-
"Cause: '#{e.class.name} #{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
146
|
-
'This can happen when google-protobuf is missing its native components. ' \
|
|
147
|
-
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
148
|
-
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
149
|
-
'If the error persists, please contact Datadog support at <https://docs.datadoghq.com/help/>.'
|
|
150
|
-
)
|
|
151
|
-
@protobuf_loaded = false
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
|
|
155
92
|
private_class_method def self.native_library_failed_to_load?
|
|
156
93
|
success, exception = try_loading_native_library
|
|
157
94
|
|
|
@@ -178,6 +115,10 @@ module Datadog
|
|
|
178
115
|
end
|
|
179
116
|
end
|
|
180
117
|
|
|
118
|
+
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
|
119
|
+
# (Currently there's a leftovers that need to be cleaned up, but we should avoid other exceptions.)
|
|
120
|
+
#
|
|
121
|
+
# All of the profiler should be loaded and ready to go when this method returns `true`.
|
|
181
122
|
private_class_method def self.load_profiling
|
|
182
123
|
return false unless supported?
|
|
183
124
|
|
|
@@ -186,19 +127,16 @@ module Datadog
|
|
|
186
127
|
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
187
128
|
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
188
129
|
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
189
|
-
require_relative 'profiling/collectors/old_stack'
|
|
190
130
|
require_relative 'profiling/collectors/stack'
|
|
191
131
|
require_relative 'profiling/collectors/thread_context'
|
|
132
|
+
require_relative 'profiling/diagnostics/environment_logger'
|
|
192
133
|
require_relative 'profiling/stack_recorder'
|
|
193
|
-
require_relative 'profiling/old_recorder'
|
|
194
134
|
require_relative 'profiling/exporter'
|
|
135
|
+
require_relative 'profiling/flush'
|
|
195
136
|
require_relative 'profiling/scheduler'
|
|
196
137
|
require_relative 'profiling/tasks/setup'
|
|
197
138
|
require_relative 'profiling/profiler'
|
|
198
139
|
require_relative 'profiling/native_extension'
|
|
199
|
-
require_relative 'profiling/trace_identifiers/helper'
|
|
200
|
-
# This file is loaded in Profiling::Component#load_pprof_support; see notes there for why
|
|
201
|
-
# require_relative 'profiling/pprof/pprof_pb'
|
|
202
140
|
require_relative 'profiling/tag_builder'
|
|
203
141
|
require_relative 'profiling/http_transport'
|
|
204
142
|
|
|
@@ -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,107 @@
|
|
|
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
21
|
# @public_api
|
|
18
22
|
module Analytics
|
|
19
|
-
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
23
|
+
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
20
24
|
end
|
|
21
25
|
|
|
22
26
|
# @public_api
|
|
23
27
|
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'
|
|
28
|
+
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'
|
|
29
|
+
ENV_TRACE_ID_128_BIT_LOGGING_ENABLED = 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
26
30
|
end
|
|
27
31
|
|
|
28
32
|
# @public_api
|
|
29
33
|
module Distributed
|
|
30
34
|
# Custom Datadog format
|
|
31
|
-
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
35
|
+
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
32
36
|
|
|
33
|
-
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
37
|
+
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
34
38
|
# @deprecated Use `b3multi` instead.
|
|
35
|
-
PROPAGATION_STYLE_B3 = 'B3'
|
|
39
|
+
PROPAGATION_STYLE_B3 = 'B3'
|
|
36
40
|
|
|
37
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
41
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
38
42
|
# @deprecated Use `b3` instead.
|
|
39
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
43
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
40
44
|
|
|
41
45
|
# W3C Trace Context
|
|
42
|
-
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
46
|
+
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
43
47
|
|
|
44
48
|
# Sets both extract and inject propagation style tho the provided value.
|
|
45
49
|
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
|
46
50
|
# `DD_TRACE_PROPAGATION_STYLE_EXTRACT`.
|
|
47
|
-
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
51
|
+
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
48
52
|
|
|
49
|
-
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
53
|
+
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
50
54
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_INJECT` instead.
|
|
51
|
-
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
55
|
+
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
52
56
|
|
|
53
|
-
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
57
|
+
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
54
58
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_EXTRACT` instead.
|
|
55
|
-
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
59
|
+
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
56
60
|
|
|
57
61
|
# A no-op propagator. Compatible with OpenTelemetry's `none` propagator.
|
|
58
62
|
# @see https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/#get_otel__propagators
|
|
59
|
-
PROPAGATION_STYLE_NONE = 'none'
|
|
63
|
+
PROPAGATION_STYLE_NONE = 'none'
|
|
64
|
+
|
|
65
|
+
# Strictly stop at the first successfully serialized style.
|
|
66
|
+
EXTRACT_FIRST = 'DD_TRACE_PROPAGATION_EXTRACT_FIRST'
|
|
60
67
|
|
|
61
|
-
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
68
|
+
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
62
69
|
end
|
|
63
70
|
|
|
64
71
|
# @public_api
|
|
65
72
|
module NET
|
|
66
|
-
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
73
|
+
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
67
74
|
end
|
|
68
75
|
|
|
69
76
|
# @public_api
|
|
70
77
|
module Sampling
|
|
71
|
-
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
72
|
-
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
78
|
+
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
79
|
+
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
80
|
+
ENV_RULES = 'DD_TRACE_SAMPLING_RULES'
|
|
73
81
|
|
|
74
82
|
# @public_api
|
|
75
83
|
module Span
|
|
76
|
-
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
77
|
-
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
84
|
+
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
85
|
+
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
78
86
|
end
|
|
79
87
|
end
|
|
80
88
|
|
|
81
89
|
# @public_api
|
|
82
90
|
module Test
|
|
83
|
-
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
91
|
+
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
84
92
|
end
|
|
85
93
|
|
|
86
94
|
# @public_api
|
|
87
95
|
module Transport
|
|
88
|
-
ENV_DEFAULT_PORT =
|
|
89
|
-
ENV_DEFAULT_URL =
|
|
96
|
+
ENV_DEFAULT_PORT = Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT
|
|
97
|
+
ENV_DEFAULT_URL = Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_URL
|
|
90
98
|
end
|
|
91
99
|
|
|
92
100
|
# @public_api
|
|
93
101
|
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'
|
|
102
|
+
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'
|
|
103
|
+
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED' # TODO: deprecated, remove later
|
|
104
|
+
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'
|
|
97
105
|
end
|
|
98
106
|
end
|
|
99
107
|
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
|