ddtrace 1.0.0 → 1.9.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 +453 -2
- data/LICENSE-3rdparty.csv +6 -2
- data/README.md +10 -5
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +134 -0
- data/ext/ddtrace_profiling_loader/extconf.rb +74 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +79 -9
- data/ext/ddtrace_profiling_native_extension/clock_id.h +22 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +33 -10
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +11 -2
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +899 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +9 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +776 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +390 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +18 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +156 -114
- data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +354 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +18 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +319 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +820 -9
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +42 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +230 -3
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +89 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +487 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +39 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
- data/lib/datadog/appsec/assets/blocked.html +98 -3
- data/lib/datadog/appsec/assets/blocked.json +1 -0
- data/lib/datadog/appsec/assets/blocked.text +5 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +1250 -300
- data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -78
- data/lib/datadog/appsec/assets/waf_rules/strict.json +308 -73
- data/lib/datadog/appsec/assets.rb +3 -3
- data/lib/datadog/appsec/autoload.rb +6 -4
- data/lib/datadog/appsec/configuration/settings.rb +55 -19
- data/lib/datadog/appsec/configuration.rb +17 -3
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -3
- data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/appsec/contrib/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +95 -47
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -4
- data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -3
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +17 -21
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +13 -13
- data/lib/datadog/appsec/contrib/rack/request.rb +27 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +92 -10
- data/lib/datadog/appsec/contrib/rack/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/rails/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +82 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/patcher.rb +42 -8
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +126 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +84 -10
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
- data/lib/datadog/appsec/event.rb +38 -27
- data/lib/datadog/appsec/extensions.rb +43 -26
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -3
- data/lib/datadog/appsec/processor.rb +86 -13
- data/lib/datadog/appsec/rate_limiter.rb +6 -1
- data/lib/datadog/appsec/reactive/address_hash.rb +1 -1
- data/lib/datadog/appsec/reactive/engine.rb +3 -3
- data/lib/datadog/appsec/reactive/operation.rb +5 -6
- data/lib/datadog/appsec/reactive/subscriber.rb +1 -1
- data/lib/datadog/appsec/response.rb +63 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
- data/lib/datadog/appsec/utils/http.rb +9 -0
- data/lib/datadog/appsec/utils.rb +7 -0
- data/lib/datadog/appsec.rb +6 -6
- data/lib/datadog/ci/configuration/components.rb +1 -1
- data/lib/datadog/ci/configuration/settings.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -4
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
- data/lib/datadog/ci/contrib/rspec/integration.rb +4 -4
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
- data/lib/datadog/ci/ext/environment.rb +99 -27
- data/lib/datadog/ci/extensions.rb +4 -4
- data/lib/datadog/ci/flush.rb +2 -2
- data/lib/datadog/ci/test.rb +3 -3
- data/lib/datadog/ci.rb +6 -6
- data/lib/datadog/core/buffer/cruby.rb +1 -1
- data/lib/datadog/core/buffer/thread_safe.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +9 -12
- data/lib/datadog/core/configuration/base.rb +14 -2
- data/lib/datadog/core/configuration/components.rb +123 -54
- data/lib/datadog/core/configuration/ext.rb +26 -0
- data/lib/datadog/core/configuration/option_definition.rb +12 -3
- data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +79 -251
- data/lib/datadog/core/configuration.rb +16 -11
- data/lib/datadog/core/diagnostics/environment_logger.rb +10 -5
- data/lib/datadog/core/diagnostics/health.rb +5 -23
- data/lib/datadog/core/environment/cgroup.rb +4 -2
- data/lib/datadog/core/environment/container.rb +3 -2
- data/lib/datadog/core/environment/ext.rb +1 -1
- data/lib/datadog/core/environment/identity.rb +2 -2
- data/lib/datadog/core/environment/platform.rb +40 -0
- data/lib/datadog/core/environment/socket.rb +1 -1
- data/lib/datadog/core/environment/variable_helpers.rb +83 -11
- data/lib/datadog/core/error.rb +1 -1
- data/lib/datadog/core/extensions.rb +1 -1
- data/lib/datadog/core/header_collection.rb +41 -0
- data/lib/datadog/core/logging/ext.rb +11 -0
- data/lib/datadog/core/metrics/client.rb +25 -14
- data/lib/datadog/core/metrics/ext.rb +0 -2
- data/lib/datadog/core/metrics/options.rb +3 -3
- data/lib/datadog/core/runtime/ext.rb +1 -1
- data/lib/datadog/core/runtime/metrics.rb +7 -7
- data/lib/datadog/core/telemetry/client.rb +79 -0
- data/lib/datadog/core/telemetry/collector.rb +233 -0
- data/lib/datadog/core/telemetry/emitter.rb +48 -0
- data/lib/datadog/core/telemetry/event.rb +71 -0
- data/lib/datadog/core/telemetry/ext.rb +11 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +37 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
- data/lib/datadog/core/telemetry/http/env.rb +20 -0
- data/lib/datadog/core/telemetry/http/ext.rb +20 -0
- data/lib/datadog/core/telemetry/http/response.rb +68 -0
- data/lib/datadog/core/telemetry/http/transport.rb +53 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +52 -0
- data/lib/datadog/core/telemetry/v1/application.rb +86 -0
- data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
- data/lib/datadog/core/telemetry/v1/dependency.rb +36 -0
- data/lib/datadog/core/telemetry/v1/host.rb +51 -0
- data/lib/datadog/core/telemetry/v1/integration.rb +58 -0
- data/lib/datadog/core/telemetry/v1/product.rb +28 -0
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +100 -0
- data/lib/datadog/core/utils/compression.rb +5 -1
- data/lib/datadog/core/utils/object_set.rb +1 -1
- data/lib/datadog/core/utils/sequence.rb +5 -0
- data/lib/datadog/core/utils/string_table.rb +1 -1
- data/lib/datadog/core/utils/time.rb +3 -3
- data/lib/datadog/core/utils.rb +1 -22
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
- data/lib/datadog/core/workers/async.rb +4 -4
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -7
- data/lib/datadog/core.rb +28 -56
- data/lib/datadog/kit/appsec/events.rb +75 -0
- data/lib/datadog/kit/enable_core_dumps.rb +51 -0
- data/lib/datadog/kit/identity.rb +64 -0
- data/lib/datadog/kit.rb +11 -0
- data/lib/datadog/opentelemetry/api/context.rb +187 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +15 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +38 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +27 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +91 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +92 -0
- data/lib/datadog/opentelemetry.rb +48 -0
- data/lib/datadog/opentracer/distributed_headers.rb +7 -9
- data/lib/datadog/opentracer/rack_propagator.rb +10 -9
- data/lib/datadog/opentracer/span.rb +1 -1
- data/lib/datadog/opentracer/text_map_propagator.rb +13 -12
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +26 -3
- data/lib/datadog/opentracer/tracer.rb +23 -23
- data/lib/datadog/opentracer.rb +16 -16
- data/lib/datadog/profiling/buffer.rb +3 -3
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +43 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +91 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +305 -0
- data/lib/datadog/profiling/collectors/stack.rb +4 -288
- data/lib/datadog/profiling/encoding/profile.rb +8 -13
- data/lib/datadog/profiling/events/stack.rb +1 -1
- data/lib/datadog/profiling/exporter.rb +69 -9
- data/lib/datadog/profiling/ext/forking.rb +41 -42
- data/lib/datadog/profiling/ext.rb +4 -16
- data/lib/datadog/profiling/flush.rb +25 -56
- data/lib/datadog/profiling/http_transport.rb +132 -0
- data/lib/datadog/profiling/load_native_extension.rb +22 -0
- data/lib/datadog/profiling/old_recorder.rb +109 -0
- data/lib/datadog/profiling/pprof/builder.rb +4 -4
- data/lib/datadog/profiling/pprof/converter.rb +1 -1
- data/lib/datadog/profiling/pprof/message_set.rb +1 -1
- data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
- data/lib/datadog/profiling/pprof/string_table.rb +1 -1
- data/lib/datadog/profiling/pprof/template.rb +5 -5
- data/lib/datadog/profiling/preload.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +7 -0
- data/lib/datadog/profiling/scheduler.rb +29 -50
- data/lib/datadog/profiling/stack_recorder.rb +79 -0
- data/lib/datadog/profiling/tag_builder.rb +53 -0
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +8 -13
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
- data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
- data/lib/datadog/profiling.rb +49 -44
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +14 -8
- data/lib/datadog/tracing/client_ip.rb +164 -0
- data/lib/datadog/tracing/configuration/ext.rb +47 -4
- data/lib/datadog/tracing/configuration/settings.rb +433 -0
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +18 -2
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +10 -6
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -8
- data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
- data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +4 -2
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/analytics.rb +1 -1
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -4
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/aws/services.rb +0 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +10 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/configurable.rb +2 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +8 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -3
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +7 -4
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +12 -6
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +47 -9
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -3
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -4
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -7
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/extensions.rb +5 -5
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -8
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -6
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -7
- data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -5
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +10 -4
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -5
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -17
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +7 -4
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +27 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +43 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +22 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +39 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -9
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -9
- data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -4
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +18 -3
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -5
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/patcher.rb +16 -4
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +50 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +168 -0
- data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +43 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +47 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -3
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/que/tracer.rb +3 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -3
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -3
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +129 -61
- data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +18 -22
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +3 -18
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +14 -9
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -26
- data/lib/datadog/tracing/contrib/redis/integration.rb +37 -4
- data/lib/datadog/tracing/contrib/redis/patcher.rb +57 -14
- data/lib/datadog/tracing/contrib/redis/quantize.rb +12 -9
- data/lib/datadog/tracing/contrib/redis/tags.rb +12 -10
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +72 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -4
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +9 -3
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +7 -6
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +3 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -5
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +4 -3
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +29 -6
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -25
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -3
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +11 -2
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +7 -8
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -88
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -16
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +4 -3
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -10
- data/lib/datadog/tracing/contrib.rb +50 -47
- data/lib/datadog/tracing/correlation.rb +1 -1
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -6
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +66 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +66 -0
- data/lib/datadog/tracing/distributed/datadog.rb +153 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +85 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +30 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +19 -15
- data/lib/datadog/tracing/distributed/helpers.rb +40 -4
- data/lib/datadog/tracing/distributed/none.rb +19 -0
- data/lib/datadog/tracing/distributed/propagation.rb +127 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +378 -0
- data/lib/datadog/tracing/event.rb +3 -2
- data/lib/datadog/tracing/flush.rb +57 -35
- data/lib/datadog/tracing/metadata/analytics.rb +2 -2
- data/lib/datadog/tracing/metadata/errors.rb +2 -2
- data/lib/datadog/tracing/metadata/ext.rb +28 -1
- data/lib/datadog/tracing/metadata/tagging.rb +23 -2
- data/lib/datadog/tracing/metadata.rb +3 -3
- data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
- data/lib/datadog/tracing/pipeline.rb +3 -3
- data/lib/datadog/tracing/propagation/http.rb +3 -98
- data/lib/datadog/tracing/runtime/metrics.rb +1 -1
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +31 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +64 -12
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -11
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -8
- data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -1
- data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -10
- data/lib/datadog/tracing/sampling/rule.rb +15 -9
- data/lib/datadog/tracing/sampling/rule_sampler.rb +11 -12
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +75 -0
- data/lib/datadog/tracing/span.rb +24 -20
- data/lib/datadog/tracing/span_operation.rb +15 -16
- data/lib/datadog/tracing/sync_writer.rb +5 -5
- data/lib/datadog/tracing/trace_digest.rb +88 -2
- data/lib/datadog/tracing/trace_operation.rb +60 -16
- data/lib/datadog/tracing/trace_segment.rb +13 -8
- data/lib/datadog/tracing/tracer.rb +49 -21
- data/lib/datadog/tracing/utils.rb +50 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
- data/lib/datadog/tracing/workers.rb +3 -3
- data/lib/datadog/tracing/writer.rb +12 -5
- data/lib/datadog/tracing.rb +8 -8
- data/lib/ddtrace/auto_instrument.rb +9 -2
- data/lib/ddtrace/transport/ext.rb +7 -1
- data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
- data/lib/ddtrace/transport/http/api/map.rb +1 -1
- data/lib/ddtrace/transport/http/api.rb +4 -4
- data/lib/ddtrace/transport/http/builder.rb +5 -5
- data/lib/ddtrace/transport/http/client.rb +4 -3
- data/lib/ddtrace/transport/http/response.rb +35 -5
- data/lib/ddtrace/transport/http/statistics.rb +1 -1
- data/lib/ddtrace/transport/http/traces.rb +5 -5
- data/lib/ddtrace/transport/http.rb +12 -9
- data/lib/ddtrace/transport/io/client.rb +5 -3
- data/lib/ddtrace/transport/io/response.rb +1 -1
- data/lib/ddtrace/transport/io/traces.rb +3 -3
- data/lib/ddtrace/transport/io.rb +3 -3
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/trace_formatter.rb +14 -10
- data/lib/ddtrace/transport/traces.rb +8 -6
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace.rb +6 -5
- metadata +160 -44
- data/.editorconfig +0 -22
- data/.gitignore +0 -70
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -59
- data/docs/0.x-trace.png +0 -0
- data/docs/1.0-trace.png +0 -0
- data/docs/AutoInstrumentation.md +0 -36
- data/docs/Deprecation.md +0 -8
- data/docs/DevelopmentGuide.md +0 -259
- data/docs/GettingStarted.md +0 -2671
- data/docs/ProfilingDevelopment.md +0 -110
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
- data/lib/datadog/profiling/recorder.rb +0 -117
- data/lib/datadog/profiling/transport/client.rb +0 -16
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -107
- data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
- data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
- data/lib/datadog/profiling/transport/http/api.rb +0 -45
- data/lib/datadog/profiling/transport/http/builder.rb +0 -30
- data/lib/datadog/profiling/transport/http/client.rb +0 -35
- data/lib/datadog/profiling/transport/http/response.rb +0 -23
- data/lib/datadog/profiling/transport/http.rb +0 -112
- data/lib/datadog/profiling/transport/io/client.rb +0 -29
- data/lib/datadog/profiling/transport/io/response.rb +0 -18
- data/lib/datadog/profiling/transport/io.rb +0 -32
- data/lib/datadog/profiling/transport/parcel.rb +0 -19
- data/lib/datadog/profiling/transport/request.rb +0 -17
- data/lib/datadog/profiling/transport/response.rb +0 -10
- data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
- data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
- data/lib/datadog/tracing/distributed/parser.rb +0 -70
- data/lib/datadog/tracing/propagation/grpc.rb +0 -88
|
@@ -3,71 +3,93 @@
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Tracing
|
|
5
5
|
module Flush
|
|
6
|
-
# Consumes
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
# Consumes and returns a {TraceSegment} to be flushed, from
|
|
7
|
+
# the provided {TraceSegment}.
|
|
8
|
+
#
|
|
9
|
+
# Only finished spans are consumed. Any spans consumed are
|
|
10
|
+
# removed from +trace_op+ as a side effect. Unfinished spans are
|
|
11
|
+
# unaffected.
|
|
12
|
+
#
|
|
13
|
+
# @abstract
|
|
14
|
+
class Base
|
|
15
|
+
# Consumes and returns a {TraceSegment} to be flushed, from
|
|
16
|
+
# the provided {TraceSegment}.
|
|
10
17
|
#
|
|
11
|
-
#
|
|
18
|
+
# Only finished spans are consumed. Any spans consumed are
|
|
19
|
+
# removed from +trace_op+ as a side effect. Unfinished spans are
|
|
20
|
+
# unaffected.
|
|
12
21
|
#
|
|
22
|
+
# @param [TraceOperation] trace_op
|
|
13
23
|
# @return [TraceSegment] trace to be flushed, or +nil+ if the trace is not finished
|
|
14
24
|
def consume!(trace_op)
|
|
15
|
-
return unless
|
|
25
|
+
return unless flush?(trace_op)
|
|
16
26
|
|
|
17
27
|
get_trace(trace_op)
|
|
18
28
|
end
|
|
19
29
|
|
|
20
|
-
|
|
21
|
-
|
|
30
|
+
# Should we consume spans from the +trace_op+?
|
|
31
|
+
# @abstract
|
|
32
|
+
def flush?(trace_op)
|
|
33
|
+
raise NotImplementedError
|
|
22
34
|
end
|
|
23
35
|
|
|
24
36
|
protected
|
|
25
37
|
|
|
38
|
+
# Consumes all finished spans from trace.
|
|
39
|
+
# @return [TraceSegment]
|
|
26
40
|
def get_trace(trace_op)
|
|
27
|
-
trace_op.flush!
|
|
41
|
+
trace_op.flush! do |spans|
|
|
42
|
+
spans.select! { |span| single_sampled?(span) } unless trace_op.sampled?
|
|
43
|
+
|
|
44
|
+
spans
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Single Span Sampling has chosen to keep this span
|
|
49
|
+
# regardless of the trace-level sampling decision
|
|
50
|
+
def single_sampled?(span)
|
|
51
|
+
span.get_metric(Sampling::Span::Ext::TAG_MECHANISM) == Sampling::Ext::Mechanism::SPAN_SAMPLING_RATE
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Consumes and returns completed traces (where all spans have finished),
|
|
56
|
+
# if any, from the provided +trace_op+.
|
|
57
|
+
#
|
|
58
|
+
# Spans consumed are removed from +trace_op+ as a side effect.
|
|
59
|
+
class Finished < Base
|
|
60
|
+
# Are all spans finished?
|
|
61
|
+
def flush?(trace_op)
|
|
62
|
+
trace_op && trace_op.finished?
|
|
28
63
|
end
|
|
29
64
|
end
|
|
30
65
|
|
|
31
|
-
#
|
|
32
|
-
|
|
66
|
+
# Consumes and returns completed or partially completed
|
|
67
|
+
# traces from the provided +trace_op+, if any.
|
|
68
|
+
#
|
|
69
|
+
# Partial trace flushing avoids large traces residing in memory for too long.
|
|
70
|
+
#
|
|
71
|
+
# Partially completed traces, where not all spans have finished,
|
|
72
|
+
# will only be returned if there are at least
|
|
73
|
+
# +@min_spans_for_partial+ finished spans.
|
|
74
|
+
#
|
|
75
|
+
# Spans consumed are removed from +trace_op+ as a side effect.
|
|
76
|
+
class Partial < Base
|
|
33
77
|
# Start flushing partial trace after this many active spans in one trace
|
|
34
78
|
DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH = 500
|
|
35
79
|
|
|
36
80
|
attr_reader :min_spans_for_partial
|
|
37
81
|
|
|
38
82
|
def initialize(options = {})
|
|
83
|
+
super()
|
|
39
84
|
@min_spans_for_partial = options.fetch(:min_spans_before_partial_flush, DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH)
|
|
40
85
|
end
|
|
41
86
|
|
|
42
|
-
|
|
43
|
-
# traces from the provided +trace_op+, if any.
|
|
44
|
-
#
|
|
45
|
-
# Partially completed traces, where not all spans have finished,
|
|
46
|
-
# will only be returned if there are at least
|
|
47
|
-
# +@min_spans_for_partial+ finished spans.
|
|
48
|
-
#
|
|
49
|
-
# Any spans consumed are removed from +trace_op+ as a side effect.
|
|
50
|
-
#
|
|
51
|
-
# @return [TraceSegment] partial or complete trace to be flushed, or +nil+ if no spans are finished
|
|
52
|
-
def consume!(trace_op)
|
|
53
|
-
return unless partial_flush?(trace_op)
|
|
54
|
-
|
|
55
|
-
get_trace(trace_op)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def partial_flush?(trace_op)
|
|
59
|
-
return false unless trace_op.sampled?
|
|
87
|
+
def flush?(trace_op)
|
|
60
88
|
return true if trace_op.finished?
|
|
61
89
|
return false if trace_op.finished_span_count < @min_spans_for_partial
|
|
62
90
|
|
|
63
91
|
true
|
|
64
92
|
end
|
|
65
|
-
|
|
66
|
-
protected
|
|
67
|
-
|
|
68
|
-
def get_trace(trace_op)
|
|
69
|
-
trace_op.flush!
|
|
70
|
-
end
|
|
71
93
|
end
|
|
72
94
|
end
|
|
73
95
|
end
|
|
@@ -20,6 +20,11 @@ module Datadog
|
|
|
20
20
|
# Name of external service that performed the work
|
|
21
21
|
TAG_PEER_SERVICE = 'peer.service'
|
|
22
22
|
|
|
23
|
+
TAG_KIND = 'span.kind'
|
|
24
|
+
|
|
25
|
+
# Set this tag to `1.0` if the span is a Service Entry span.
|
|
26
|
+
TAG_TOP_LEVEL = '_dd.top_level'
|
|
27
|
+
|
|
23
28
|
# Defines constants for trace analytics
|
|
24
29
|
# @public_api
|
|
25
30
|
module Analytics
|
|
@@ -40,14 +45,22 @@ module Datadog
|
|
|
40
45
|
# @public_api
|
|
41
46
|
# Tags related to distributed tracing
|
|
42
47
|
module Distributed
|
|
48
|
+
# What mechanism was used to make this trace's sampling decision.
|
|
49
|
+
# @see Datadog::Tracing::Sampling::Ext::Mechanism
|
|
50
|
+
TAG_DECISION_MAKER = '_dd.p.dm'
|
|
51
|
+
|
|
43
52
|
TAG_ORIGIN = '_dd.origin'
|
|
44
53
|
TAG_SAMPLING_PRIORITY = '_sampling_priority_v1'
|
|
54
|
+
|
|
55
|
+
# Trace tags with this prefix will propagate from a trace through distributed tracing.
|
|
56
|
+
# Distributed headers tags with this prefix will be injected into the active trace.
|
|
57
|
+
TAGS_PREFIX = '_dd.p.'
|
|
45
58
|
end
|
|
46
59
|
|
|
47
60
|
# @public_api
|
|
48
61
|
module Errors
|
|
49
62
|
STATUS = 1
|
|
50
|
-
TAG_MSG = 'error.
|
|
63
|
+
TAG_MSG = 'error.message'
|
|
51
64
|
TAG_STACK = 'error.stack'
|
|
52
65
|
TAG_TYPE = 'error.type'
|
|
53
66
|
end
|
|
@@ -58,11 +71,14 @@ module Datadog
|
|
|
58
71
|
TAG_BASE_URL = 'http.base_url'
|
|
59
72
|
TAG_METHOD = 'http.method'
|
|
60
73
|
TAG_STATUS_CODE = 'http.status_code'
|
|
74
|
+
TAG_USER_AGENT = 'http.useragent'
|
|
61
75
|
TAG_URL = 'http.url'
|
|
62
76
|
TYPE_INBOUND = AppTypes::TYPE_WEB.freeze
|
|
63
77
|
TYPE_OUTBOUND = 'http'
|
|
64
78
|
TYPE_PROXY = 'proxy'
|
|
65
79
|
TYPE_TEMPLATE = 'template'
|
|
80
|
+
TAG_CLIENT_IP = 'http.client_ip'
|
|
81
|
+
HEADER_USER_AGENT = 'User-Agent'
|
|
66
82
|
|
|
67
83
|
# General header functionality
|
|
68
84
|
module Headers
|
|
@@ -123,6 +139,8 @@ module Datadog
|
|
|
123
139
|
TAG_HOSTNAME = '_dd.hostname'
|
|
124
140
|
TAG_TARGET_HOST = 'out.host'
|
|
125
141
|
TAG_TARGET_PORT = 'out.port'
|
|
142
|
+
TAG_DESTINATION_NAME = 'network.destination.name'
|
|
143
|
+
TAG_DESTINATION_PORT = 'network.destination.port'
|
|
126
144
|
end
|
|
127
145
|
|
|
128
146
|
# @public_api
|
|
@@ -145,6 +163,15 @@ module Datadog
|
|
|
145
163
|
TYPE = 'sql'
|
|
146
164
|
TAG_QUERY = 'sql.query'
|
|
147
165
|
end
|
|
166
|
+
|
|
167
|
+
# @public_api
|
|
168
|
+
module SpanKind
|
|
169
|
+
TAG_SERVER = 'server'
|
|
170
|
+
TAG_CLIENT = 'client'
|
|
171
|
+
TAG_PRODUCER = 'producer'
|
|
172
|
+
TAG_CONSUMER = 'consumer'
|
|
173
|
+
TAG_INTERNAL = 'internal'
|
|
174
|
+
end
|
|
148
175
|
end
|
|
149
176
|
end
|
|
150
177
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../../core/environment/ext'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
require_relative 'ext'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Tracing
|
|
@@ -65,11 +65,26 @@ module Datadog
|
|
|
65
65
|
tags.each { |k, v| set_tag(k, v) }
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
# Returns true if the provided `tag` was set to a non-nil value.
|
|
69
|
+
# False otherwise.
|
|
70
|
+
#
|
|
71
|
+
# @param [String] tag the tag or metric to check for presence
|
|
72
|
+
# @return [Boolean] if the tag is present and not nil
|
|
73
|
+
def has_tag?(tag) # rubocop:disable Naming/PredicateName
|
|
74
|
+
!get_tag(tag).nil? # nil is considered not present, thus we can't use `Hash#has_key?`
|
|
75
|
+
end
|
|
76
|
+
|
|
68
77
|
# This method removes a tag for the given key.
|
|
69
78
|
def clear_tag(key)
|
|
70
79
|
meta.delete(key)
|
|
71
80
|
end
|
|
72
81
|
|
|
82
|
+
# Convenient interface for setting a single tag.
|
|
83
|
+
alias []= set_tag
|
|
84
|
+
|
|
85
|
+
# Convenient interface for getting a single tag.
|
|
86
|
+
alias [] get_tag
|
|
87
|
+
|
|
73
88
|
# Return the metric with the given key, nil if it doesn't exist.
|
|
74
89
|
def get_metric(key)
|
|
75
90
|
metrics[key] || meta[key]
|
|
@@ -95,6 +110,12 @@ module Datadog
|
|
|
95
110
|
metrics.delete(key)
|
|
96
111
|
end
|
|
97
112
|
|
|
113
|
+
# Returns a copy of all metadata.
|
|
114
|
+
# Keys for `@meta` and `@metrics` don't collide, by construction.
|
|
115
|
+
def tags
|
|
116
|
+
@meta.merge(@metrics)
|
|
117
|
+
end
|
|
118
|
+
|
|
98
119
|
protected
|
|
99
120
|
|
|
100
121
|
def meta
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'metadata/analytics'
|
|
4
|
+
require_relative 'metadata/tagging'
|
|
5
|
+
require_relative 'metadata/errors'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Tracing
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
3
|
require 'set'
|
|
4
|
-
|
|
4
|
+
require_relative 'span_processor'
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module Tracing
|
|
@@ -15,17 +15,21 @@ module Datadog
|
|
|
15
15
|
#
|
|
16
16
|
# @public_api
|
|
17
17
|
class SpanFilter < SpanProcessor
|
|
18
|
-
# NOTE:
|
|
19
|
-
#
|
|
18
|
+
# NOTE: This SpanFilter implementation only handles traces in which child spans appear
|
|
19
|
+
# before parent spans in the trace array. If in the future child spans can be after
|
|
20
20
|
# parent spans, then the code below will need to be updated.
|
|
21
21
|
# @!visibility private
|
|
22
22
|
def call(trace)
|
|
23
23
|
deleted = Set.new
|
|
24
24
|
|
|
25
|
-
trace.spans.
|
|
25
|
+
span_count = trace.spans.length
|
|
26
|
+
trace.spans.reverse_each.with_index do |span, i|
|
|
26
27
|
should_delete = deleted.include?(span.parent_id) || drop_it?(span)
|
|
27
|
-
|
|
28
|
-
should_delete
|
|
28
|
+
|
|
29
|
+
if should_delete
|
|
30
|
+
deleted << span.id
|
|
31
|
+
trace.spans.delete_at(span_count - 1 - i)
|
|
32
|
+
end
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
trace
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative 'pipeline/span_filter'
|
|
6
|
+
require_relative 'pipeline/span_processor'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Tracing
|
|
@@ -1,109 +1,14 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/configuration/ext'
|
|
6
|
-
require 'datadog/tracing/sampling/ext'
|
|
7
|
-
require 'datadog/tracing/distributed/headers/b3'
|
|
8
|
-
require 'datadog/tracing/distributed/headers/b3_single'
|
|
9
|
-
require 'datadog/tracing/distributed/headers/datadog'
|
|
10
|
-
|
|
11
|
-
require 'datadog/tracing/trace_digest'
|
|
12
|
-
require 'datadog/tracing/trace_operation'
|
|
3
|
+
require_relative '../contrib/http/distributed/propagation'
|
|
13
4
|
|
|
14
5
|
module Datadog
|
|
15
6
|
module Tracing
|
|
16
7
|
module Propagation
|
|
17
8
|
# Propagation::HTTP helps extracting and injecting HTTP headers.
|
|
9
|
+
# DEV-2.0: This file has been moved to Contrib. Should be deleted in the next release.
|
|
18
10
|
# @public_api
|
|
19
|
-
|
|
20
|
-
PROPAGATION_STYLES = {
|
|
21
|
-
Configuration::Ext::Distributed::PROPAGATION_STYLE_B3 => Distributed::Headers::B3,
|
|
22
|
-
Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER => Distributed::Headers::B3Single,
|
|
23
|
-
Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG => Distributed::Headers::Datadog
|
|
24
|
-
}.freeze
|
|
25
|
-
|
|
26
|
-
# inject! popolates the env with span ID, trace ID and sampling priority
|
|
27
|
-
def self.inject!(digest, env)
|
|
28
|
-
# Prevent propagation from being attempted if trace headers provided are nil.
|
|
29
|
-
if digest.nil?
|
|
30
|
-
Datadog.logger.debug(
|
|
31
|
-
'Cannot inject trace headers into env to propagate over HTTP: trace headers are nil.'.freeze
|
|
32
|
-
)
|
|
33
|
-
return
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
digest = digest.to_digest if digest.is_a?(TraceOperation)
|
|
37
|
-
|
|
38
|
-
# Inject all configured propagation styles
|
|
39
|
-
Datadog.configuration.tracing.distributed_tracing.propagation_inject_style.each do |style|
|
|
40
|
-
propagator = PROPAGATION_STYLES[style]
|
|
41
|
-
begin
|
|
42
|
-
propagator.inject!(digest, env) unless propagator.nil?
|
|
43
|
-
rescue => e
|
|
44
|
-
Datadog.logger.error(
|
|
45
|
-
'Error injecting propagated trace headers into the environment. ' \
|
|
46
|
-
"Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
47
|
-
)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# extract returns trace headers containing the span ID, trace ID and
|
|
53
|
-
# sampling priority defined in env.
|
|
54
|
-
def self.extract(env)
|
|
55
|
-
trace_digest = nil
|
|
56
|
-
dd_trace_digest = nil
|
|
57
|
-
|
|
58
|
-
Datadog.configuration.tracing.distributed_tracing.propagation_extract_style.each do |style|
|
|
59
|
-
propagator = PROPAGATION_STYLES[style]
|
|
60
|
-
next if propagator.nil?
|
|
61
|
-
|
|
62
|
-
# Extract trace headers
|
|
63
|
-
# DEV: `propagator.extract` will return `nil`, where `Propagation::HTTP#extract` will not
|
|
64
|
-
begin
|
|
65
|
-
extracted_trace_digest = propagator.extract(env)
|
|
66
|
-
rescue => e
|
|
67
|
-
Datadog.logger.error(
|
|
68
|
-
'Error extracting propagated trace headers from the environment. ' \
|
|
69
|
-
"Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
70
|
-
)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# Skip this style if no valid headers were found
|
|
74
|
-
next if extracted_trace_digest.nil?
|
|
75
|
-
|
|
76
|
-
# Keep track of the Datadog extract trace headers, we want to return
|
|
77
|
-
# this one if we have one
|
|
78
|
-
if extracted_trace_digest && style == Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG
|
|
79
|
-
dd_trace_digest = extracted_trace_digest
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# No previously extracted trace headers, use the one we just extracted
|
|
83
|
-
if trace_digest.nil?
|
|
84
|
-
trace_digest = extracted_trace_digest
|
|
85
|
-
else
|
|
86
|
-
unless trace_digest.trace_id == extracted_trace_digest.trace_id \
|
|
87
|
-
&& trace_digest.span_id == extracted_trace_digest.span_id
|
|
88
|
-
# Return an empty/new trace headers if we have a mismatch in values extracted
|
|
89
|
-
msg = "#{trace_digest.trace_id} != #{extracted_trace_digest.trace_id} && " \
|
|
90
|
-
"#{trace_digest.span_id} != #{extracted_trace_digest.span_id}"
|
|
91
|
-
Datadog.logger.debug(
|
|
92
|
-
"Cannot extract trace headers from HTTP: extracted trace headers differ, #{msg}"
|
|
93
|
-
)
|
|
94
|
-
# DEV: This will return from `self.extract` not this `each` block
|
|
95
|
-
return TraceDigest.new
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Return the extracted trace headers if we found one or else a new empty trace headers
|
|
101
|
-
# Always return the Datadog trace headers if one exists since it has more
|
|
102
|
-
# information than the B3 headers e.g. origin, expanded priority
|
|
103
|
-
# sampling values, etc
|
|
104
|
-
dd_trace_digest || trace_digest || nil
|
|
105
|
-
end
|
|
106
|
-
end
|
|
11
|
+
HTTP = Tracing::Contrib::HTTP::Distributed::Propagation.new
|
|
107
12
|
end
|
|
108
13
|
end
|
|
109
14
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# typed: strict
|
|
2
4
|
|
|
3
5
|
module Datadog
|
|
@@ -21,6 +23,35 @@ module Datadog
|
|
|
21
23
|
# through the {Datadog::Tracing::Sampling::RuleSampler}.
|
|
22
24
|
USER_KEEP = 2
|
|
23
25
|
end
|
|
26
|
+
|
|
27
|
+
# List of what mechanism was used to make the trace-level sampling decision.
|
|
28
|
+
module Mechanism
|
|
29
|
+
# Single Span Sampled.
|
|
30
|
+
SPAN_SAMPLING_RATE = 8
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# List of how the decision was made for the trace-level sampling.
|
|
34
|
+
#
|
|
35
|
+
# These values used to populate the {Datadog::Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER} tag.
|
|
36
|
+
#
|
|
37
|
+
# The decision has two parts, separated by a `-`:
|
|
38
|
+
# `part1-sampling_mechanism`. `part1` is currently not populated, thus
|
|
39
|
+
# this tag is currently formatted as `"-sampling_mechanism"`.
|
|
40
|
+
module Decision
|
|
41
|
+
# Used before the tracer receives any rates from agent and there are no rules configured.
|
|
42
|
+
DEFAULT = '-0'
|
|
43
|
+
# The sampling rate received in the agent's http response.
|
|
44
|
+
AGENT_RATE = '-1'
|
|
45
|
+
# Sampling rule or sampling rate based on tracer config.
|
|
46
|
+
TRACE_SAMPLING_RULE = '-3'
|
|
47
|
+
# User directly sets sampling priority via {Tracing.reject!} or {Tracing.keep!},
|
|
48
|
+
# or by a custom sampler implementation.
|
|
49
|
+
MANUAL = '-4'
|
|
50
|
+
# Formerly AppSec.
|
|
51
|
+
ASM = '-5'
|
|
52
|
+
# Single Span Sampled.
|
|
53
|
+
SPAN_SAMPLING_RATE = '-8'
|
|
54
|
+
end
|
|
24
55
|
end
|
|
25
56
|
end
|
|
26
57
|
end
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require 'datadog/tracing/sampling/rate_sampler'
|
|
8
|
-
require 'datadog/tracing/sampling/rate_by_service_sampler'
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
require_relative 'all_sampler'
|
|
5
|
+
require_relative 'rate_sampler'
|
|
6
|
+
require_relative 'rate_by_service_sampler'
|
|
9
7
|
|
|
10
8
|
module Datadog
|
|
11
9
|
module Tracing
|
|
12
10
|
module Sampling
|
|
13
|
-
# {Datadog
|
|
11
|
+
# {Datadog::Tracing::Sampling::PrioritySampler}
|
|
14
12
|
# @public_api
|
|
15
13
|
class PrioritySampler
|
|
16
|
-
extend Forwardable
|
|
17
|
-
|
|
18
14
|
# NOTE: We do not advise using a pre-sampler. It can save resources,
|
|
19
15
|
# but pre-sampling at rates < 100% may result in partial traces, unless
|
|
20
16
|
# the pre-sampler knows exactly how to drop a span without dropping its ancestors.
|
|
@@ -25,17 +21,26 @@ module Datadog
|
|
|
25
21
|
|
|
26
22
|
def initialize(opts = {})
|
|
27
23
|
@pre_sampler = opts[:base_sampler] || AllSampler.new
|
|
28
|
-
@priority_sampler = opts[:post_sampler] || RateByServiceSampler.new
|
|
24
|
+
@priority_sampler = opts[:post_sampler] || RateByServiceSampler.new(decision: Sampling::Ext::Decision::AGENT_RATE)
|
|
29
25
|
end
|
|
30
26
|
|
|
31
27
|
def sample?(trace)
|
|
32
28
|
@pre_sampler.sample?(trace)
|
|
33
29
|
end
|
|
34
30
|
|
|
31
|
+
# DEV-2.0:We should get rid of this complicated interaction between @pre_sampler and @priority_sampler.
|
|
32
|
+
# DEV-2.0:If the user wants to configure a custom sampler, we should only allow them to provide a complete
|
|
33
|
+
# DEV-2.0:sampling suite, not having this convoluted support for mixing arbitrary provided samplers in
|
|
34
|
+
# DEV-2.0:the PrioritySampler. Ideally, the PrioritySampler is only used by Datadog.
|
|
35
|
+
# DEV-2.0:There are too many edge cases and combinations to work around currently in this class.
|
|
35
36
|
def sample!(trace)
|
|
37
|
+
# The priority that was set before the sampler ran.
|
|
38
|
+
# This comes from distributed tracing priority propagation.
|
|
39
|
+
distributed_sampling_priority = priority_assigned?(trace)
|
|
40
|
+
|
|
36
41
|
# If pre-sampling is configured, do it first. (By default, this will sample at 100%.)
|
|
37
42
|
# NOTE: Pre-sampling at rates < 100% may result in partial traces; not recommended.
|
|
38
|
-
trace.sampled = pre_sample?(trace) ? @pre_sampler.sample!(trace) : true
|
|
43
|
+
trace.sampled = pre_sample?(trace) ? preserving_priority_sampling(trace) { @pre_sampler.sample!(trace) } : true
|
|
39
44
|
|
|
40
45
|
if trace.sampled?
|
|
41
46
|
# If priority sampling has already been applied upstream, use that value.
|
|
@@ -57,9 +62,39 @@ module Datadog
|
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
trace.sampled?
|
|
65
|
+
ensure
|
|
66
|
+
if trace.sampling_priority && trace.sampling_priority > 0
|
|
67
|
+
# Don't modify decision if priority was set upstream.
|
|
68
|
+
if !distributed_sampling_priority && !trace.has_tag?(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
69
|
+
# If no sampling priority being assigned at this point, a custom
|
|
70
|
+
# sampler implementation is configured: this means the user has
|
|
71
|
+
# full control over the sampling decision.
|
|
72
|
+
trace.set_tag(
|
|
73
|
+
Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
74
|
+
Sampling::Ext::Decision::MANUAL
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
# The sampler decided to not keep this span, removing sampling decision.
|
|
79
|
+
trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
80
|
+
end
|
|
60
81
|
end
|
|
61
82
|
|
|
62
|
-
|
|
83
|
+
# (see Datadog::Tracing::Sampling::RateByServiceSampler#update)
|
|
84
|
+
def update(rate_by_service, decision: nil)
|
|
85
|
+
@priority_sampler.update(rate_by_service, decision: decision)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Check if the Priority Sampling decision is to keep or drop the trace.
|
|
89
|
+
# Other factors can influence the sampling decision; this method is only
|
|
90
|
+
# responsible for interpreting the Sampling Priority decision.
|
|
91
|
+
#
|
|
92
|
+
# @param priority_sampling [Integer] priority sampling number
|
|
93
|
+
# @return [Boolean] true if trace is "kept" by priority sampling
|
|
94
|
+
# @return [Boolean] false if trace is "dropped" by priority sampling
|
|
95
|
+
def self.sampled?(priority_sampling)
|
|
96
|
+
priority_sampling >= Ext::Priority::AUTO_KEEP
|
|
97
|
+
end
|
|
63
98
|
|
|
64
99
|
private
|
|
65
100
|
|
|
@@ -84,6 +119,23 @@ module Datadog
|
|
|
84
119
|
end
|
|
85
120
|
end
|
|
86
121
|
|
|
122
|
+
# Ensures the trace's priority sampling decision is not changed by the @pre_sampler.
|
|
123
|
+
# The @pre_sampler should only change `trace.sampled`.
|
|
124
|
+
def preserving_priority_sampling(trace)
|
|
125
|
+
sampling_priority = trace.sampling_priority
|
|
126
|
+
sampling_decision = trace.get_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
127
|
+
|
|
128
|
+
yield.tap do
|
|
129
|
+
trace.sampling_priority = sampling_priority
|
|
130
|
+
|
|
131
|
+
if sampling_decision
|
|
132
|
+
trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, sampling_decision)
|
|
133
|
+
else
|
|
134
|
+
trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
87
139
|
# Ensures the trace is always propagated to the writer and that
|
|
88
140
|
# the sample rate metric represents the true client-side sampling.
|
|
89
141
|
def preserving_sampling(trace)
|