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,26 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../../core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/sampling/sampler'
|
|
6
|
-
require 'datadog/tracing/span'
|
|
3
|
+
require_relative 'sampler'
|
|
4
|
+
require_relative '../utils'
|
|
7
5
|
|
|
8
6
|
module Datadog
|
|
9
7
|
module Tracing
|
|
10
8
|
module Sampling
|
|
11
|
-
# {Datadog
|
|
9
|
+
# {Datadog::Tracing::Sampling::RateSampler} is based on a sample rate.
|
|
12
10
|
# @public_api
|
|
13
11
|
class RateSampler < Sampler
|
|
14
12
|
KNUTH_FACTOR = 1111111111111111111
|
|
15
13
|
|
|
16
|
-
# Initialize a {Datadog
|
|
14
|
+
# Initialize a {Datadog::Tracing::Sampling::RateSampler}.
|
|
17
15
|
# This sampler keeps a random subset of the traces. Its main purpose is to
|
|
18
16
|
# reduce the instrumentation footprint.
|
|
19
17
|
#
|
|
20
18
|
# * +sample_rate+: the sample rate as a {Float} between 0.0 and 1.0. 0.0
|
|
21
19
|
# means that no trace will be sampled; 1.0 means that all traces will be
|
|
22
20
|
# sampled.
|
|
23
|
-
|
|
21
|
+
#
|
|
22
|
+
# DEV-2.0: Allow for `sample_rate` zero (drop all) to be allowed. This eases
|
|
23
|
+
# DEV-2.0: usage for all internal users of the {RateSampler} class: both
|
|
24
|
+
# DEV-2.0: RuleSampler and Single Span Sampling leverage the RateSampler, but want
|
|
25
|
+
# DEV-2.0: `sample_rate` zero to mean "drop all". They work around this by hard-
|
|
26
|
+
# DEV-2.0: setting the `sample_rate` to zero like so:
|
|
27
|
+
# DEV-2.0: ```
|
|
28
|
+
# DEV-2.0: sampler = RateSampler.new
|
|
29
|
+
# DEV-2.0: sampler.sample_rate = sample_rate
|
|
30
|
+
# DEV-2.0: ```
|
|
31
|
+
def initialize(sample_rate = 1.0, decision: nil)
|
|
24
32
|
super()
|
|
25
33
|
|
|
26
34
|
unless sample_rate > 0.0 && sample_rate <= 1.0
|
|
@@ -29,6 +37,8 @@ module Datadog
|
|
|
29
37
|
end
|
|
30
38
|
|
|
31
39
|
self.sample_rate = sample_rate
|
|
40
|
+
|
|
41
|
+
@decision = decision
|
|
32
42
|
end
|
|
33
43
|
|
|
34
44
|
def sample_rate(*_)
|
|
@@ -37,17 +47,22 @@ module Datadog
|
|
|
37
47
|
|
|
38
48
|
def sample_rate=(sample_rate)
|
|
39
49
|
@sample_rate = sample_rate
|
|
40
|
-
@sampling_id_threshold = sample_rate *
|
|
50
|
+
@sampling_id_threshold = sample_rate * Tracing::Utils::EXTERNAL_MAX_ID
|
|
41
51
|
end
|
|
42
52
|
|
|
43
53
|
def sample?(trace)
|
|
44
|
-
((trace.id * KNUTH_FACTOR) %
|
|
54
|
+
((trace.id * KNUTH_FACTOR) % Tracing::Utils::EXTERNAL_MAX_ID) <= @sampling_id_threshold
|
|
45
55
|
end
|
|
46
56
|
|
|
47
57
|
def sample!(trace)
|
|
48
58
|
sampled = trace.sampled = sample?(trace)
|
|
49
|
-
|
|
50
|
-
sampled
|
|
59
|
+
|
|
60
|
+
return false unless sampled
|
|
61
|
+
|
|
62
|
+
trace.sample_rate = @sample_rate
|
|
63
|
+
trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, @decision) if @decision
|
|
64
|
+
|
|
65
|
+
true
|
|
51
66
|
end
|
|
52
67
|
end
|
|
53
68
|
end
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../../core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/core'
|
|
6
|
-
|
|
7
|
-
require 'datadog/tracing/sampling/matcher'
|
|
8
|
-
require 'datadog/tracing/sampling/rate_sampler'
|
|
3
|
+
require_relative 'matcher'
|
|
4
|
+
require_relative 'rate_sampler'
|
|
9
5
|
|
|
10
6
|
module Datadog
|
|
11
7
|
module Tracing
|
|
@@ -15,8 +11,6 @@ module Datadog
|
|
|
15
11
|
# apply in case of a positive match.
|
|
16
12
|
# @public_api
|
|
17
13
|
class Rule
|
|
18
|
-
extend Forwardable
|
|
19
|
-
|
|
20
14
|
attr_reader :matcher, :sampler
|
|
21
15
|
|
|
22
16
|
# @param [Matcher] matcher A matcher to verify trace conformity against
|
|
@@ -34,11 +28,21 @@ module Datadog
|
|
|
34
28
|
def match?(trace)
|
|
35
29
|
@matcher.match?(trace)
|
|
36
30
|
rescue => e
|
|
37
|
-
Datadog.logger.error(
|
|
31
|
+
Datadog.logger.error(
|
|
32
|
+
"Matcher failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
33
|
+
)
|
|
38
34
|
nil
|
|
39
35
|
end
|
|
40
36
|
|
|
41
|
-
|
|
37
|
+
# (see Datadog::Tracing::Sampling::Sampler#sample?)
|
|
38
|
+
def sample?(trace)
|
|
39
|
+
@sampler.sample?(trace)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# (see Datadog::Tracing::Sampling::Sampler#sample_rate)
|
|
43
|
+
def sample_rate(trace)
|
|
44
|
+
@sampler.sample_rate(trace)
|
|
45
|
+
end
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
# A {Datadog::Tracing::Sampling::Rule} that matches a trace based on
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../../core'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require 'datadog/tracing/sampling/ext'
|
|
8
|
-
require 'datadog/tracing/sampling/rate_limiter'
|
|
9
|
-
require 'datadog/tracing/sampling/rule'
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
require_relative 'rate_limiter'
|
|
5
|
+
require_relative 'rule'
|
|
10
6
|
|
|
11
7
|
module Datadog
|
|
12
8
|
module Tracing
|
|
@@ -18,8 +14,6 @@ module Datadog
|
|
|
18
14
|
# sampling strategy is applied.
|
|
19
15
|
# @public_api
|
|
20
16
|
class RuleSampler
|
|
21
|
-
extend Forwardable
|
|
22
|
-
|
|
23
17
|
attr_reader :rules, :rate_limiter, :default_sampler
|
|
24
18
|
|
|
25
19
|
# @param rules [Array<Rule>] ordered list of rules to be applied to a trace
|
|
@@ -52,7 +46,7 @@ module Datadog
|
|
|
52
46
|
nil
|
|
53
47
|
else
|
|
54
48
|
# TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
|
|
55
|
-
RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags[
|
|
49
|
+
RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
|
|
56
50
|
end
|
|
57
51
|
end
|
|
58
52
|
|
|
@@ -80,10 +74,10 @@ module Datadog
|
|
|
80
74
|
end
|
|
81
75
|
|
|
82
76
|
# @!visibility private
|
|
83
|
-
def update(*args)
|
|
77
|
+
def update(*args, **kwargs)
|
|
84
78
|
return false unless @default_sampler.respond_to?(:update)
|
|
85
79
|
|
|
86
|
-
@default_sampler.update(*args)
|
|
80
|
+
@default_sampler.update(*args, **kwargs)
|
|
87
81
|
end
|
|
88
82
|
|
|
89
83
|
private
|
|
@@ -104,9 +98,12 @@ module Datadog
|
|
|
104
98
|
rate_limiter.allow?(1).tap do |allowed|
|
|
105
99
|
set_priority(trace, allowed)
|
|
106
100
|
set_limiter_metrics(trace, rate_limiter.effective_rate)
|
|
101
|
+
trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Ext::Decision::TRACE_SAMPLING_RULE)
|
|
107
102
|
end
|
|
108
103
|
rescue StandardError => e
|
|
109
|
-
Datadog.logger.error(
|
|
104
|
+
Datadog.logger.error(
|
|
105
|
+
"Rule sampling failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
106
|
+
)
|
|
110
107
|
yield(trace)
|
|
111
108
|
end
|
|
112
109
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Sampling
|
|
6
|
+
module Span
|
|
7
|
+
# Single Span Sampling constants.
|
|
8
|
+
module Ext
|
|
9
|
+
# Accept all spans (100% retention).
|
|
10
|
+
DEFAULT_SAMPLE_RATE = 1.0
|
|
11
|
+
# Unlimited.
|
|
12
|
+
# @see Datadog::Tracing::Sampling::TokenBucket
|
|
13
|
+
DEFAULT_MAX_PER_SECOND = -1
|
|
14
|
+
|
|
15
|
+
# Sampling decision method used to come to the sampling decision for this span
|
|
16
|
+
TAG_MECHANISM = '_dd.span_sampling.mechanism'
|
|
17
|
+
# Sampling rate applied to this span, if a rule applies
|
|
18
|
+
TAG_RULE_RATE = '_dd.span_sampling.rule_rate'
|
|
19
|
+
# Rate limit configured for this span, if a rule applies
|
|
20
|
+
TAG_MAX_PER_SECOND = '_dd.span_sampling.max_per_second'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Sampling
|
|
6
|
+
module Span
|
|
7
|
+
# Checks if a span conforms to a matching criteria.
|
|
8
|
+
class Matcher
|
|
9
|
+
attr_reader :name, :service
|
|
10
|
+
|
|
11
|
+
# Pattern that matches any string
|
|
12
|
+
MATCH_ALL_PATTERN = '*'
|
|
13
|
+
|
|
14
|
+
# Matches span name and service to their respective patterns provided.
|
|
15
|
+
#
|
|
16
|
+
# The patterns are {String}s with two special characters available:
|
|
17
|
+
# 1. `?`: matches exactly one of any character.
|
|
18
|
+
# 2. `*`: matches a substring of any size, including zero.
|
|
19
|
+
# These patterns can occur any point of the string, any number of times.
|
|
20
|
+
#
|
|
21
|
+
# Both {SpanOperation#name} and {SpanOperation#service} must match the provided patterns.
|
|
22
|
+
#
|
|
23
|
+
# The whole String has to match the provided patterns: providing a pattern that
|
|
24
|
+
# matches a portion of the provided String is not considered a match.
|
|
25
|
+
#
|
|
26
|
+
# @example web-*
|
|
27
|
+
# `'web-*'` will match any string starting with `web-`.
|
|
28
|
+
# @example cache-?
|
|
29
|
+
# `'cache-?'` will match any string starting with `database-` followed by exactly one character.
|
|
30
|
+
#
|
|
31
|
+
# @param name_pattern [String] a pattern to be matched against {SpanOperation#name}
|
|
32
|
+
# @param service_pattern [String] a pattern to be matched against {SpanOperation#service}
|
|
33
|
+
def initialize(name_pattern: MATCH_ALL_PATTERN, service_pattern: MATCH_ALL_PATTERN)
|
|
34
|
+
@name = pattern_to_regex(name_pattern)
|
|
35
|
+
@service = pattern_to_regex(service_pattern)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# {Regexp#match?} was added in Ruby 2.4, and it's measurably
|
|
39
|
+
# the least costly way to get a boolean result for a Regexp match.
|
|
40
|
+
# @see https://www.ruby-lang.org/en/news/2016/12/25/ruby-2-4-0-released/
|
|
41
|
+
if Regexp.method_defined?(:match?)
|
|
42
|
+
# Returns `true` if the span conforms to the configured patterns,
|
|
43
|
+
# `false` otherwise
|
|
44
|
+
#
|
|
45
|
+
# @param [SpanOperation] span
|
|
46
|
+
# @return [Boolean]
|
|
47
|
+
def match?(span)
|
|
48
|
+
# Matching is performed at the end of the lifecycle of a Span,
|
|
49
|
+
# thus both `name` and `service` are guaranteed to be not `nil`.
|
|
50
|
+
@name.match?(span.name) && @service.match?(span.service)
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
# DEV: Remove when support for Ruby 2.3 and older is removed.
|
|
54
|
+
def match?(span)
|
|
55
|
+
@name === span.name && @service === span.service
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def ==(other)
|
|
60
|
+
return super unless other.is_a?(Matcher)
|
|
61
|
+
|
|
62
|
+
name == other.name &&
|
|
63
|
+
service == other.service
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
# @param pattern [String]
|
|
69
|
+
# @return [Regexp]
|
|
70
|
+
def pattern_to_regex(pattern)
|
|
71
|
+
# Ensure no undesired characters are treated as regex.
|
|
72
|
+
# Our valid special characters, `?` and `*`,
|
|
73
|
+
# will be escaped so...
|
|
74
|
+
pattern = Regexp.quote(pattern)
|
|
75
|
+
|
|
76
|
+
# ...we account for that here:
|
|
77
|
+
pattern.gsub!('\?', '.') # Any single character
|
|
78
|
+
pattern.gsub!('\*', '.*') # Any substring
|
|
79
|
+
|
|
80
|
+
# Patterns have to match the whole input string
|
|
81
|
+
pattern = "\\A#{pattern}\\z"
|
|
82
|
+
|
|
83
|
+
Regexp.new(pattern)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Sampling
|
|
8
|
+
module Span
|
|
9
|
+
# Span sampling rule that applies a sampling rate if the span
|
|
10
|
+
# matches the provided {Matcher}.
|
|
11
|
+
# Additionally, a rate limiter is also applied.
|
|
12
|
+
#
|
|
13
|
+
# If a span does not conform to the matcher, no changes are made.
|
|
14
|
+
class Rule
|
|
15
|
+
attr_reader :matcher, :sample_rate, :rate_limit
|
|
16
|
+
|
|
17
|
+
# Creates a new span sampling rule.
|
|
18
|
+
#
|
|
19
|
+
# @param [Sampling::Span::Matcher] matcher whether this rule applies to a specific span
|
|
20
|
+
# @param [Float] sample_rate span sampling ratio, between 0.0 (0%) and 1.0 (100%).
|
|
21
|
+
# @param [Numeric] rate_limit maximum number of spans sampled per second. Negative numbers mean unlimited spans.
|
|
22
|
+
def initialize(
|
|
23
|
+
matcher,
|
|
24
|
+
sample_rate: Span::Ext::DEFAULT_SAMPLE_RATE,
|
|
25
|
+
rate_limit: Span::Ext::DEFAULT_MAX_PER_SECOND
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@matcher = matcher
|
|
29
|
+
@sample_rate = sample_rate
|
|
30
|
+
@rate_limit = rate_limit
|
|
31
|
+
|
|
32
|
+
@sampler = Sampling::RateSampler.new
|
|
33
|
+
# Set the sample_rate outside of the initializer to allow for
|
|
34
|
+
# zero to be a "drop all".
|
|
35
|
+
# The RateSampler initializer enforces non-zero, falling back to 100% sampling
|
|
36
|
+
# if zero is provided.
|
|
37
|
+
@sampler.sample_rate = sample_rate
|
|
38
|
+
@rate_limiter = Sampling::TokenBucket.new(rate_limit)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# This method should only be invoked for spans that are part
|
|
42
|
+
# of a trace that has been dropped by trace-level sampling.
|
|
43
|
+
# Invoking it for other spans will cause incorrect sampling
|
|
44
|
+
# metrics to be reported by the Datadog App.
|
|
45
|
+
#
|
|
46
|
+
# Returns `true` if the provided span is sampled.
|
|
47
|
+
# If the span is dropped due to sampling rate or rate limiting,
|
|
48
|
+
# it returns `false`.
|
|
49
|
+
#
|
|
50
|
+
# Returns `nil` if the span did not meet the matching criteria by the
|
|
51
|
+
# provided matcher.
|
|
52
|
+
#
|
|
53
|
+
# This method modifies the `span` if it matches the provided matcher.
|
|
54
|
+
#
|
|
55
|
+
# @param [Datadog::Tracing::SpanOperation] span_op span to be sampled
|
|
56
|
+
# @return [:kept,:rejected] should this span be sampled?
|
|
57
|
+
# @return [:not_matched] span did not satisfy the matcher, no changes are made to the span
|
|
58
|
+
def sample!(span_op)
|
|
59
|
+
return :not_matched unless @matcher.match?(span_op)
|
|
60
|
+
|
|
61
|
+
if @sampler.sample?(span_op) && @rate_limiter.allow?(1)
|
|
62
|
+
span_op.set_metric(Span::Ext::TAG_MECHANISM, Sampling::Ext::Mechanism::SPAN_SAMPLING_RATE)
|
|
63
|
+
span_op.set_metric(Span::Ext::TAG_RULE_RATE, @sample_rate)
|
|
64
|
+
span_op.set_metric(Span::Ext::TAG_MAX_PER_SECOND, @rate_limit)
|
|
65
|
+
:kept
|
|
66
|
+
else
|
|
67
|
+
:rejected
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
return super unless other.is_a?(Rule)
|
|
73
|
+
|
|
74
|
+
matcher == other.matcher &&
|
|
75
|
+
sample_rate == other.sample_rate &&
|
|
76
|
+
rate_limit == other.rate_limit
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
require_relative 'ext'
|
|
6
|
+
require_relative 'matcher'
|
|
7
|
+
require_relative 'rule'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Tracing
|
|
11
|
+
module Sampling
|
|
12
|
+
module Span
|
|
13
|
+
# Converts user configuration into {Datadog::Tracing::Sampling::Span::Rule} objects,
|
|
14
|
+
# handling any parsing errors.
|
|
15
|
+
module RuleParser
|
|
16
|
+
class << self
|
|
17
|
+
# Parses the provided JSON string containing the Single Span
|
|
18
|
+
# Sampling configuration list.
|
|
19
|
+
# In case of parsing errors, `nil` is returned.
|
|
20
|
+
#
|
|
21
|
+
# @param rules [String] the JSON configuration rules to be parsed
|
|
22
|
+
# @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
|
|
23
|
+
# @return [nil] if parsing failed
|
|
24
|
+
def parse_json(rules)
|
|
25
|
+
return nil unless rules
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
list = JSON.parse(rules)
|
|
29
|
+
rescue => e
|
|
30
|
+
Datadog.logger.warn(
|
|
31
|
+
"Error parsing Span Sampling Rules `#{rules.inspect}`: "\
|
|
32
|
+
"#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
|
33
|
+
)
|
|
34
|
+
return nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
parse_list(list)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Parses a list of Hashes containing the parsed JSON information
|
|
41
|
+
# for Single Span Sampling configuration.
|
|
42
|
+
# In case of parsing errors, `nil` is returned.
|
|
43
|
+
#
|
|
44
|
+
# @param rules [Array<String] the JSON configuration rules to be parsed
|
|
45
|
+
# @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
|
|
46
|
+
# @return [nil] if parsing failed
|
|
47
|
+
def parse_list(rules)
|
|
48
|
+
unless rules.is_a?(Array)
|
|
49
|
+
Datadog.logger.warn("Span Sampling Rules are not an array: #{rules.inspect}")
|
|
50
|
+
return nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
parsed = rules.map do |hash|
|
|
54
|
+
unless hash.is_a?(Hash)
|
|
55
|
+
Datadog.logger.warn("Span Sampling Rule is not a key-value object: #{hash.inspect}")
|
|
56
|
+
return nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
begin
|
|
60
|
+
parse_rule(hash)
|
|
61
|
+
rescue => e
|
|
62
|
+
Datadog.logger.warn(
|
|
63
|
+
"Cannot parse Span Sampling Rule #{hash.inspect}: " \
|
|
64
|
+
"#{e.class.name} #{e} at #{Array(e.backtrace).first}"
|
|
65
|
+
)
|
|
66
|
+
return nil
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
parsed.compact!
|
|
71
|
+
parsed
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def parse_rule(hash)
|
|
77
|
+
matcher_options = {}
|
|
78
|
+
if (name_pattern = hash['name'])
|
|
79
|
+
matcher_options[:name_pattern] = name_pattern
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if (service_pattern = hash['service'])
|
|
83
|
+
matcher_options[:service_pattern] = service_pattern
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
matcher = Matcher.new(**matcher_options)
|
|
87
|
+
|
|
88
|
+
rule_options = {}
|
|
89
|
+
if (sample_rate = hash['sample_rate'])
|
|
90
|
+
rule_options[:sample_rate] = sample_rate
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if (max_per_second = hash['max_per_second'])
|
|
94
|
+
rule_options[:rate_limit] = max_per_second
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
Rule.new(matcher, **rule_options)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Tracing
|
|
3
|
+
module Sampling
|
|
4
|
+
module Span
|
|
5
|
+
# Applies Single Span Sampling rules to spans.
|
|
6
|
+
# When matching the configured rules, a span is ensured to
|
|
7
|
+
# be processed Datadog App. In other words, a single sampled span
|
|
8
|
+
# will never be dropped by the tracer or Datadog agent.
|
|
9
|
+
#
|
|
10
|
+
# All spans in a trace are subject to the single sampling rules, if
|
|
11
|
+
# any rules are configured.
|
|
12
|
+
#
|
|
13
|
+
# Single Span Sampling is distinct from trace-level sampling:
|
|
14
|
+
# Single Span Sampling can ensure a span is kept, even if its
|
|
15
|
+
# enclosing trace is rejected by trace-level sampling.
|
|
16
|
+
#
|
|
17
|
+
# This class only applies operations to spans that are part
|
|
18
|
+
# of traces that was rejected by trace sampling.
|
|
19
|
+
# A trace is rejected if either of the following conditions is true:
|
|
20
|
+
# * The priority sampling for a trace is set to either {USER_REJECT} or {AUTO_REJECT}.
|
|
21
|
+
# * The trace was rejected by internal sampling, thus never flushed.
|
|
22
|
+
#
|
|
23
|
+
# Single-sampled spans are tagged and the tracer ensures they will
|
|
24
|
+
# reach the Datadog App, regardless of their enclosing trace sampling decision.
|
|
25
|
+
#
|
|
26
|
+
# Single Span Sampling does not inspect spans that are part of a trace
|
|
27
|
+
# that has been accepted by trace-level sampling rules: all spans from such
|
|
28
|
+
# trace are guaranteed to reach the Datadog App.
|
|
29
|
+
class Sampler
|
|
30
|
+
attr_reader :rules
|
|
31
|
+
|
|
32
|
+
# Receives sampling rules to apply to individual spans.
|
|
33
|
+
#
|
|
34
|
+
# @param [Array<Datadog::Tracing::Sampling::Span::Rule>] rules list of rules to apply to spans
|
|
35
|
+
def initialize(rules = [])
|
|
36
|
+
@rules = rules
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Applies Single Span Sampling rules to the span if the trace has been rejected.
|
|
40
|
+
#
|
|
41
|
+
# The trace can be outright rejected, and never reach the transport,
|
|
42
|
+
# or be set as rejected by priority sampling. In both cases, the trace
|
|
43
|
+
# is considered rejected for Single Span Sampling purposes.
|
|
44
|
+
#
|
|
45
|
+
# If multiple rules match, only the first one is applied.
|
|
46
|
+
#
|
|
47
|
+
# @param [Datadog::Tracing::TraceOperation] trace_op trace for the provided span
|
|
48
|
+
# @param [Datadog::Tracing::SpanOperation] span_op Span to apply sampling rules
|
|
49
|
+
# @return [void]
|
|
50
|
+
def sample!(trace_op, span_op)
|
|
51
|
+
return if trace_op.sampled? && trace_op.priority_sampled?
|
|
52
|
+
|
|
53
|
+
# Applies the first matching rule
|
|
54
|
+
@rules.each do |rule|
|
|
55
|
+
decision = rule.sample!(span_op)
|
|
56
|
+
|
|
57
|
+
next if decision == :not_matched # Iterate until we find a matching decision
|
|
58
|
+
|
|
59
|
+
if decision == :kept
|
|
60
|
+
trace_op.set_tag(
|
|
61
|
+
Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
62
|
+
Sampling::Ext::Decision::SPAN_SAMPLING_RATE
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
break # Found either a `kept` or `rejected` decision
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
data/lib/datadog/tracing/span.rb
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core/utils/safe_dup'
|
|
4
|
+
require_relative 'utils'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
require 'datadog/tracing/metadata/ext'
|
|
9
|
-
require 'datadog/tracing/metadata'
|
|
6
|
+
require_relative 'metadata/ext'
|
|
7
|
+
require_relative 'metadata'
|
|
10
8
|
|
|
11
9
|
module Datadog
|
|
12
10
|
module Tracing
|
|
@@ -19,19 +17,6 @@ module Datadog
|
|
|
19
17
|
class Span
|
|
20
18
|
include Metadata
|
|
21
19
|
|
|
22
|
-
# The max value for a {Datadog::Tracing::Span} identifier.
|
|
23
|
-
# Span and trace identifiers should be strictly positive and strictly inferior to this limit.
|
|
24
|
-
#
|
|
25
|
-
# Limited to +2<<62-1+ positive integers, as Ruby is able to represent such numbers "inline",
|
|
26
|
-
# inside a +VALUE+ scalar, thus not requiring memory allocation.
|
|
27
|
-
#
|
|
28
|
-
# The range of IDs also has to consider portability across different languages and platforms.
|
|
29
|
-
RUBY_MAX_ID = (1 << 62) - 1
|
|
30
|
-
|
|
31
|
-
# While we only generate 63-bit integers due to limitations in other languages, we support
|
|
32
|
-
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
|
33
|
-
EXTERNAL_MAX_ID = 1 << 64
|
|
34
|
-
|
|
35
20
|
attr_accessor \
|
|
36
21
|
:end_time,
|
|
37
22
|
:id,
|
|
@@ -63,6 +48,7 @@ module Datadog
|
|
|
63
48
|
# * +type+: the type of the span (such as +http+, +db+ and so on)
|
|
64
49
|
# * +parent_id+: the identifier of the parent span
|
|
65
50
|
# * +trace_id+: the identifier of the root span for this trace
|
|
51
|
+
# * +service_entry+: whether it is a service entry span.
|
|
66
52
|
# TODO: Remove span_type
|
|
67
53
|
def initialize(
|
|
68
54
|
name,
|
|
@@ -78,16 +64,17 @@ module Datadog
|
|
|
78
64
|
start_time: nil,
|
|
79
65
|
status: 0,
|
|
80
66
|
type: span_type,
|
|
81
|
-
trace_id: nil
|
|
67
|
+
trace_id: nil,
|
|
68
|
+
service_entry: nil
|
|
82
69
|
)
|
|
83
70
|
@name = Core::Utils::SafeDup.frozen_or_dup(name)
|
|
84
71
|
@service = Core::Utils::SafeDup.frozen_or_dup(service)
|
|
85
72
|
@resource = Core::Utils::SafeDup.frozen_or_dup(resource)
|
|
86
73
|
@type = Core::Utils::SafeDup.frozen_or_dup(type)
|
|
87
74
|
|
|
88
|
-
@id = id ||
|
|
75
|
+
@id = id || Tracing::Utils.next_id
|
|
89
76
|
@parent_id = parent_id || 0
|
|
90
|
-
@trace_id = trace_id ||
|
|
77
|
+
@trace_id = trace_id || Tracing::Utils.next_id
|
|
91
78
|
|
|
92
79
|
@meta = meta || {}
|
|
93
80
|
@metrics = metrics || {}
|
|
@@ -103,6 +90,11 @@ module Datadog
|
|
|
103
90
|
# duration_start and duration_end track monotonic clock, and may remain nil in cases where it
|
|
104
91
|
# is known that we have to use wall clock to measure duration.
|
|
105
92
|
@duration = duration
|
|
93
|
+
|
|
94
|
+
@service_entry = service_entry
|
|
95
|
+
|
|
96
|
+
# Mark with the service entry span metric, if applicable
|
|
97
|
+
set_metric(Metadata::Ext::TAG_TOP_LEVEL, 1.0) if service_entry
|
|
106
98
|
end
|
|
107
99
|
|
|
108
100
|
# Return whether the duration is started or not
|
|
@@ -207,6 +199,16 @@ module Datadog
|
|
|
207
199
|
def duration_nano
|
|
208
200
|
(duration * 1e9).to_i
|
|
209
201
|
end
|
|
202
|
+
|
|
203
|
+
# https://docs.datadoghq.com/tracing/visualization/#service-entry-span
|
|
204
|
+
# A span is a service entry span when it is the entrypoint method for a request to a service.
|
|
205
|
+
# You can visualize this within Datadog APM when the color of the immediate parent on a flame graph is a different
|
|
206
|
+
# color. Services are also listed on the right when viewing a flame graph.
|
|
207
|
+
#
|
|
208
|
+
# @return [Boolean] `true` if the span is a serivce entry span
|
|
209
|
+
def service_entry?
|
|
210
|
+
@service_entry == true
|
|
211
|
+
end
|
|
210
212
|
end
|
|
211
213
|
end
|
|
212
214
|
end
|