ddtrace 1.0.0 → 1.10.1
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 +529 -2
- data/LICENSE-3rdparty.csv +7 -2
- data/README.md +10 -5
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +134 -0
- data/ext/ddtrace_profiling_loader/extconf.rb +72 -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_worker.c +821 -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 +379 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +20 -0
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +978 -0
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +14 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +147 -116
- data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +347 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +25 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +319 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +706 -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 +591 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +14 -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 +1722 -636
- data/lib/datadog/appsec/assets/waf_rules/strict.json +366 -74
- data/lib/datadog/appsec/assets.rb +2 -4
- data/lib/datadog/appsec/autoload.rb +5 -10
- data/lib/datadog/appsec/component.rb +41 -0
- data/lib/datadog/appsec/configuration/settings.rb +61 -20
- data/lib/datadog/appsec/configuration.rb +20 -4
- data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -4
- data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -3
- data/lib/datadog/appsec/contrib/integration.rb +0 -2
- data/lib/datadog/appsec/contrib/patcher.rb +0 -2
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/rack/ext.rb +0 -2
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +97 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +137 -87
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -6
- data/lib/datadog/appsec/contrib/rack/patcher.rb +4 -5
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +31 -38
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +63 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +21 -22
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +43 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +117 -21
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +0 -2
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +86 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -7
- data/lib/datadog/appsec/contrib/rails/patcher.rb +44 -10
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +69 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +34 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +0 -2
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +1 -2
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +0 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +131 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -6
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +94 -12
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +64 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +0 -2
- data/lib/datadog/appsec/event.rb +33 -26
- data/lib/datadog/appsec/ext.rb +9 -0
- data/lib/datadog/appsec/extensions.rb +51 -26
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
- data/lib/datadog/appsec/instrumentation.rb +9 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +86 -0
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +61 -0
- data/lib/datadog/appsec/monitor.rb +11 -0
- data/lib/datadog/appsec/processor.rb +143 -21
- data/lib/datadog/appsec/rate_limiter.rb +5 -2
- data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
- data/lib/datadog/appsec/reactive/engine.rb +12 -9
- data/lib/datadog/appsec/reactive/operation.rb +22 -6
- data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
- data/lib/datadog/appsec/response.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
- data/lib/datadog/appsec/utils/http.rb +9 -0
- data/lib/datadog/appsec/utils.rb +7 -0
- data/lib/datadog/appsec.rb +25 -7
- data/lib/datadog/ci/configuration/components.rb +1 -3
- data/lib/datadog/ci/configuration/settings.rb +1 -3
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -4
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -2
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -7
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -3
- data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -6
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -4
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -4
- data/lib/datadog/ci/contrib/rspec/example.rb +5 -7
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -2
- data/lib/datadog/ci/contrib/rspec/integration.rb +4 -6
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -4
- data/lib/datadog/ci/ext/app_types.rb +0 -2
- data/lib/datadog/ci/ext/environment.rb +98 -48
- data/lib/datadog/ci/ext/settings.rb +0 -2
- data/lib/datadog/ci/ext/test.rb +0 -2
- data/lib/datadog/ci/extensions.rb +4 -6
- data/lib/datadog/ci/flush.rb +2 -4
- data/lib/datadog/ci/test.rb +3 -5
- data/lib/datadog/ci.rb +6 -8
- data/lib/datadog/core/buffer/cruby.rb +1 -3
- data/lib/datadog/core/buffer/random.rb +0 -2
- data/lib/datadog/core/buffer/thread_safe.rb +1 -3
- data/lib/datadog/core/chunker.rb +0 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +9 -29
- data/lib/datadog/core/configuration/base.rb +14 -4
- data/lib/datadog/core/configuration/components.rb +31 -266
- data/lib/datadog/core/configuration/dependency_resolver.rb +0 -2
- data/lib/datadog/core/configuration/ext.rb +24 -0
- data/lib/datadog/core/configuration/option.rb +0 -2
- data/lib/datadog/core/configuration/option_definition.rb +12 -5
- data/lib/datadog/core/configuration/option_definition_set.rb +1 -3
- data/lib/datadog/core/configuration/option_set.rb +0 -2
- data/lib/datadog/core/configuration/options.rb +3 -5
- data/lib/datadog/core/configuration/settings.rb +92 -255
- data/lib/datadog/core/configuration.rb +16 -15
- data/lib/datadog/core/diagnostics/environment_logger.rb +10 -7
- data/lib/datadog/core/diagnostics/health.rb +4 -24
- data/lib/datadog/core/encoding.rb +0 -4
- data/lib/datadog/core/environment/cgroup.rb +4 -6
- data/lib/datadog/core/environment/class_count.rb +0 -2
- data/lib/datadog/core/environment/container.rb +3 -6
- data/lib/datadog/core/environment/ext.rb +1 -3
- data/lib/datadog/core/environment/gc.rb +0 -2
- data/lib/datadog/core/environment/identity.rb +2 -4
- data/lib/datadog/core/environment/platform.rb +38 -0
- data/lib/datadog/core/environment/socket.rb +1 -3
- data/lib/datadog/core/environment/thread_count.rb +0 -2
- data/lib/datadog/core/environment/variable_helpers.rb +83 -13
- data/lib/datadog/core/environment/vm_cache.rb +17 -2
- data/lib/datadog/core/error.rb +1 -3
- data/lib/datadog/core/extensions.rb +1 -3
- data/lib/datadog/core/git/ext.rb +0 -2
- data/lib/datadog/core/header_collection.rb +41 -0
- data/lib/datadog/core/logger.rb +0 -2
- data/lib/datadog/core/logging/ext.rb +11 -0
- data/lib/datadog/core/metrics/client.rb +25 -16
- data/lib/datadog/core/metrics/ext.rb +0 -4
- data/lib/datadog/core/metrics/helpers.rb +0 -2
- data/lib/datadog/core/metrics/logging.rb +0 -2
- data/lib/datadog/core/metrics/metric.rb +0 -2
- data/lib/datadog/core/metrics/options.rb +3 -5
- data/lib/datadog/core/pin.rb +0 -2
- data/lib/datadog/core/runtime/ext.rb +3 -3
- data/lib/datadog/core/runtime/metrics.rb +28 -14
- data/lib/datadog/core/telemetry/client.rb +77 -0
- data/lib/datadog/core/telemetry/collector.rb +231 -0
- data/lib/datadog/core/telemetry/emitter.rb +46 -0
- data/lib/datadog/core/telemetry/event.rb +67 -0
- data/lib/datadog/core/telemetry/ext.rb +9 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +35 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +111 -0
- data/lib/datadog/core/telemetry/http/env.rb +18 -0
- data/lib/datadog/core/telemetry/http/ext.rb +20 -0
- data/lib/datadog/core/telemetry/http/response.rb +64 -0
- data/lib/datadog/core/telemetry/http/transport.rb +51 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +50 -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 -3
- data/lib/datadog/core/utils/forking.rb +0 -2
- data/lib/datadog/core/utils/network.rb +140 -0
- data/lib/datadog/core/utils/object_set.rb +1 -3
- data/lib/datadog/core/utils/only_once.rb +0 -2
- data/lib/datadog/core/utils/safe_dup.rb +0 -2
- data/lib/datadog/core/utils/sequence.rb +5 -2
- data/lib/datadog/core/utils/string_table.rb +1 -3
- data/lib/datadog/core/utils/time.rb +3 -7
- data/lib/datadog/core/utils.rb +1 -24
- data/lib/datadog/core/vendor/ipaddr.rb +78 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -4
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -5
- data/lib/datadog/core/worker.rb +0 -2
- data/lib/datadog/core/workers/async.rb +4 -6
- data/lib/datadog/core/workers/interval_loop.rb +0 -2
- data/lib/datadog/core/workers/polling.rb +2 -4
- data/lib/datadog/core/workers/queue.rb +0 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -9
- data/lib/datadog/core.rb +27 -56
- data/lib/datadog/kit/appsec/events.rb +74 -0
- data/lib/datadog/kit/enable_core_dumps.rb +50 -0
- data/lib/datadog/kit/identity.rb +70 -0
- data/lib/datadog/kit.rb +9 -0
- data/lib/datadog/opentelemetry/api/context.rb +186 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +90 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +91 -0
- data/lib/datadog/opentelemetry.rb +47 -0
- data/lib/datadog/opentracer/binary_propagator.rb +0 -2
- data/lib/datadog/opentracer/carrier.rb +0 -2
- data/lib/datadog/opentracer/distributed_headers.rb +7 -11
- data/lib/datadog/opentracer/global_tracer.rb +0 -2
- data/lib/datadog/opentracer/propagator.rb +0 -2
- data/lib/datadog/opentracer/rack_propagator.rb +10 -11
- data/lib/datadog/opentracer/scope.rb +0 -2
- data/lib/datadog/opentracer/scope_manager.rb +0 -2
- data/lib/datadog/opentracer/span.rb +1 -3
- data/lib/datadog/opentracer/span_context.rb +0 -2
- data/lib/datadog/opentracer/span_context_factory.rb +0 -2
- data/lib/datadog/opentracer/text_map_propagator.rb +13 -14
- data/lib/datadog/opentracer/thread_local_scope.rb +0 -2
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +24 -3
- data/lib/datadog/opentracer/tracer.rb +23 -25
- data/lib/datadog/opentracer.rb +16 -18
- data/lib/datadog/profiling/backtrace_location.rb +0 -2
- data/lib/datadog/profiling/buffer.rb +3 -5
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -2
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +96 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +12 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +66 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +301 -0
- data/lib/datadog/profiling/collectors/stack.rb +3 -289
- data/lib/datadog/profiling/collectors/thread_context.rb +46 -0
- data/lib/datadog/profiling/component.rb +161 -0
- data/lib/datadog/profiling/encoding/profile.rb +8 -15
- data/lib/datadog/profiling/event.rb +0 -2
- data/lib/datadog/profiling/events/stack.rb +1 -3
- data/lib/datadog/profiling/exporter.rb +69 -11
- data/lib/datadog/profiling/ext/forking.rb +41 -44
- data/lib/datadog/profiling/ext.rb +4 -18
- data/lib/datadog/profiling/flush.rb +25 -58
- data/lib/datadog/profiling/http_transport.rb +130 -0
- data/lib/datadog/profiling/load_native_extension.rb +20 -0
- data/lib/datadog/profiling/native_extension.rb +0 -2
- data/lib/datadog/profiling/old_recorder.rb +107 -0
- data/lib/datadog/profiling/pprof/builder.rb +4 -6
- data/lib/datadog/profiling/pprof/converter.rb +1 -3
- data/lib/datadog/profiling/pprof/message_set.rb +1 -3
- data/lib/datadog/profiling/pprof/payload.rb +0 -2
- data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -2
- data/lib/datadog/profiling/pprof/stack_sample.rb +4 -6
- data/lib/datadog/profiling/pprof/string_table.rb +1 -3
- data/lib/datadog/profiling/pprof/template.rb +5 -7
- data/lib/datadog/profiling/preload.rb +1 -3
- data/lib/datadog/profiling/profiler.rb +7 -2
- data/lib/datadog/profiling/scheduler.rb +29 -52
- data/lib/datadog/profiling/stack_recorder.rb +74 -0
- data/lib/datadog/profiling/tag_builder.rb +51 -0
- data/lib/datadog/profiling/tasks/exec.rb +2 -4
- data/lib/datadog/profiling/tasks/help.rb +0 -2
- data/lib/datadog/profiling/tasks/setup.rb +8 -15
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -4
- data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -3
- data/lib/datadog/profiling.rb +92 -50
- data/lib/datadog/tracing/analytics.rb +1 -3
- data/lib/datadog/tracing/buffer.rb +14 -12
- data/lib/datadog/tracing/client_ip.rb +61 -0
- data/lib/datadog/tracing/component.rb +176 -0
- data/lib/datadog/tracing/configuration/ext.rb +49 -6
- data/lib/datadog/tracing/configuration/settings.rb +451 -0
- data/lib/datadog/tracing/context.rb +1 -3
- data/lib/datadog/tracing/context_provider.rb +18 -4
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -7
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -5
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -6
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -4
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +10 -8
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -3
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -7
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -7
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -10
- data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -5
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -8
- data/lib/datadog/tracing/contrib/active_job/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -4
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -7
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +4 -6
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -3
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -6
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -8
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -8
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/utils.rb +3 -5
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -11
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -7
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +4 -4
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/analytics.rb +1 -3
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -6
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -6
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +0 -2
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -7
- data/lib/datadog/tracing/contrib/aws/services.rb +0 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +10 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/configurable.rb +2 -4
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -3
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -6
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +10 -7
- data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -3
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -5
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +11 -6
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +12 -8
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +48 -11
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -5
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -9
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -6
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -7
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -9
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/extensions.rb +5 -7
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/faraday/connection.rb +0 -2
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -10
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -8
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -9
- data/lib/datadog/tracing/contrib/grape/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -7
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/graphql/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -6
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -7
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -19
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +7 -6
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/grpc/integration.rb +11 -6
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +0 -2
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -9
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +45 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +20 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +21 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +39 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +42 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -4
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -12
- data/lib/datadog/tracing/contrib/http/integration.rb +6 -8
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +0 -2
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -11
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -11
- data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/event.rb +4 -5
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -4
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -4
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -11
- data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/lograge/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -4
- data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -2
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -5
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -3
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -6
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -4
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -7
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/patchable.rb +0 -2
- data/lib/datadog/tracing/contrib/patcher.rb +16 -6
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +48 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +166 -0
- data/lib/datadog/tracing/contrib/pg/integration.rb +41 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/presto/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +26 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +45 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/qless/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/qless/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -6
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +5 -5
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -4
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/que/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/que/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -4
- data/lib/datadog/tracing/contrib/que/tracer.rb +5 -3
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -7
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -5
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -4
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -5
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/rack/ext.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +170 -78
- data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -4
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -3
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/framework.rb +18 -24
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +3 -20
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -4
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -10
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
- data/lib/datadog/tracing/contrib/rails/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +16 -3
- data/lib/datadog/tracing/contrib/rake/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +14 -11
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -7
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -3
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -28
- data/lib/datadog/tracing/contrib/redis/integration.rb +37 -6
- data/lib/datadog/tracing/contrib/redis/patcher.rb +56 -15
- data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
- data/lib/datadog/tracing/contrib/redis/tags.rb +12 -12
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +70 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/registerable.rb +0 -2
- data/lib/datadog/tracing/contrib/registry.rb +0 -2
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/resque/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/resque/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +7 -6
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +9 -5
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -6
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +7 -8
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +2 -4
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -7
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -7
- data/lib/datadog/tracing/contrib/sequel/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -4
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -3
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +11 -7
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +4 -5
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -2
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -9
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +23 -3
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +7 -8
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +55 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +31 -8
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -4
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -27
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +11 -4
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -3
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +6 -10
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -90
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -18
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +7 -5
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -4
- 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 +28 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -6
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -9
- data/lib/datadog/tracing/contrib/utils/database.rb +0 -2
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
- data/lib/datadog/tracing/contrib.rb +50 -49
- data/lib/datadog/tracing/correlation.rb +16 -4
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -8
- data/lib/datadog/tracing/diagnostics/health.rb +38 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
- data/lib/datadog/tracing/distributed/datadog.rb +200 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
- data/lib/datadog/tracing/distributed/helpers.rb +34 -13
- data/lib/datadog/tracing/distributed/none.rb +18 -0
- data/lib/datadog/tracing/distributed/propagation.rb +126 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +373 -0
- data/lib/datadog/tracing/event.rb +3 -4
- data/lib/datadog/tracing/flush.rb +57 -37
- data/lib/datadog/tracing/metadata/analytics.rb +2 -4
- data/lib/datadog/tracing/metadata/errors.rb +2 -4
- data/lib/datadog/tracing/metadata/ext.rb +34 -3
- data/lib/datadog/tracing/metadata/tagging.rb +23 -4
- data/lib/datadog/tracing/metadata.rb +3 -5
- data/lib/datadog/tracing/pipeline/span_filter.rb +10 -8
- data/lib/datadog/tracing/pipeline/span_processor.rb +0 -2
- data/lib/datadog/tracing/pipeline.rb +3 -5
- data/lib/datadog/tracing/propagation/http.rb +3 -100
- data/lib/datadog/tracing/runtime/metrics.rb +1 -3
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -3
- data/lib/datadog/tracing/sampling/ext.rb +30 -1
- data/lib/datadog/tracing/sampling/matcher.rb +0 -2
- data/lib/datadog/tracing/sampling/priority_sampler.rb +64 -14
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -13
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -10
- data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -3
- data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -12
- data/lib/datadog/tracing/sampling/rule.rb +15 -11
- data/lib/datadog/tracing/sampling/rule_sampler.rb +11 -14
- data/lib/datadog/tracing/sampling/sampler.rb +0 -2
- 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 -22
- data/lib/datadog/tracing/span_operation.rb +15 -18
- data/lib/datadog/tracing/sync_writer.rb +5 -7
- data/lib/datadog/tracing/trace_digest.rb +88 -4
- data/lib/datadog/tracing/trace_operation.rb +60 -18
- data/lib/datadog/tracing/trace_segment.rb +20 -10
- data/lib/datadog/tracing/tracer.rb +49 -23
- data/lib/datadog/tracing/utils.rb +81 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +9 -11
- data/lib/datadog/tracing/workers.rb +3 -5
- data/lib/datadog/tracing/writer.rb +12 -7
- data/lib/datadog/tracing.rb +8 -10
- data/lib/ddtrace/auto_instrument.rb +9 -4
- data/lib/ddtrace/auto_instrument_base.rb +0 -2
- data/lib/ddtrace/profiling/preload.rb +0 -2
- data/lib/ddtrace/transport/ext.rb +7 -3
- data/lib/ddtrace/transport/http/adapters/net.rb +3 -4
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -3
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/api/endpoint.rb +0 -2
- data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -2
- data/lib/ddtrace/transport/http/api/instance.rb +0 -2
- data/lib/ddtrace/transport/http/api/map.rb +1 -3
- data/lib/ddtrace/transport/http/api/spec.rb +0 -2
- data/lib/ddtrace/transport/http/api.rb +4 -6
- data/lib/ddtrace/transport/http/builder.rb +5 -7
- data/lib/ddtrace/transport/http/client.rb +4 -5
- data/lib/ddtrace/transport/http/env.rb +0 -2
- data/lib/ddtrace/transport/http/response.rb +35 -7
- data/lib/ddtrace/transport/http/statistics.rb +1 -3
- data/lib/ddtrace/transport/http/traces.rb +6 -8
- data/lib/ddtrace/transport/http.rb +11 -12
- data/lib/ddtrace/transport/io/client.rb +5 -5
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +3 -7
- data/lib/ddtrace/transport/io.rb +3 -5
- data/lib/ddtrace/transport/parcel.rb +0 -4
- data/lib/ddtrace/transport/request.rb +0 -2
- data/lib/ddtrace/transport/response.rb +0 -2
- data/lib/ddtrace/transport/serializable_trace.rb +9 -5
- data/lib/ddtrace/transport/statistics.rb +2 -4
- data/lib/ddtrace/transport/trace_formatter.rb +21 -12
- data/lib/ddtrace/transport/traces.rb +9 -9
- data/lib/ddtrace/version.rb +2 -4
- data/lib/ddtrace.rb +6 -9
- metadata +176 -47
- 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/appsec/assets/waf_rules/risky.json +0 -1499
- data/lib/datadog/appsec/contrib/rack/request.rb +0 -52
- data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
- 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
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# typed: true
|
|
4
|
-
|
|
5
3
|
module Datadog
|
|
6
4
|
module Tracing
|
|
7
5
|
module Metadata
|
|
@@ -20,6 +18,11 @@ module Datadog
|
|
|
20
18
|
# Name of external service that performed the work
|
|
21
19
|
TAG_PEER_SERVICE = 'peer.service'
|
|
22
20
|
|
|
21
|
+
TAG_KIND = 'span.kind'
|
|
22
|
+
|
|
23
|
+
# Set this tag to `1.0` if the span is a Service Entry span.
|
|
24
|
+
TAG_TOP_LEVEL = '_dd.top_level'
|
|
25
|
+
|
|
23
26
|
# Defines constants for trace analytics
|
|
24
27
|
# @public_api
|
|
25
28
|
module Analytics
|
|
@@ -40,14 +43,27 @@ module Datadog
|
|
|
40
43
|
# @public_api
|
|
41
44
|
# Tags related to distributed tracing
|
|
42
45
|
module Distributed
|
|
46
|
+
# What mechanism was used to make this trace's sampling decision.
|
|
47
|
+
# @see Datadog::Tracing::Sampling::Ext::Mechanism
|
|
48
|
+
TAG_DECISION_MAKER = '_dd.p.dm'
|
|
49
|
+
|
|
43
50
|
TAG_ORIGIN = '_dd.origin'
|
|
44
51
|
TAG_SAMPLING_PRIORITY = '_sampling_priority_v1'
|
|
52
|
+
|
|
53
|
+
# Trace tags with this prefix will propagate from a trace through distributed tracing.
|
|
54
|
+
# Distributed headers tags with this prefix will be injected into the active trace.
|
|
55
|
+
TAGS_PREFIX = '_dd.p.'
|
|
56
|
+
|
|
57
|
+
# The distributed tag to carry hex encoded high order 64 bits of 127 bits trace id during
|
|
58
|
+
# the context restricted with 64 bits. Such as, Datadog propagation and messagepack encoding
|
|
59
|
+
TID = 'tid'
|
|
60
|
+
TAG_TID = TAGS_PREFIX + TID
|
|
45
61
|
end
|
|
46
62
|
|
|
47
63
|
# @public_api
|
|
48
64
|
module Errors
|
|
49
65
|
STATUS = 1
|
|
50
|
-
TAG_MSG = 'error.
|
|
66
|
+
TAG_MSG = 'error.message'
|
|
51
67
|
TAG_STACK = 'error.stack'
|
|
52
68
|
TAG_TYPE = 'error.type'
|
|
53
69
|
end
|
|
@@ -58,11 +74,14 @@ module Datadog
|
|
|
58
74
|
TAG_BASE_URL = 'http.base_url'
|
|
59
75
|
TAG_METHOD = 'http.method'
|
|
60
76
|
TAG_STATUS_CODE = 'http.status_code'
|
|
77
|
+
TAG_USER_AGENT = 'http.useragent'
|
|
61
78
|
TAG_URL = 'http.url'
|
|
62
79
|
TYPE_INBOUND = AppTypes::TYPE_WEB.freeze
|
|
63
80
|
TYPE_OUTBOUND = 'http'
|
|
64
81
|
TYPE_PROXY = 'proxy'
|
|
65
82
|
TYPE_TEMPLATE = 'template'
|
|
83
|
+
TAG_CLIENT_IP = 'http.client_ip'
|
|
84
|
+
HEADER_USER_AGENT = 'User-Agent'
|
|
66
85
|
|
|
67
86
|
# General header functionality
|
|
68
87
|
module Headers
|
|
@@ -123,6 +142,8 @@ module Datadog
|
|
|
123
142
|
TAG_HOSTNAME = '_dd.hostname'
|
|
124
143
|
TAG_TARGET_HOST = 'out.host'
|
|
125
144
|
TAG_TARGET_PORT = 'out.port'
|
|
145
|
+
TAG_DESTINATION_NAME = 'network.destination.name'
|
|
146
|
+
TAG_DESTINATION_PORT = 'network.destination.port'
|
|
126
147
|
end
|
|
127
148
|
|
|
128
149
|
# @public_api
|
|
@@ -145,6 +166,16 @@ module Datadog
|
|
|
145
166
|
TYPE = 'sql'
|
|
146
167
|
TAG_QUERY = 'sql.query'
|
|
147
168
|
end
|
|
169
|
+
|
|
170
|
+
# @public_api
|
|
171
|
+
module SpanKind
|
|
172
|
+
TAG_PROXY = 'proxy'
|
|
173
|
+
TAG_SERVER = 'server'
|
|
174
|
+
TAG_CLIENT = 'client'
|
|
175
|
+
TAG_PRODUCER = 'producer'
|
|
176
|
+
TAG_CONSUMER = 'consumer'
|
|
177
|
+
TAG_INTERNAL = 'internal'
|
|
178
|
+
end
|
|
148
179
|
end
|
|
149
180
|
end
|
|
150
181
|
end
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../../core/environment/ext'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/metadata/ext'
|
|
3
|
+
require_relative 'ext'
|
|
6
4
|
|
|
7
5
|
module Datadog
|
|
8
6
|
module Tracing
|
|
@@ -65,11 +63,26 @@ module Datadog
|
|
|
65
63
|
tags.each { |k, v| set_tag(k, v) }
|
|
66
64
|
end
|
|
67
65
|
|
|
66
|
+
# Returns true if the provided `tag` was set to a non-nil value.
|
|
67
|
+
# False otherwise.
|
|
68
|
+
#
|
|
69
|
+
# @param [String] tag the tag or metric to check for presence
|
|
70
|
+
# @return [Boolean] if the tag is present and not nil
|
|
71
|
+
def has_tag?(tag) # rubocop:disable Naming/PredicateName
|
|
72
|
+
!get_tag(tag).nil? # nil is considered not present, thus we can't use `Hash#has_key?`
|
|
73
|
+
end
|
|
74
|
+
|
|
68
75
|
# This method removes a tag for the given key.
|
|
69
76
|
def clear_tag(key)
|
|
70
77
|
meta.delete(key)
|
|
71
78
|
end
|
|
72
79
|
|
|
80
|
+
# Convenient interface for setting a single tag.
|
|
81
|
+
alias []= set_tag
|
|
82
|
+
|
|
83
|
+
# Convenient interface for getting a single tag.
|
|
84
|
+
alias [] get_tag
|
|
85
|
+
|
|
73
86
|
# Return the metric with the given key, nil if it doesn't exist.
|
|
74
87
|
def get_metric(key)
|
|
75
88
|
metrics[key] || meta[key]
|
|
@@ -95,6 +108,12 @@ module Datadog
|
|
|
95
108
|
metrics.delete(key)
|
|
96
109
|
end
|
|
97
110
|
|
|
111
|
+
# Returns a copy of all metadata.
|
|
112
|
+
# Keys for `@meta` and `@metrics` don't collide, by construction.
|
|
113
|
+
def tags
|
|
114
|
+
@meta.merge(@metrics)
|
|
115
|
+
end
|
|
116
|
+
|
|
98
117
|
protected
|
|
99
118
|
|
|
100
119
|
def meta
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'datadog/tracing/metadata/tagging'
|
|
5
|
-
require 'datadog/tracing/metadata/errors'
|
|
1
|
+
require_relative 'metadata/analytics'
|
|
2
|
+
require_relative 'metadata/tagging'
|
|
3
|
+
require_relative 'metadata/errors'
|
|
6
4
|
|
|
7
5
|
module Datadog
|
|
8
6
|
module Tracing
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
1
|
require 'set'
|
|
4
|
-
|
|
2
|
+
require_relative 'span_processor'
|
|
5
3
|
|
|
6
4
|
module Datadog
|
|
7
5
|
module Tracing
|
|
@@ -15,17 +13,21 @@ module Datadog
|
|
|
15
13
|
#
|
|
16
14
|
# @public_api
|
|
17
15
|
class SpanFilter < SpanProcessor
|
|
18
|
-
# NOTE:
|
|
19
|
-
#
|
|
16
|
+
# NOTE: This SpanFilter implementation only handles traces in which child spans appear
|
|
17
|
+
# before parent spans in the trace array. If in the future child spans can be after
|
|
20
18
|
# parent spans, then the code below will need to be updated.
|
|
21
19
|
# @!visibility private
|
|
22
20
|
def call(trace)
|
|
23
21
|
deleted = Set.new
|
|
24
22
|
|
|
25
|
-
trace.spans.
|
|
23
|
+
span_count = trace.spans.length
|
|
24
|
+
trace.spans.reverse_each.with_index do |span, i|
|
|
26
25
|
should_delete = deleted.include?(span.parent_id) || drop_it?(span)
|
|
27
|
-
|
|
28
|
-
should_delete
|
|
26
|
+
|
|
27
|
+
if should_delete
|
|
28
|
+
deleted << span.id
|
|
29
|
+
trace.spans.delete_at(span_count - 1 - i)
|
|
30
|
+
end
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
trace
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/pipeline/span_filter'
|
|
6
|
-
require 'datadog/tracing/pipeline/span_processor'
|
|
3
|
+
require_relative 'pipeline/span_filter'
|
|
4
|
+
require_relative 'pipeline/span_processor'
|
|
7
5
|
|
|
8
6
|
module Datadog
|
|
9
7
|
module Tracing
|
|
@@ -1,109 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'datadog/core'
|
|
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'
|
|
1
|
+
require_relative '../contrib/http/distributed/propagation'
|
|
13
2
|
|
|
14
3
|
module Datadog
|
|
15
4
|
module Tracing
|
|
16
5
|
module Propagation
|
|
17
6
|
# Propagation::HTTP helps extracting and injecting HTTP headers.
|
|
7
|
+
# DEV-2.0: This file has been moved to Contrib. Should be deleted in the next release.
|
|
18
8
|
# @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
|
|
9
|
+
HTTP = Tracing::Contrib::HTTP::Distributed::Propagation.new
|
|
107
10
|
end
|
|
108
11
|
end
|
|
109
12
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Tracing
|
|
@@ -21,6 +21,35 @@ module Datadog
|
|
|
21
21
|
# through the {Datadog::Tracing::Sampling::RuleSampler}.
|
|
22
22
|
USER_KEEP = 2
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
# List of what mechanism was used to make the trace-level sampling decision.
|
|
26
|
+
module Mechanism
|
|
27
|
+
# Single Span Sampled.
|
|
28
|
+
SPAN_SAMPLING_RATE = 8
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# List of how the decision was made for the trace-level sampling.
|
|
32
|
+
#
|
|
33
|
+
# These values used to populate the {Datadog::Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER} tag.
|
|
34
|
+
#
|
|
35
|
+
# The decision has two parts, separated by a `-`:
|
|
36
|
+
# `part1-sampling_mechanism`. `part1` is currently not populated, thus
|
|
37
|
+
# this tag is currently formatted as `"-sampling_mechanism"`.
|
|
38
|
+
module Decision
|
|
39
|
+
# Used before the tracer receives any rates from agent and there are no rules configured.
|
|
40
|
+
DEFAULT = '-0'
|
|
41
|
+
# The sampling rate received in the agent's http response.
|
|
42
|
+
AGENT_RATE = '-1'
|
|
43
|
+
# Sampling rule or sampling rate based on tracer config.
|
|
44
|
+
TRACE_SAMPLING_RULE = '-3'
|
|
45
|
+
# User directly sets sampling priority via {Tracing.reject!} or {Tracing.keep!},
|
|
46
|
+
# or by a custom sampler implementation.
|
|
47
|
+
MANUAL = '-4'
|
|
48
|
+
# Formerly AppSec.
|
|
49
|
+
ASM = '-5'
|
|
50
|
+
# Single Span Sampled.
|
|
51
|
+
SPAN_SAMPLING_RATE = '-8'
|
|
52
|
+
end
|
|
24
53
|
end
|
|
25
54
|
end
|
|
26
55
|
end
|
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/sampling/ext'
|
|
6
|
-
require 'datadog/tracing/sampling/all_sampler'
|
|
7
|
-
require 'datadog/tracing/sampling/rate_sampler'
|
|
8
|
-
require 'datadog/tracing/sampling/rate_by_service_sampler'
|
|
1
|
+
require_relative 'ext'
|
|
2
|
+
require_relative 'all_sampler'
|
|
3
|
+
require_relative 'rate_sampler'
|
|
4
|
+
require_relative 'rate_by_service_sampler'
|
|
9
5
|
|
|
10
6
|
module Datadog
|
|
11
7
|
module Tracing
|
|
12
8
|
module Sampling
|
|
13
|
-
# {Datadog
|
|
9
|
+
# {Datadog::Tracing::Sampling::PrioritySampler}
|
|
14
10
|
# @public_api
|
|
15
11
|
class PrioritySampler
|
|
16
|
-
extend Forwardable
|
|
17
|
-
|
|
18
12
|
# NOTE: We do not advise using a pre-sampler. It can save resources,
|
|
19
13
|
# but pre-sampling at rates < 100% may result in partial traces, unless
|
|
20
14
|
# the pre-sampler knows exactly how to drop a span without dropping its ancestors.
|
|
@@ -25,17 +19,26 @@ module Datadog
|
|
|
25
19
|
|
|
26
20
|
def initialize(opts = {})
|
|
27
21
|
@pre_sampler = opts[:base_sampler] || AllSampler.new
|
|
28
|
-
@priority_sampler = opts[:post_sampler] || RateByServiceSampler.new
|
|
22
|
+
@priority_sampler = opts[:post_sampler] || RateByServiceSampler.new(decision: Sampling::Ext::Decision::AGENT_RATE)
|
|
29
23
|
end
|
|
30
24
|
|
|
31
25
|
def sample?(trace)
|
|
32
26
|
@pre_sampler.sample?(trace)
|
|
33
27
|
end
|
|
34
28
|
|
|
29
|
+
# DEV-2.0:We should get rid of this complicated interaction between @pre_sampler and @priority_sampler.
|
|
30
|
+
# DEV-2.0:If the user wants to configure a custom sampler, we should only allow them to provide a complete
|
|
31
|
+
# DEV-2.0:sampling suite, not having this convoluted support for mixing arbitrary provided samplers in
|
|
32
|
+
# DEV-2.0:the PrioritySampler. Ideally, the PrioritySampler is only used by Datadog.
|
|
33
|
+
# DEV-2.0:There are too many edge cases and combinations to work around currently in this class.
|
|
35
34
|
def sample!(trace)
|
|
35
|
+
# The priority that was set before the sampler ran.
|
|
36
|
+
# This comes from distributed tracing priority propagation.
|
|
37
|
+
distributed_sampling_priority = priority_assigned?(trace)
|
|
38
|
+
|
|
36
39
|
# If pre-sampling is configured, do it first. (By default, this will sample at 100%.)
|
|
37
40
|
# NOTE: Pre-sampling at rates < 100% may result in partial traces; not recommended.
|
|
38
|
-
trace.sampled = pre_sample?(trace) ? @pre_sampler.sample!(trace) : true
|
|
41
|
+
trace.sampled = pre_sample?(trace) ? preserving_priority_sampling(trace) { @pre_sampler.sample!(trace) } : true
|
|
39
42
|
|
|
40
43
|
if trace.sampled?
|
|
41
44
|
# If priority sampling has already been applied upstream, use that value.
|
|
@@ -57,9 +60,39 @@ module Datadog
|
|
|
57
60
|
end
|
|
58
61
|
|
|
59
62
|
trace.sampled?
|
|
63
|
+
ensure
|
|
64
|
+
if trace.sampling_priority && trace.sampling_priority > 0
|
|
65
|
+
# Don't modify decision if priority was set upstream.
|
|
66
|
+
if !distributed_sampling_priority && !trace.has_tag?(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
67
|
+
# If no sampling priority being assigned at this point, a custom
|
|
68
|
+
# sampler implementation is configured: this means the user has
|
|
69
|
+
# full control over the sampling decision.
|
|
70
|
+
trace.set_tag(
|
|
71
|
+
Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
72
|
+
Sampling::Ext::Decision::MANUAL
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
else
|
|
76
|
+
# The sampler decided to not keep this span, removing sampling decision.
|
|
77
|
+
trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# (see Datadog::Tracing::Sampling::RateByServiceSampler#update)
|
|
82
|
+
def update(rate_by_service, decision: nil)
|
|
83
|
+
@priority_sampler.update(rate_by_service, decision: decision)
|
|
60
84
|
end
|
|
61
85
|
|
|
62
|
-
|
|
86
|
+
# Check if the Priority Sampling decision is to keep or drop the trace.
|
|
87
|
+
# Other factors can influence the sampling decision; this method is only
|
|
88
|
+
# responsible for interpreting the Sampling Priority decision.
|
|
89
|
+
#
|
|
90
|
+
# @param priority_sampling [Integer] priority sampling number
|
|
91
|
+
# @return [Boolean] true if trace is "kept" by priority sampling
|
|
92
|
+
# @return [Boolean] false if trace is "dropped" by priority sampling
|
|
93
|
+
def self.sampled?(priority_sampling)
|
|
94
|
+
priority_sampling >= Ext::Priority::AUTO_KEEP
|
|
95
|
+
end
|
|
63
96
|
|
|
64
97
|
private
|
|
65
98
|
|
|
@@ -84,6 +117,23 @@ module Datadog
|
|
|
84
117
|
end
|
|
85
118
|
end
|
|
86
119
|
|
|
120
|
+
# Ensures the trace's priority sampling decision is not changed by the @pre_sampler.
|
|
121
|
+
# The @pre_sampler should only change `trace.sampled`.
|
|
122
|
+
def preserving_priority_sampling(trace)
|
|
123
|
+
sampling_priority = trace.sampling_priority
|
|
124
|
+
sampling_decision = trace.get_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
125
|
+
|
|
126
|
+
yield.tap do
|
|
127
|
+
trace.sampling_priority = sampling_priority
|
|
128
|
+
|
|
129
|
+
if sampling_decision
|
|
130
|
+
trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, sampling_decision)
|
|
131
|
+
else
|
|
132
|
+
trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
87
137
|
# Ensures the trace is always propagated to the writer and that
|
|
88
138
|
# the sample rate metric represents the true client-side sampling.
|
|
89
139
|
def preserving_sampling(trace)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'datadog/tracing/sampling/sampler'
|
|
4
|
-
require 'datadog/tracing/sampling/rate_sampler'
|
|
1
|
+
require_relative 'sampler'
|
|
2
|
+
require_relative 'rate_sampler'
|
|
5
3
|
|
|
6
4
|
module Datadog
|
|
7
5
|
module Tracing
|
|
@@ -12,7 +10,7 @@ module Datadog
|
|
|
12
10
|
attr_reader \
|
|
13
11
|
:default_key
|
|
14
12
|
|
|
15
|
-
def initialize(default_key, default_rate = 1.0, &block)
|
|
13
|
+
def initialize(default_key, default_rate = 1.0, decision: nil, &block)
|
|
16
14
|
super()
|
|
17
15
|
|
|
18
16
|
raise ArgumentError, 'No resolver given!' unless block
|
|
@@ -22,7 +20,7 @@ module Datadog
|
|
|
22
20
|
@mutex = Mutex.new
|
|
23
21
|
@samplers = {}
|
|
24
22
|
|
|
25
|
-
set_rate(default_key, default_rate)
|
|
23
|
+
set_rate(default_key, default_rate, decision)
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
def resolve(trace)
|
|
@@ -57,15 +55,15 @@ module Datadog
|
|
|
57
55
|
end
|
|
58
56
|
end
|
|
59
57
|
|
|
60
|
-
def update(key, rate)
|
|
58
|
+
def update(key, rate, decision: nil)
|
|
61
59
|
@mutex.synchronize do
|
|
62
|
-
set_rate(key, rate)
|
|
60
|
+
set_rate(key, rate, decision)
|
|
63
61
|
end
|
|
64
62
|
end
|
|
65
63
|
|
|
66
|
-
def update_all(rate_by_key)
|
|
64
|
+
def update_all(rate_by_key, decision: nil)
|
|
67
65
|
@mutex.synchronize do
|
|
68
|
-
rate_by_key.each { |key, rate| set_rate(key, rate) }
|
|
66
|
+
rate_by_key.each { |key, rate| set_rate(key, rate, decision) }
|
|
69
67
|
end
|
|
70
68
|
end
|
|
71
69
|
|
|
@@ -87,9 +85,8 @@ module Datadog
|
|
|
87
85
|
|
|
88
86
|
private
|
|
89
87
|
|
|
90
|
-
def set_rate(key, rate)
|
|
91
|
-
@samplers[key]
|
|
92
|
-
@samplers[key].sample_rate = rate
|
|
88
|
+
def set_rate(key, rate, decision)
|
|
89
|
+
@samplers[key] = RateSampler.new(rate, decision: decision)
|
|
93
90
|
end
|
|
94
91
|
end
|
|
95
92
|
end
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'datadog/core'
|
|
4
|
-
require 'datadog/tracing/sampling/rate_by_key_sampler'
|
|
1
|
+
require_relative '../../core'
|
|
2
|
+
require_relative 'rate_by_key_sampler'
|
|
5
3
|
|
|
6
4
|
module Datadog
|
|
7
5
|
module Tracing
|
|
8
6
|
module Sampling
|
|
9
|
-
# {Datadog
|
|
7
|
+
# {Datadog::Tracing::Sampling::RateByServiceSampler} samples different services at different rates
|
|
10
8
|
# @public_api
|
|
11
9
|
class RateByServiceSampler < RateByKeySampler
|
|
12
10
|
DEFAULT_KEY = 'service:,env:'.freeze
|
|
13
11
|
|
|
14
|
-
def initialize(default_rate = 1.0,
|
|
15
|
-
super(
|
|
16
|
-
|
|
12
|
+
def initialize(default_rate = 1.0, env: nil, decision: Datadog::Tracing::Sampling::Ext::Decision::DEFAULT)
|
|
13
|
+
super(
|
|
14
|
+
DEFAULT_KEY,
|
|
15
|
+
default_rate,
|
|
16
|
+
decision: decision,
|
|
17
|
+
&method(:key_for)
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
@env = env
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
def update(rate_by_service)
|
|
23
|
+
def update(rate_by_service, decision: nil)
|
|
20
24
|
# Remove any old services
|
|
21
25
|
delete_if { |key, _| key != DEFAULT_KEY && !rate_by_service.key?(key) }
|
|
22
26
|
|
|
23
27
|
# Update each service rate
|
|
24
|
-
update_all(rate_by_service)
|
|
28
|
+
update_all(rate_by_service, decision: decision)
|
|
25
29
|
|
|
26
30
|
# Emit metric for service cache size
|
|
27
31
|
Datadog.health_metrics.sampling_service_cache_length(length)
|
|
@@ -29,6 +33,24 @@ module Datadog
|
|
|
29
33
|
|
|
30
34
|
private
|
|
31
35
|
|
|
36
|
+
# DEV: Creating a string on every trace to perform a single Hash lookup is expensive.
|
|
37
|
+
#
|
|
38
|
+
# Using 2 nested hashes: 1 for env and 1 for service is the fastest option.
|
|
39
|
+
# This approach requires large API changes to `RateByKeySampler`.
|
|
40
|
+
#
|
|
41
|
+
# Reducing the interpolated string size, by using a 1 character separator,
|
|
42
|
+
# is also measurably faster than the current method. This approach does not
|
|
43
|
+
# require changes to `RateByKeySampler`.
|
|
44
|
+
#
|
|
45
|
+
# Keep in mind that these changes also require changes to `#update`.
|
|
46
|
+
#
|
|
47
|
+
# Comparison:
|
|
48
|
+
# 2 nested hashes: `service_hash.fetch(service, {}).fetch(env, default_rate)`
|
|
49
|
+
# 7730045 i/s
|
|
50
|
+
# 1 char separator: `hash.fetch("#{service}\0#{env}", default_rate)`
|
|
51
|
+
# 4302801 i/s - 1.80x slower
|
|
52
|
+
# current: `hash.fetch("service:#{service},env:#{env}", default_rate)`
|
|
53
|
+
# 2720459 i/s - 2.84x slower
|
|
32
54
|
def key_for(trace)
|
|
33
55
|
# Resolve env dynamically, if Proc is given.
|
|
34
56
|
env = @env.is_a?(Proc) ? @env.call : @env
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'datadog/core/utils/time'
|
|
1
|
+
require_relative '../../core/utils/time'
|
|
4
2
|
|
|
5
3
|
module Datadog
|
|
6
4
|
module Tracing
|
|
@@ -39,6 +37,9 @@ module Datadog
|
|
|
39
37
|
def initialize(rate, max_tokens = rate)
|
|
40
38
|
super()
|
|
41
39
|
|
|
40
|
+
raise ArgumentError, "rate must be a number: #{rate}" unless rate.is_a?(Numeric)
|
|
41
|
+
raise ArgumentError, "max_tokens must be a number: #{max_tokens}" unless max_tokens.is_a?(Numeric)
|
|
42
|
+
|
|
42
43
|
@rate = rate
|
|
43
44
|
@max_tokens = max_tokens
|
|
44
45
|
|