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
|
@@ -37,7 +37,7 @@ module Datadog
|
|
|
37
37
|
|
|
38
38
|
request_span.resource = @app.to_proc.binding.eval('self.class').to_s
|
|
39
39
|
request_span.set_tag(Ext::TAG_JOB_ROUTING_KEY, delivery_info.routing_key)
|
|
40
|
-
request_span.set_tag(
|
|
40
|
+
request_span.set_tag(Ext::TAG_RABBITMQ_ROUTING_KEY, delivery_info.routing_key)
|
|
41
41
|
request_span.set_tag(Ext::TAG_JOB_QUEUE, delivery_info.consumer.queue.name)
|
|
42
42
|
|
|
43
43
|
request_span.set_tag(Ext::TAG_JOB_BODY, deserialized_msg) if configuration[:tag_body]
|
|
@@ -1,27 +1,91 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Tracing
|
|
5
7
|
module Contrib
|
|
6
8
|
# Contains methods for fetching values according to span attributes schema
|
|
7
9
|
module SpanAttributeSchema
|
|
8
|
-
|
|
10
|
+
REFLEXIVE_SOURCES = [Tracing::Metadata::Ext::TAG_PEER_SERVICE].freeze
|
|
11
|
+
NO_SOURCE = [].freeze
|
|
9
12
|
|
|
10
|
-
def fetch_service_name(env, default)
|
|
13
|
+
def self.fetch_service_name(env, default)
|
|
11
14
|
ENV.fetch(env) do
|
|
12
|
-
if Datadog.configuration.tracing.
|
|
13
|
-
|
|
14
|
-
Datadog.configuration.service
|
|
15
|
-
else
|
|
16
|
-
default
|
|
15
|
+
if Datadog.configuration.tracing.contrib.global_default_service_name.enabled
|
|
16
|
+
return Datadog.configuration.service
|
|
17
17
|
end
|
|
18
|
+
|
|
19
|
+
default
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
def self.set_peer_service!(span, sources)
|
|
24
|
+
# Acquire all peer.service values as well as any potential remapping
|
|
25
|
+
peer_service_val, peer_service_source = set_peer_service_from_source(span, sources)
|
|
26
|
+
remap_val = Datadog.configuration.tracing.contrib.peer_service_mapping[peer_service_val]
|
|
27
|
+
|
|
28
|
+
# Only continue to setting peer.service if actual source is found
|
|
29
|
+
return false unless peer_service_source
|
|
30
|
+
|
|
31
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_PEER_SERVICE_SOURCE, peer_service_source)
|
|
32
|
+
|
|
33
|
+
# Set peer.service to remapped value if found otherwise normally set peer.service
|
|
34
|
+
if remap_val
|
|
35
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, remap_val)
|
|
36
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_PEER_SERVICE_REMAP, peer_service_val)
|
|
37
|
+
else
|
|
38
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, peer_service_val)
|
|
39
|
+
end
|
|
40
|
+
true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# set_peer_service_from_source: Implements the extraction logic to determine the peer.service value
|
|
44
|
+
# based on the list of source tags passed as a parameter.
|
|
45
|
+
#
|
|
46
|
+
# If no values are found, it checks the default list for all spans before returning false for no result
|
|
47
|
+
# Sets the source of where the information for peer.service was extracted from
|
|
48
|
+
# Returns a peer.service value if successfully set or not
|
|
49
|
+
def self.set_peer_service_from_source(span, sources = [])
|
|
50
|
+
# Filter out sources based on existence of peer.service tag
|
|
51
|
+
sources = filter_peer_service_sources(span, sources)
|
|
52
|
+
|
|
53
|
+
# Find a possible peer.service source from the list of source tags passed in
|
|
54
|
+
sources.each do |source|
|
|
55
|
+
source_val = span.get_tag(source)
|
|
56
|
+
next unless not_empty_tag?(source_val)
|
|
57
|
+
|
|
58
|
+
return source_val, source
|
|
59
|
+
end
|
|
60
|
+
false
|
|
24
61
|
end
|
|
62
|
+
|
|
63
|
+
private_class_method :set_peer_service_from_source
|
|
64
|
+
|
|
65
|
+
# filter_peer_service_sources: returns filtered sources based on existence of peer.service tag
|
|
66
|
+
# If peer.service exists, we do not read from any other source rather use peer.service as source
|
|
67
|
+
# This is to prevent overwriting of pre-existing peer.service tags
|
|
68
|
+
def self.filter_peer_service_sources(span, sources)
|
|
69
|
+
ps = span.get_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE)
|
|
70
|
+
# Do not override existing peer.service tag if it exists based on schema version
|
|
71
|
+
return REFLEXIVE_SOURCES if not_empty_tag?(ps)
|
|
72
|
+
|
|
73
|
+
# Check that peer.service is only set on spankind client/producer spans
|
|
74
|
+
if (span.get_tag(Tracing::Metadata::Ext::TAG_KIND) == Tracing::Metadata::Ext::SpanKind::TAG_CLIENT) ||
|
|
75
|
+
(span.get_tag(Tracing::Metadata::Ext::TAG_KIND) == Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
|
|
76
|
+
return sources
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
NO_SOURCE
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private_class_method :filter_peer_service_sources
|
|
83
|
+
|
|
84
|
+
def self.not_empty_tag?(tag)
|
|
85
|
+
tag && (tag != '')
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private_class_method :not_empty_tag?
|
|
25
89
|
end
|
|
26
90
|
end
|
|
27
91
|
end
|
|
@@ -12,18 +12,21 @@ module Datadog
|
|
|
12
12
|
# @public_api
|
|
13
13
|
class Settings < Contrib::Configuration::Settings
|
|
14
14
|
option :enabled do |o|
|
|
15
|
-
o.
|
|
16
|
-
o.
|
|
15
|
+
o.type :bool
|
|
16
|
+
o.env Ext::ENV_ENABLED
|
|
17
|
+
o.default true
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
option :analytics_enabled do |o|
|
|
20
|
-
o.
|
|
21
|
-
o.
|
|
21
|
+
o.type :bool
|
|
22
|
+
o.env Ext::ENV_ANALYTICS_ENABLED
|
|
23
|
+
o.default false
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
option :analytics_sample_rate do |o|
|
|
25
|
-
o.
|
|
26
|
-
o.
|
|
27
|
+
o.type :float
|
|
28
|
+
o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
|
|
29
|
+
o.default 1.0
|
|
27
30
|
end
|
|
28
31
|
end
|
|
29
32
|
end
|
|
@@ -12,18 +12,21 @@ module Datadog
|
|
|
12
12
|
# @public_api
|
|
13
13
|
class Settings < Contrib::Configuration::Settings
|
|
14
14
|
option :enabled do |o|
|
|
15
|
-
o.
|
|
16
|
-
o.
|
|
15
|
+
o.type :bool
|
|
16
|
+
o.env Ext::ENV_ENABLED
|
|
17
|
+
o.default true
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
option :analytics_enabled do |o|
|
|
20
|
-
o.
|
|
21
|
-
o.
|
|
21
|
+
o.type :bool
|
|
22
|
+
o.env Ext::ENV_ANALYTICS_ENABLED
|
|
23
|
+
o.default false
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
option :analytics_sample_rate do |o|
|
|
25
|
-
o.
|
|
26
|
-
o.
|
|
27
|
+
o.type :float
|
|
28
|
+
o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
|
|
29
|
+
o.default 1.0
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
option :service_name
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Tracing
|
|
3
5
|
module Contrib
|
|
@@ -5,19 +7,19 @@ module Datadog
|
|
|
5
7
|
# SuckerPunch integration constants
|
|
6
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
7
9
|
module Ext
|
|
8
|
-
ENV_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ENABLED'
|
|
9
|
-
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED'
|
|
10
|
-
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'
|
|
11
|
-
SERVICE_NAME = 'sucker_punch'
|
|
12
|
-
SPAN_PERFORM = 'sucker_punch.perform'
|
|
13
|
-
SPAN_PERFORM_ASYNC = 'sucker_punch.perform_async'
|
|
14
|
-
SPAN_PERFORM_IN = 'sucker_punch.perform_in'
|
|
15
|
-
TAG_PERFORM_IN = 'sucker_punch.perform_in'
|
|
16
|
-
TAG_QUEUE = 'sucker_punch.queue'
|
|
17
|
-
TAG_COMPONENT = 'sucker_punch'
|
|
18
|
-
TAG_OPERATION_PERFORM = 'perform'
|
|
19
|
-
TAG_OPERATION_PERFORM_ASYNC = 'perform_async'
|
|
20
|
-
TAG_OPERATION_PERFORM_IN = 'perform_in'
|
|
10
|
+
ENV_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ENABLED'
|
|
11
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED'
|
|
12
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'
|
|
13
|
+
SERVICE_NAME = 'sucker_punch'
|
|
14
|
+
SPAN_PERFORM = 'sucker_punch.perform'
|
|
15
|
+
SPAN_PERFORM_ASYNC = 'sucker_punch.perform_async'
|
|
16
|
+
SPAN_PERFORM_IN = 'sucker_punch.perform_in'
|
|
17
|
+
TAG_PERFORM_IN = 'sucker_punch.perform_in'
|
|
18
|
+
TAG_QUEUE = 'sucker_punch.queue'
|
|
19
|
+
TAG_COMPONENT = 'sucker_punch'
|
|
20
|
+
TAG_OPERATION_PERFORM = 'perform'
|
|
21
|
+
TAG_OPERATION_PERFORM_ASYNC = 'perform_async'
|
|
22
|
+
TAG_OPERATION_PERFORM_IN = 'perform_in'
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Tracing
|
|
3
5
|
module Contrib
|
|
4
6
|
module Utils
|
|
5
7
|
# Common database-related utility functions.
|
|
6
8
|
module Database
|
|
7
|
-
VENDOR_DEFAULT = 'defaultdb'
|
|
8
|
-
VENDOR_POSTGRES = 'postgres'
|
|
9
|
-
VENDOR_SQLITE = 'sqlite'
|
|
9
|
+
VENDOR_DEFAULT = 'defaultdb'
|
|
10
|
+
VENDOR_POSTGRES = 'postgres'
|
|
11
|
+
VENDOR_SQLITE = 'sqlite'
|
|
10
12
|
|
|
11
13
|
module_function
|
|
12
14
|
|
|
@@ -134,18 +134,18 @@ module Datadog
|
|
|
134
134
|
(?:"|%22)?
|
|
135
135
|
)
|
|
136
136
|
(?: # common keys
|
|
137
|
-
(?:
|
|
138
|
-
|pass(?:_?phrase)? # pass, passphrase variants
|
|
137
|
+
(?:old[-_]?|new_?)?p(?:ass)?w(?:or)?d(?:1|2)? # pw, password variants
|
|
138
|
+
|pass(?:[-_]?phrase)? # pass, passphrase variants
|
|
139
139
|
|secret
|
|
140
140
|
|(?: # key, key_id variants
|
|
141
|
-
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
)key(?:_?id)?
|
|
141
|
+
api[-_]?
|
|
142
|
+
|private[-_]?
|
|
143
|
+
|public[-_]?
|
|
144
|
+
|access[-_]?
|
|
145
|
+
|secret[-_]?
|
|
146
|
+
)key(?:[-_]?id)?
|
|
147
147
|
|token
|
|
148
|
-
|
|
|
148
|
+
|consumer[-_]?(?:id|key|secret)
|
|
149
149
|
|sign(?:ed|ature)?
|
|
150
150
|
|auth(?:entication|orization)?
|
|
151
151
|
)
|
|
@@ -160,11 +160,11 @@ module Datadog
|
|
|
160
160
|
(?:"|%22) # closing '"' at end of value
|
|
161
161
|
)
|
|
162
162
|
|(?: # other common secret values
|
|
163
|
-
bearer(?:\s|%20)+[a-z0-9._
|
|
163
|
+
bearer(?:\s|%20)+[a-z0-9._-]+
|
|
164
164
|
|token(?::|%3A)[a-z0-9]{13}
|
|
165
165
|
|gh[opsu]_[0-9a-zA-Z]{36}
|
|
166
166
|
|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+/=-]|%3D|%2F|%2B)+)?
|
|
167
|
-
|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[
|
|
167
|
+
|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[^-]+-{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY(?:-{5})?(?:\n|%0A)?
|
|
168
168
|
|(?:ssh-(?:rsa|dss)|ecdsa-[a-z0-9]+-[a-z0-9]+)(?:\s|%20)*(?:[a-z0-9/.+]|%2F|%5C|%2B){100,}(?:=|%3D)*(?:(?:\s+)[a-z0-9._-]+)?
|
|
169
169
|
)
|
|
170
170
|
}ix.freeze
|
|
@@ -58,6 +58,7 @@ require_relative 'contrib/kafka/integration'
|
|
|
58
58
|
require_relative 'contrib/lograge/integration'
|
|
59
59
|
require_relative 'contrib/mongodb/integration'
|
|
60
60
|
require_relative 'contrib/mysql2/integration'
|
|
61
|
+
require_relative 'contrib/opensearch/integration'
|
|
61
62
|
require_relative 'contrib/pg/integration'
|
|
62
63
|
require_relative 'contrib/presto/integration'
|
|
63
64
|
require_relative 'contrib/qless/integration'
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require_relative 'utils'
|
|
2
2
|
require_relative 'metadata/ext'
|
|
3
|
+
require_relative '../core/logging/ext'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
5
6
|
module Tracing
|
|
@@ -14,6 +15,7 @@ module Datadog
|
|
|
14
15
|
LOG_ATTR_SPAN_ID = 'dd.span_id'.freeze
|
|
15
16
|
LOG_ATTR_TRACE_ID = 'dd.trace_id'.freeze
|
|
16
17
|
LOG_ATTR_VERSION = 'dd.version'.freeze
|
|
18
|
+
LOG_ATTR_SOURCE = 'ddsource'.freeze
|
|
17
19
|
|
|
18
20
|
attr_reader \
|
|
19
21
|
:env,
|
|
@@ -23,7 +25,6 @@ module Datadog
|
|
|
23
25
|
:span_resource,
|
|
24
26
|
:span_service,
|
|
25
27
|
:span_type,
|
|
26
|
-
:trace_id,
|
|
27
28
|
:trace_name,
|
|
28
29
|
:trace_resource,
|
|
29
30
|
:trace_service,
|
|
@@ -59,28 +60,44 @@ module Datadog
|
|
|
59
60
|
@version = Core::Utils::SafeDup.frozen_dup(version || Datadog.configuration.version)
|
|
60
61
|
end
|
|
61
62
|
|
|
63
|
+
def to_h
|
|
64
|
+
@to_h ||= {
|
|
65
|
+
# Adds IDs as tags to log output
|
|
66
|
+
dd: {
|
|
67
|
+
# To preserve precision during JSON serialization, use strings for large numbers
|
|
68
|
+
env: env.to_s,
|
|
69
|
+
service: service.to_s,
|
|
70
|
+
version: version.to_s,
|
|
71
|
+
trace_id: trace_id.to_s,
|
|
72
|
+
span_id: span_id.to_s
|
|
73
|
+
},
|
|
74
|
+
ddsource: Core::Logging::Ext::DD_SOURCE
|
|
75
|
+
}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# This method (#to_log_format) implements an algorithm by prefixing keys for nested values
|
|
79
|
+
# but the algorithm makes the constants implicit. Hence, we use it for validation during test.
|
|
62
80
|
def to_log_format
|
|
63
81
|
@log_format ||= begin
|
|
64
82
|
attributes = []
|
|
65
83
|
attributes << "#{LOG_ATTR_ENV}=#{env}" unless env.nil?
|
|
66
84
|
attributes << "#{LOG_ATTR_SERVICE}=#{service}"
|
|
67
85
|
attributes << "#{LOG_ATTR_VERSION}=#{version}" unless version.nil?
|
|
68
|
-
attributes << "#{LOG_ATTR_TRACE_ID}=#{
|
|
86
|
+
attributes << "#{LOG_ATTR_TRACE_ID}=#{trace_id}"
|
|
69
87
|
attributes << "#{LOG_ATTR_SPAN_ID}=#{span_id}"
|
|
88
|
+
attributes << "#{LOG_ATTR_SOURCE}=#{Core::Logging::Ext::DD_SOURCE}"
|
|
70
89
|
attributes.join(' ')
|
|
71
90
|
end
|
|
72
91
|
end
|
|
73
92
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
Tracing::Utils::TraceId.to_low_order(@trace_id)
|
|
83
|
-
end
|
|
93
|
+
# DEV-2.0: This public method was returning an Integer, but with 128 bit trace id it would return a String.
|
|
94
|
+
def trace_id
|
|
95
|
+
if Datadog.configuration.tracing.trace_id_128_bit_logging_enabled &&
|
|
96
|
+
!Tracing::Utils::TraceId.to_high_order(@trace_id).zero?
|
|
97
|
+
Kernel.format('%032x', @trace_id)
|
|
98
|
+
else
|
|
99
|
+
Tracing::Utils::TraceId.to_low_order(@trace_id)
|
|
100
|
+
end
|
|
84
101
|
end
|
|
85
102
|
end
|
|
86
103
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'json'
|
|
5
|
+
require 'rbconfig'
|
|
6
|
+
require_relative '../../core/diagnostics/environment_logger'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Tracing
|
|
10
|
+
module Diagnostics
|
|
11
|
+
# Collects and logs Tracing diagnostic and error information
|
|
12
|
+
module EnvironmentLogger
|
|
13
|
+
extend Core::Diagnostics::EnvironmentLogging
|
|
14
|
+
|
|
15
|
+
def self.collect_and_log!(responses: nil)
|
|
16
|
+
log_once! do
|
|
17
|
+
env_data = EnvironmentCollector.collect_config!
|
|
18
|
+
log_configuration!('TRACING', env_data.to_json)
|
|
19
|
+
|
|
20
|
+
if responses
|
|
21
|
+
err_data = EnvironmentCollector.collect_errors!(responses)
|
|
22
|
+
err_data.reject! { |_, v| v.nil? } # Remove empty values from hash output
|
|
23
|
+
log_error!('TRACING', 'Agent Error', err_data.to_json) unless err_data.empty?
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
rescue => e
|
|
27
|
+
logger.warn("Failed to collect tracing environment information: #{e} Location: #{Array(e.backtrace).first}")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Collects environment information for Tracing diagnostic logging
|
|
32
|
+
module EnvironmentCollector
|
|
33
|
+
class << self
|
|
34
|
+
def collect_config!
|
|
35
|
+
{
|
|
36
|
+
enabled: enabled,
|
|
37
|
+
agent_url: agent_url,
|
|
38
|
+
analytics_enabled: analytics_enabled,
|
|
39
|
+
sample_rate: sample_rate,
|
|
40
|
+
sampling_rules: sampling_rules,
|
|
41
|
+
integrations_loaded: integrations_loaded,
|
|
42
|
+
partial_flushing_enabled: partial_flushing_enabled,
|
|
43
|
+
priority_sampling_enabled: priority_sampling_enabled,
|
|
44
|
+
**instrumented_integrations_settings
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def collect_errors!(responses)
|
|
49
|
+
{
|
|
50
|
+
agent_error: agent_error(responses)
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @return [Boolean, nil]
|
|
55
|
+
def enabled
|
|
56
|
+
!!Datadog.configuration.tracing.enabled
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @return [String, nil] target agent URL for trace flushing
|
|
60
|
+
def agent_url
|
|
61
|
+
# Retrieve the effect agent URL, regardless of how it was configured
|
|
62
|
+
transport = Tracing.send(:tracer).writer.transport
|
|
63
|
+
|
|
64
|
+
# return `nil` with IO transport
|
|
65
|
+
return unless transport.respond_to?(:client)
|
|
66
|
+
|
|
67
|
+
adapter = transport.client.api.adapter
|
|
68
|
+
adapter.url
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Error returned by Datadog agent during a tracer flush attempt
|
|
72
|
+
# @return [String] concatenated list of transport errors
|
|
73
|
+
def agent_error(responses)
|
|
74
|
+
error_responses = responses.reject(&:ok?)
|
|
75
|
+
|
|
76
|
+
return nil if error_responses.empty?
|
|
77
|
+
|
|
78
|
+
error_responses.map(&:inspect).join(',')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @return [Boolean, nil] analytics enabled in configuration
|
|
82
|
+
def analytics_enabled
|
|
83
|
+
!!Datadog.configuration.tracing.analytics.enabled
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [Numeric, nil] tracer sample rate configured
|
|
87
|
+
def sample_rate
|
|
88
|
+
sampler = Datadog.configuration.tracing.sampler
|
|
89
|
+
return nil unless sampler
|
|
90
|
+
|
|
91
|
+
sampler.sample_rate(nil) rescue nil
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# DEV: We currently only support SimpleRule instances.
|
|
95
|
+
# DEV: These are the most commonly used rules.
|
|
96
|
+
# DEV: We should expand support for other rules in the future,
|
|
97
|
+
# DEV: although it is tricky to serialize arbitrary rules.
|
|
98
|
+
#
|
|
99
|
+
# @return [Hash, nil] sample rules configured
|
|
100
|
+
def sampling_rules
|
|
101
|
+
sampler = Datadog.configuration.tracing.sampler
|
|
102
|
+
return nil unless sampler.is_a?(Tracing::Sampling::PrioritySampler) &&
|
|
103
|
+
sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)
|
|
104
|
+
|
|
105
|
+
sampler.priority_sampler.rules.map do |rule|
|
|
106
|
+
next unless rule.is_a?(Tracing::Sampling::SimpleRule)
|
|
107
|
+
|
|
108
|
+
{
|
|
109
|
+
name: rule.matcher.name,
|
|
110
|
+
service: rule.matcher.service,
|
|
111
|
+
sample_rate: rule.sampler.sample_rate(nil)
|
|
112
|
+
}
|
|
113
|
+
end.compact
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Concatenated list of integrations activated, with their gem version.
|
|
117
|
+
# Example: "rails@6.0.3,rack@2.2.3"
|
|
118
|
+
#
|
|
119
|
+
# @return [String, nil]
|
|
120
|
+
def integrations_loaded
|
|
121
|
+
integrations = instrumented_integrations
|
|
122
|
+
return if integrations.empty?
|
|
123
|
+
|
|
124
|
+
integrations.map { |name, integration| "#{name}@#{integration.class.version}" }.join(',')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# @return [Boolean, nil] partial flushing enabled in configuration
|
|
128
|
+
def partial_flushing_enabled
|
|
129
|
+
!!Datadog.configuration.tracing.partial_flush.enabled
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# @return [Boolean, nil] priority sampling enabled in configuration
|
|
133
|
+
def priority_sampling_enabled
|
|
134
|
+
!!Datadog.configuration.tracing.priority_sampling
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
private
|
|
138
|
+
|
|
139
|
+
def instrumented_integrations
|
|
140
|
+
# `instrumented_integrations` method is added only if tracing contrib extensions are required.
|
|
141
|
+
# If tracing is used in manual mode without integrations enabled this method does not exist.
|
|
142
|
+
# CI visibility gem datadog-ci uses Datadog::Tracer without requiring datadog/tracing/contrib folder
|
|
143
|
+
# nor enabling any integrations by default which causes EnvironmentCollector to fail.
|
|
144
|
+
return {} unless Datadog.configuration.tracing.respond_to?(:instrumented_integrations)
|
|
145
|
+
|
|
146
|
+
Datadog.configuration.tracing.instrumented_integrations
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Capture all active integration settings into "integrationName_settingName: value" entries.
|
|
150
|
+
def instrumented_integrations_settings
|
|
151
|
+
instrumented_integrations.flat_map do |name, integration|
|
|
152
|
+
integration.configuration.to_h.flat_map do |setting, value|
|
|
153
|
+
next [] if setting == :tracer # Skip internal Ruby objects
|
|
154
|
+
|
|
155
|
+
# Convert value to a string to avoid custom #to_json
|
|
156
|
+
# handlers possibly causing errors.
|
|
157
|
+
[[:"integration_#{name}_#{setting}", value.to_s]]
|
|
158
|
+
end
|
|
159
|
+
end.to_h
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Tracing
|
|
3
5
|
module Diagnostics
|
|
@@ -7,25 +9,25 @@ module Datadog
|
|
|
7
9
|
module Health
|
|
8
10
|
# Metrics
|
|
9
11
|
module Metrics
|
|
10
|
-
METRIC_API_ERRORS = 'datadog.tracer.api.errors'
|
|
11
|
-
METRIC_API_REQUESTS = 'datadog.tracer.api.requests'
|
|
12
|
-
METRIC_API_RESPONSES = 'datadog.tracer.api.responses'
|
|
13
|
-
METRIC_ERROR_CONTEXT_OVERFLOW = 'datadog.tracer.error.context_overflow'
|
|
14
|
-
METRIC_ERROR_INSTRUMENTATION_PATCH = 'datadog.tracer.error.instrumentation_patch'
|
|
15
|
-
METRIC_ERROR_SPAN_FINISH = 'datadog.tracer.error.span_finish'
|
|
16
|
-
METRIC_ERROR_UNFINISHED_SPANS = 'datadog.tracer.error.unfinished_spans'
|
|
17
|
-
METRIC_INSTRUMENTATION_PATCHED = 'datadog.tracer.instrumentation_patched'
|
|
18
|
-
METRIC_QUEUE_ACCEPTED = 'datadog.tracer.queue.accepted'
|
|
19
|
-
METRIC_QUEUE_ACCEPTED_LENGTHS = 'datadog.tracer.queue.accepted_lengths'
|
|
20
|
-
METRIC_QUEUE_DROPPED = 'datadog.tracer.queue.dropped'
|
|
21
|
-
METRIC_QUEUE_LENGTH = 'datadog.tracer.queue.length'
|
|
22
|
-
METRIC_QUEUE_MAX_LENGTH = 'datadog.tracer.queue.max_length'
|
|
23
|
-
METRIC_QUEUE_SPANS = 'datadog.tracer.queue.spans'
|
|
24
|
-
METRIC_SAMPLING_SERVICE_CACHE_LENGTH = 'datadog.tracer.sampling.service_cache_length'
|
|
25
|
-
METRIC_TRACES_FILTERED = 'datadog.tracer.traces.filtered'
|
|
26
|
-
METRIC_TRANSPORT_CHUNKED = 'datadog.tracer.transport.chunked'
|
|
27
|
-
METRIC_TRANSPORT_TRACE_TOO_LARGE = 'datadog.tracer.transport.trace_too_large'
|
|
28
|
-
METRIC_WRITER_CPU_TIME = 'datadog.tracer.writer.cpu_time'
|
|
12
|
+
METRIC_API_ERRORS = 'datadog.tracer.api.errors'
|
|
13
|
+
METRIC_API_REQUESTS = 'datadog.tracer.api.requests'
|
|
14
|
+
METRIC_API_RESPONSES = 'datadog.tracer.api.responses'
|
|
15
|
+
METRIC_ERROR_CONTEXT_OVERFLOW = 'datadog.tracer.error.context_overflow'
|
|
16
|
+
METRIC_ERROR_INSTRUMENTATION_PATCH = 'datadog.tracer.error.instrumentation_patch'
|
|
17
|
+
METRIC_ERROR_SPAN_FINISH = 'datadog.tracer.error.span_finish'
|
|
18
|
+
METRIC_ERROR_UNFINISHED_SPANS = 'datadog.tracer.error.unfinished_spans'
|
|
19
|
+
METRIC_INSTRUMENTATION_PATCHED = 'datadog.tracer.instrumentation_patched'
|
|
20
|
+
METRIC_QUEUE_ACCEPTED = 'datadog.tracer.queue.accepted'
|
|
21
|
+
METRIC_QUEUE_ACCEPTED_LENGTHS = 'datadog.tracer.queue.accepted_lengths'
|
|
22
|
+
METRIC_QUEUE_DROPPED = 'datadog.tracer.queue.dropped'
|
|
23
|
+
METRIC_QUEUE_LENGTH = 'datadog.tracer.queue.length'
|
|
24
|
+
METRIC_QUEUE_MAX_LENGTH = 'datadog.tracer.queue.max_length'
|
|
25
|
+
METRIC_QUEUE_SPANS = 'datadog.tracer.queue.spans'
|
|
26
|
+
METRIC_SAMPLING_SERVICE_CACHE_LENGTH = 'datadog.tracer.sampling.service_cache_length'
|
|
27
|
+
METRIC_TRACES_FILTERED = 'datadog.tracer.traces.filtered'
|
|
28
|
+
METRIC_TRANSPORT_CHUNKED = 'datadog.tracer.transport.chunked'
|
|
29
|
+
METRIC_TRANSPORT_TRACE_TOO_LARGE = 'datadog.tracer.transport.trace_too_large'
|
|
30
|
+
METRIC_WRITER_CPU_TIME = 'datadog.tracer.writer.cpu_time'
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
end
|
|
@@ -30,8 +30,8 @@ module Datadog
|
|
|
30
30
|
return if digest.nil?
|
|
31
31
|
|
|
32
32
|
# DEV: We need these to be hex encoded
|
|
33
|
-
data[@trace_id_key] = digest.trace_id
|
|
34
|
-
data[@span_id_key] = digest.span_id
|
|
33
|
+
data[@trace_id_key] = format('%032x', digest.trace_id)
|
|
34
|
+
data[@span_id_key] = format('%016x', digest.span_id)
|
|
35
35
|
|
|
36
36
|
if digest.trace_sampling_priority
|
|
37
37
|
sampling_priority = Helpers.clamp_sampling_priority(
|
|
@@ -26,7 +26,7 @@ module Datadog
|
|
|
26
26
|
return if digest.nil?
|
|
27
27
|
|
|
28
28
|
# DEV: We need these to be hex encoded
|
|
29
|
-
value = "#{digest.trace_id
|
|
29
|
+
value = "#{format('%032x', digest.trace_id)}-#{format('%016x', digest.span_id)}"
|
|
30
30
|
|
|
31
31
|
if digest.trace_sampling_priority
|
|
32
32
|
sampling_priority = Helpers.clamp_sampling_priority(
|