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,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'datadog/core/utils/only_once'
|
|
4
|
-
require 'datadog/profiling'
|
|
5
|
-
require 'datadog/profiling/ext/forking'
|
|
1
|
+
require_relative '../../core/utils/only_once'
|
|
2
|
+
require_relative '../ext/forking'
|
|
6
3
|
|
|
7
4
|
module Datadog
|
|
8
5
|
module Profiling
|
|
@@ -19,7 +16,8 @@ module Datadog
|
|
|
19
16
|
setup_at_fork_hooks
|
|
20
17
|
rescue StandardError, ScriptError => e
|
|
21
18
|
Datadog.logger.warn do
|
|
22
|
-
"Profiler extensions unavailable. Cause: #{e.
|
|
19
|
+
"Profiler extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
|
20
|
+
"Location: #{Array(e.backtrace).first}"
|
|
23
21
|
end
|
|
24
22
|
end
|
|
25
23
|
end
|
|
@@ -35,7 +33,8 @@ module Datadog
|
|
|
35
33
|
end
|
|
36
34
|
rescue StandardError, ScriptError => e
|
|
37
35
|
Datadog.logger.warn do
|
|
38
|
-
"Profiler forking extensions unavailable. Cause: #{e.
|
|
36
|
+
"Profiler forking extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
|
37
|
+
"Location: #{Array(e.backtrace).first}"
|
|
39
38
|
end
|
|
40
39
|
end
|
|
41
40
|
|
|
@@ -54,18 +53,12 @@ module Datadog
|
|
|
54
53
|
if Process.respond_to?(:at_fork)
|
|
55
54
|
Process.at_fork(:child) do
|
|
56
55
|
begin
|
|
57
|
-
# When Ruby forks, clock IDs for each of the threads
|
|
58
|
-
# will change. We can only update these IDs from the
|
|
59
|
-
# execution context of the thread that owns it.
|
|
60
|
-
# This hook will update the IDs for the main thread
|
|
61
|
-
# after a fork occurs.
|
|
62
|
-
Thread.current.send(:update_native_ids) if Thread.current.respond_to?(:update_native_ids, true)
|
|
63
|
-
|
|
64
56
|
# Restart profiler, if enabled
|
|
65
57
|
Profiling.start_if_enabled
|
|
66
58
|
rescue StandardError => e
|
|
67
59
|
Datadog.logger.warn do
|
|
68
|
-
"Error during post-fork hooks. Cause: #{e.
|
|
60
|
+
"Error during post-fork hooks. Cause: #{e.class.name} #{e.message} " \
|
|
61
|
+
"Location: #{Array(e.backtrace).first}"
|
|
69
62
|
end
|
|
70
63
|
end
|
|
71
64
|
end
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'datadog/core/environment/variable_helpers'
|
|
5
|
-
require 'datadog/core/utils/only_once'
|
|
1
|
+
require_relative 'core'
|
|
2
|
+
require_relative 'core/environment/variable_helpers'
|
|
3
|
+
require_relative 'core/utils/only_once'
|
|
6
4
|
|
|
7
5
|
module Datadog
|
|
8
|
-
#
|
|
9
|
-
module Profiling
|
|
6
|
+
# Datadog Continuous Profiler implementation: https://docs.datadoghq.com/profiler/
|
|
7
|
+
module Profiling
|
|
10
8
|
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
11
9
|
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
12
10
|
|
|
13
|
-
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE = Core::Utils::OnlyOnce.new
|
|
14
|
-
private_constant :SKIPPED_NATIVE_EXTENSION_ONLY_ONCE
|
|
15
|
-
|
|
16
11
|
def self.supported?
|
|
17
12
|
unsupported_reason.nil?
|
|
18
13
|
end
|
|
@@ -21,7 +16,7 @@ module Datadog
|
|
|
21
16
|
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
|
|
22
17
|
# first that they can't use this on JRuby before telling them that they are missing protobuf
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
native_library_compilation_skipped? ||
|
|
25
20
|
native_library_failed_to_load? ||
|
|
26
21
|
protobuf_gem_unavailable? ||
|
|
27
22
|
protobuf_version_unsupported? ||
|
|
@@ -44,15 +39,64 @@ module Datadog
|
|
|
44
39
|
!!profiler
|
|
45
40
|
end
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
# Returns an ever-increasing counter of the number of allocations observed by the profiler in this thread.
|
|
43
|
+
#
|
|
44
|
+
# Note 1: This counter may not start from zero on new threads. It should only be used to measure how many
|
|
45
|
+
# allocations have happened between two calls to this API:
|
|
46
|
+
# ```
|
|
47
|
+
# allocations_before = Datadog::Profiling.allocation_count
|
|
48
|
+
# do_some_work()
|
|
49
|
+
# allocations_after = Datadog::Profiling.allocation_count
|
|
50
|
+
# puts "Allocations during do_some_work: #{allocations_after - allocations_before}"
|
|
51
|
+
# ```
|
|
52
|
+
# (This is similar to some OS-based time representations.)
|
|
53
|
+
#
|
|
54
|
+
# Note 2: All fibers in the same thread will share the same counter values.
|
|
55
|
+
#
|
|
56
|
+
# Only available when the profiler is running, the new CPU Profiling 2.0 profiler is in use, and allocation-related
|
|
57
|
+
# features are not disabled via configuration.
|
|
58
|
+
# For instructions on enabling CPU Profiling 2.0 see the ddtrace release notes.
|
|
59
|
+
#
|
|
60
|
+
# @return [Integer] number of allocations observed in the current thread.
|
|
61
|
+
# @return [nil] when not available.
|
|
62
|
+
# @public_api
|
|
63
|
+
def self.allocation_count
|
|
64
|
+
# This no-op implementation is used when profiling failed to load.
|
|
65
|
+
# It gets replaced inside #replace_noop_allocation_count.
|
|
66
|
+
nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private_class_method def self.replace_noop_allocation_count
|
|
70
|
+
def self.allocation_count # rubocop:disable Lint/DuplicateMethods, Lint/NestedMethodDefinition (On purpose!)
|
|
71
|
+
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private_class_method def self.native_library_compilation_skipped?
|
|
76
|
+
skipped_reason = try_reading_skipped_reason_file
|
|
77
|
+
|
|
78
|
+
"Your ddtrace installation is missing support for the Continuous Profiler because #{skipped_reason}" if skipped_reason
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private_class_method def self.try_reading_skipped_reason_file(file_api = File)
|
|
82
|
+
# This file, if it exists, is recorded by extconf.rb during compilation of the native extension
|
|
83
|
+
skipped_reason_file = "#{__dir__}/../../ext/ddtrace_profiling_native_extension/skipped_reason.txt"
|
|
84
|
+
|
|
85
|
+
begin
|
|
86
|
+
return unless file_api.exist?(skipped_reason_file)
|
|
87
|
+
|
|
88
|
+
contents = file_api.read(skipped_reason_file).strip
|
|
89
|
+
contents unless contents.empty?
|
|
90
|
+
rescue StandardError
|
|
91
|
+
# Do nothing
|
|
92
|
+
end
|
|
49
93
|
end
|
|
50
94
|
|
|
51
95
|
private_class_method def self.protobuf_gem_unavailable?
|
|
52
96
|
# NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
|
|
53
97
|
# where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
|
|
54
98
|
# https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
|
|
55
|
-
if !
|
|
99
|
+
if !protobuf_already_loaded? && Gem.loaded_specs['google-protobuf'].nil?
|
|
56
100
|
"Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
57
101
|
end
|
|
58
102
|
end
|
|
@@ -61,12 +105,16 @@ module Datadog
|
|
|
61
105
|
# See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
|
|
62
106
|
# we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
|
|
63
107
|
# expose the gem version constant elsewhere, so in that setup we are not able to check the version.
|
|
64
|
-
if !
|
|
108
|
+
if !protobuf_already_loaded? && Gem.loaded_specs['google-protobuf'].version < GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
65
109
|
'Your google-protobuf is too old; ensure that you have google-protobuf >= 3.0 by ' \
|
|
66
110
|
"adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
67
111
|
end
|
|
68
112
|
end
|
|
69
113
|
|
|
114
|
+
private_class_method def self.protobuf_already_loaded?
|
|
115
|
+
defined?(::Google::Protobuf) && !defined?(::Protobuf)
|
|
116
|
+
end
|
|
117
|
+
|
|
70
118
|
private_class_method def self.protobuf_failed_to_load?
|
|
71
119
|
unless protobuf_loaded_successfully?
|
|
72
120
|
'There was an error loading the google-protobuf library; see previous warning message for details'
|
|
@@ -92,13 +140,12 @@ module Datadog
|
|
|
92
140
|
# NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
|
|
93
141
|
# In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
|
|
94
142
|
Kernel.warn(
|
|
95
|
-
'[
|
|
96
|
-
"Cause: '#{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
143
|
+
'[ddtrace] Error while loading google-protobuf gem. ' \
|
|
144
|
+
"Cause: '#{e.class.name} #{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
97
145
|
'This can happen when google-protobuf is missing its native components. ' \
|
|
98
146
|
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
99
147
|
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
100
|
-
'If the error persists, please contact support
|
|
101
|
-
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
148
|
+
'If the error persists, please contact Datadog support at <https://docs.datadoghq.com/help/>.'
|
|
102
149
|
)
|
|
103
150
|
@protobuf_loaded = false
|
|
104
151
|
end
|
|
@@ -110,31 +157,18 @@ module Datadog
|
|
|
110
157
|
unless success
|
|
111
158
|
if exception
|
|
112
159
|
'There was an error loading the profiling native extension due to ' \
|
|
113
|
-
"'#{exception.message}' at '#{exception.backtrace.first}'"
|
|
160
|
+
"'#{exception.class.name} #{exception.message}' at '#{exception.backtrace.first}'"
|
|
114
161
|
else
|
|
115
162
|
'The profiling native extension did not load correctly. ' \
|
|
116
|
-
'
|
|
117
|
-
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
163
|
+
'For help solving this issue, please contact Datadog support at <https://docs.datadoghq.com/help/>.' \
|
|
118
164
|
end
|
|
119
165
|
end
|
|
120
166
|
end
|
|
121
167
|
|
|
122
168
|
private_class_method def self.try_loading_native_library
|
|
123
|
-
if Core::Environment::VariableHelpers.env_to_bool('DD_PROFILING_NO_EXTENSION', false)
|
|
124
|
-
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE.run do
|
|
125
|
-
Kernel.warn(
|
|
126
|
-
'[DDTRACE] Skipped loading of profiling native extension due to DD_PROFILING_NO_EXTENSION environment ' \
|
|
127
|
-
'variable being set. ' \
|
|
128
|
-
'This option is experimental and will lead to the profiler not working in future releases. ' \
|
|
129
|
-
'If you needed to use this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>.'
|
|
130
|
-
)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
return [true, nil]
|
|
134
|
-
end
|
|
135
|
-
|
|
136
169
|
begin
|
|
137
|
-
|
|
170
|
+
require_relative 'profiling/load_native_extension'
|
|
171
|
+
|
|
138
172
|
success =
|
|
139
173
|
defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
|
|
140
174
|
[success, nil]
|
|
@@ -146,23 +180,31 @@ module Datadog
|
|
|
146
180
|
private_class_method def self.load_profiling
|
|
147
181
|
return false unless supported?
|
|
148
182
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
183
|
+
require_relative 'profiling/ext/forking'
|
|
184
|
+
require_relative 'profiling/collectors/code_provenance'
|
|
185
|
+
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
186
|
+
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
187
|
+
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
188
|
+
require_relative 'profiling/collectors/old_stack'
|
|
189
|
+
require_relative 'profiling/collectors/stack'
|
|
190
|
+
require_relative 'profiling/collectors/thread_context'
|
|
191
|
+
require_relative 'profiling/stack_recorder'
|
|
192
|
+
require_relative 'profiling/old_recorder'
|
|
193
|
+
require_relative 'profiling/exporter'
|
|
194
|
+
require_relative 'profiling/scheduler'
|
|
195
|
+
require_relative 'profiling/tasks/setup'
|
|
196
|
+
require_relative 'profiling/profiler'
|
|
197
|
+
require_relative 'profiling/native_extension'
|
|
198
|
+
require_relative 'profiling/trace_identifiers/helper'
|
|
199
|
+
require_relative 'profiling/pprof/pprof_pb'
|
|
200
|
+
require_relative 'profiling/tag_builder'
|
|
201
|
+
require_relative 'profiling/http_transport'
|
|
202
|
+
|
|
203
|
+
replace_noop_allocation_count
|
|
162
204
|
|
|
163
205
|
true
|
|
164
206
|
end
|
|
165
207
|
|
|
166
|
-
load_profiling
|
|
208
|
+
load_profiling
|
|
167
209
|
end
|
|
168
210
|
end
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require 'datadog/core/buffer/cruby'
|
|
7
|
-
require 'datadog/core/diagnostics/health'
|
|
1
|
+
require_relative '../core'
|
|
2
|
+
require_relative '../core/environment/ext'
|
|
3
|
+
require_relative '../core/buffer/thread_safe'
|
|
4
|
+
require_relative '../core/buffer/cruby'
|
|
5
|
+
require_relative '../core/diagnostics/health'
|
|
8
6
|
|
|
9
7
|
module Datadog
|
|
10
8
|
module Tracing
|
|
11
9
|
# Health metrics for trace buffers.
|
|
12
10
|
module MeasuredBuffer
|
|
13
|
-
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
14
|
-
|
|
15
11
|
def initialize(*_)
|
|
16
12
|
super
|
|
17
13
|
|
|
@@ -58,7 +54,9 @@ module Datadog
|
|
|
58
54
|
|
|
59
55
|
@buffer_spans += trace.length
|
|
60
56
|
rescue StandardError => e
|
|
61
|
-
Datadog.logger.debug(
|
|
57
|
+
Datadog.logger.debug(
|
|
58
|
+
"Failed to measure queue accept. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
59
|
+
)
|
|
62
60
|
end
|
|
63
61
|
|
|
64
62
|
def measure_drop(trace)
|
|
@@ -66,7 +64,9 @@ module Datadog
|
|
|
66
64
|
|
|
67
65
|
@buffer_spans -= trace.length
|
|
68
66
|
rescue StandardError => e
|
|
69
|
-
Datadog.logger.debug(
|
|
67
|
+
Datadog.logger.debug(
|
|
68
|
+
"Failed to measure queue drop. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
69
|
+
)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def measure_pop(traces)
|
|
@@ -89,7 +89,9 @@ module Datadog
|
|
|
89
89
|
@buffer_dropped = 0
|
|
90
90
|
@buffer_spans = 0
|
|
91
91
|
rescue StandardError => e
|
|
92
|
-
Datadog.logger.debug(
|
|
92
|
+
Datadog.logger.debug(
|
|
93
|
+
"Failed to measure queue. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
94
|
+
)
|
|
93
95
|
end
|
|
94
96
|
end
|
|
95
97
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/configuration'
|
|
4
|
+
require_relative '../core/utils/network'
|
|
5
|
+
require_relative 'metadata/ext'
|
|
6
|
+
require_relative 'span'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Tracing
|
|
10
|
+
# Common functions for supporting the `http.client_ip` span attribute.
|
|
11
|
+
module ClientIp
|
|
12
|
+
class << self
|
|
13
|
+
# Sets the `http.client_ip` tag on the given span.
|
|
14
|
+
#
|
|
15
|
+
# This function respects the user's settings: if they disable the client IP tagging,
|
|
16
|
+
# or provide a different IP header name.
|
|
17
|
+
#
|
|
18
|
+
# @param [Span] span The span that's associated with the request.
|
|
19
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
20
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
21
|
+
def set_client_ip_tag(span, headers: nil, remote_ip: nil)
|
|
22
|
+
return unless configuration.enabled
|
|
23
|
+
|
|
24
|
+
set_client_ip_tag!(span, headers: headers, remote_ip: remote_ip)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Forcefully sets the `http.client_ip` tag on the given span.
|
|
28
|
+
#
|
|
29
|
+
# This function ignores the user's `enabled` setting.
|
|
30
|
+
#
|
|
31
|
+
# @param [Span] span The span that's associated with the request.
|
|
32
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
33
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
34
|
+
def set_client_ip_tag!(span, headers: nil, remote_ip: nil)
|
|
35
|
+
ip = extract_client_ip(headers, remote_ip)
|
|
36
|
+
|
|
37
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_CLIENT_IP, ip) if ip
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def extract_client_ip(headers, remote_ip)
|
|
41
|
+
if headers && configuration.header_name
|
|
42
|
+
return Datadog::Core::Utils::Network.stripped_ip_from_request_headers(
|
|
43
|
+
headers,
|
|
44
|
+
ip_headers_to_check: Array(configuration.header_name)
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
ip_from_headers = Datadog::Core::Utils::Network.stripped_ip_from_request_headers(headers) if headers
|
|
49
|
+
|
|
50
|
+
ip_from_headers || Datadog::Core::Utils::Network.stripped_ip(remote_ip)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def configuration
|
|
56
|
+
Datadog.configuration.tracing.client_ip
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'tracer'
|
|
4
|
+
require_relative 'flush'
|
|
5
|
+
require_relative 'sync_writer'
|
|
6
|
+
require_relative 'sampling/span/rule_parser'
|
|
7
|
+
require_relative 'sampling/span/sampler'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Tracing
|
|
11
|
+
# Tracing component
|
|
12
|
+
module Component
|
|
13
|
+
def build_tracer(settings, agent_settings)
|
|
14
|
+
# If a custom tracer has been provided, use it instead.
|
|
15
|
+
# Ignore all other options (they should already be configured.)
|
|
16
|
+
tracer = settings.tracing.instance
|
|
17
|
+
return tracer unless tracer.nil?
|
|
18
|
+
|
|
19
|
+
# Apply test mode settings if test mode is activated
|
|
20
|
+
if settings.tracing.test_mode.enabled
|
|
21
|
+
trace_flush = build_test_mode_trace_flush(settings)
|
|
22
|
+
sampler = build_test_mode_sampler
|
|
23
|
+
writer = build_test_mode_writer(settings, agent_settings)
|
|
24
|
+
else
|
|
25
|
+
trace_flush = build_trace_flush(settings)
|
|
26
|
+
sampler = build_sampler(settings)
|
|
27
|
+
writer = build_writer(settings, agent_settings)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
subscribe_to_writer_events!(writer, sampler, settings.tracing.test_mode.enabled)
|
|
31
|
+
|
|
32
|
+
Tracing::Tracer.new(
|
|
33
|
+
default_service: settings.service,
|
|
34
|
+
enabled: settings.tracing.enabled,
|
|
35
|
+
trace_flush: trace_flush,
|
|
36
|
+
sampler: sampler,
|
|
37
|
+
span_sampler: build_span_sampler(settings),
|
|
38
|
+
writer: writer,
|
|
39
|
+
tags: build_tracer_tags(settings),
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def build_trace_flush(settings)
|
|
44
|
+
if settings.tracing.partial_flush.enabled
|
|
45
|
+
Tracing::Flush::Partial.new(
|
|
46
|
+
min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold
|
|
47
|
+
)
|
|
48
|
+
else
|
|
49
|
+
Tracing::Flush::Finished.new
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# TODO: Sampler should be a top-level component.
|
|
54
|
+
# It is currently part of the Tracer initialization
|
|
55
|
+
# process, but can take a variety of options (including
|
|
56
|
+
# a fully custom instance) that makes the Tracer
|
|
57
|
+
# initialization process complex.
|
|
58
|
+
def build_sampler(settings)
|
|
59
|
+
if (sampler = settings.tracing.sampler)
|
|
60
|
+
if settings.tracing.priority_sampling == false
|
|
61
|
+
sampler
|
|
62
|
+
else
|
|
63
|
+
ensure_priority_sampling(sampler, settings)
|
|
64
|
+
end
|
|
65
|
+
elsif settings.tracing.priority_sampling == false
|
|
66
|
+
Tracing::Sampling::RuleSampler.new(
|
|
67
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
68
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
69
|
+
)
|
|
70
|
+
else
|
|
71
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
72
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
73
|
+
post_sampler: Tracing::Sampling::RuleSampler.new(
|
|
74
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
75
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def ensure_priority_sampling(sampler, settings)
|
|
82
|
+
if sampler.is_a?(Tracing::Sampling::PrioritySampler)
|
|
83
|
+
sampler
|
|
84
|
+
else
|
|
85
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
86
|
+
base_sampler: sampler,
|
|
87
|
+
post_sampler: Tracing::Sampling::RuleSampler.new(
|
|
88
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
89
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# TODO: Writer should be a top-level component.
|
|
96
|
+
# It is currently part of the Tracer initialization
|
|
97
|
+
# process, but can take a variety of options (including
|
|
98
|
+
# a fully custom instance) that makes the Tracer
|
|
99
|
+
# initialization process complex.
|
|
100
|
+
def build_writer(settings, agent_settings)
|
|
101
|
+
if (writer = settings.tracing.writer)
|
|
102
|
+
return writer
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
Tracing::Writer.new(agent_settings: agent_settings, **settings.tracing.writer_options)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def subscribe_to_writer_events!(writer, sampler, test_mode)
|
|
109
|
+
return unless writer.respond_to?(:events) # Check if it's a custom, external writer
|
|
110
|
+
|
|
111
|
+
writer.events.after_send.subscribe(&WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK)
|
|
112
|
+
|
|
113
|
+
return unless sampler.is_a?(Tracing::Sampling::PrioritySampler)
|
|
114
|
+
|
|
115
|
+
# DEV: We need to ignore priority sampling updates coming from the agent in test mode
|
|
116
|
+
# because test mode wants to *unconditionally* sample all traces.
|
|
117
|
+
#
|
|
118
|
+
# This can cause trace metrics to be overestimated, but that's a trade-off we take
|
|
119
|
+
# here to achieve 100% sampling rate.
|
|
120
|
+
return if test_mode
|
|
121
|
+
|
|
122
|
+
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(sampler))
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK = lambda do |_, responses|
|
|
126
|
+
Core::Diagnostics::EnvironmentLogger.log!(responses)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Create new lambda for writer callback,
|
|
130
|
+
# capture the current sampler in the callback closure.
|
|
131
|
+
def writer_update_priority_sampler_rates_callback(sampler)
|
|
132
|
+
lambda do |_, responses|
|
|
133
|
+
response = responses.last
|
|
134
|
+
|
|
135
|
+
next unless response && !response.internal_error? && response.service_rates
|
|
136
|
+
|
|
137
|
+
sampler.update(response.service_rates, decision: Tracing::Sampling::Ext::Decision::AGENT_RATE)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def build_span_sampler(settings)
|
|
142
|
+
rules = Tracing::Sampling::Span::RuleParser.parse_json(settings.tracing.sampling.span_rules)
|
|
143
|
+
Tracing::Sampling::Span::Sampler.new(rules || [])
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
def build_tracer_tags(settings)
|
|
149
|
+
settings.tags.dup.tap do |tags|
|
|
150
|
+
tags[Core::Environment::Ext::TAG_ENV] = settings.env unless settings.env.nil?
|
|
151
|
+
tags[Core::Environment::Ext::TAG_VERSION] = settings.version unless settings.version.nil?
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def build_test_mode_trace_flush(settings)
|
|
156
|
+
# If context flush behavior is provided, use it instead.
|
|
157
|
+
settings.tracing.test_mode.trace_flush || build_trace_flush(settings)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def build_test_mode_sampler
|
|
161
|
+
# Do not sample any spans for tests; all must be preserved.
|
|
162
|
+
# Set priority sampler to ensure the agent doesn't drop any traces.
|
|
163
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
164
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
165
|
+
post_sampler: Tracing::Sampling::AllSampler.new
|
|
166
|
+
)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def build_test_mode_writer(settings, agent_settings)
|
|
170
|
+
# Flush traces synchronously, to guarantee they are written.
|
|
171
|
+
writer_options = settings.tracing.test_mode.writer_options || {}
|
|
172
|
+
Tracing::SyncWriter.new(agent_settings: agent_settings, **writer_options)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|