ddtrace 1.2.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 +442 -2
- data/LICENSE-3rdparty.csv +4 -0
- data/README.md +2 -2
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +20 -4
- data/ext/ddtrace_profiling_loader/extconf.rb +21 -3
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +46 -3
- data/ext/ddtrace_profiling_native_extension/clock_id.h +21 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +33 -2
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +10 -1
- 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 +186 -85
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +13 -2
- 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 +54 -34
- data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +127 -121
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +25 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +82 -37
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +189 -139
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +15 -6
- data/ext/ddtrace_profiling_native_extension/profiling.c +221 -5
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +57 -1
- 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 +489 -45
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +12 -35
- 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 +46 -24
- data/lib/datadog/appsec/configuration.rb +12 -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 +117 -110
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -7
- data/lib/datadog/appsec/contrib/rack/patcher.rb +4 -4
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +31 -38
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +21 -22
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +21 -22
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +9 -7
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +80 -39
- 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 +45 -40
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -7
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -16
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +24 -23
- data/lib/datadog/appsec/contrib/rails/request.rb +3 -2
- 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 +82 -75
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -6
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -18
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +21 -20
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +0 -2
- data/lib/datadog/appsec/event.rb +8 -16
- data/lib/datadog/appsec/ext.rb +9 -0
- data/lib/datadog/appsec/extensions.rb +51 -23
- 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 +110 -31
- data/lib/datadog/appsec/rate_limiter.rb +0 -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 -5
- 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 +77 -41
- 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 +8 -28
- data/lib/datadog/core/configuration/base.rb +14 -4
- data/lib/datadog/core/configuration/components.rb +31 -299
- 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 +87 -257
- data/lib/datadog/core/configuration.rb +9 -10
- 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 +1 -5
- data/lib/datadog/core/environment/class_count.rb +0 -2
- data/lib/datadog/core/environment/container.rb +1 -5
- 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 +1 -3
- 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 +58 -12
- 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/metrics/client.rb +10 -11
- 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 +27 -13
- 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 +1 -5
- 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 -6
- data/lib/datadog/core.rb +21 -56
- data/lib/datadog/kit/appsec/events.rb +74 -0
- data/lib/datadog/kit/enable_core_dumps.rb +6 -6
- data/lib/datadog/kit/identity.rb +15 -8
- data/lib/datadog/kit.rb +1 -3
- 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 +1 -3
- data/lib/datadog/opentracer/tracer.rb +23 -23
- 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 +0 -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 +16 -13
- data/lib/datadog/profiling/collectors/stack.rb +3 -10
- 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 +1 -3
- data/lib/datadog/profiling/event.rb +0 -2
- data/lib/datadog/profiling/events/stack.rb +1 -3
- data/lib/datadog/profiling/exporter.rb +23 -14
- data/lib/datadog/profiling/ext/forking.rb +36 -39
- data/lib/datadog/profiling/ext.rb +1 -2
- data/lib/datadog/profiling/flush.rb +0 -5
- data/lib/datadog/profiling/http_transport.rb +5 -6
- data/lib/datadog/profiling/load_native_extension.rb +0 -2
- data/lib/datadog/profiling/native_extension.rb +0 -2
- data/lib/datadog/profiling/old_recorder.rb +8 -7
- 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 +8 -12
- data/lib/datadog/profiling/stack_recorder.rb +49 -8
- data/lib/datadog/profiling/tag_builder.rb +5 -2
- data/lib/datadog/profiling/tasks/exec.rb +0 -2
- data/lib/datadog/profiling/tasks/help.rb +0 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -11
- 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 +67 -27
- data/lib/datadog/tracing/analytics.rb +1 -3
- data/lib/datadog/tracing/buffer.rb +5 -9
- 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 +2 -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 +6 -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 -9
- 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 +2 -4
- 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 +2 -4
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
- 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 +0 -2
- 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 +0 -2
- 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 -5
- 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 -4
- 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 +3 -5
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -9
- 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 -6
- 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 -5
- 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 -7
- 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 -6
- 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 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +9 -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 +3 -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 -8
- 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 -5
- 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 +1 -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 +17 -4
- data/lib/datadog/tracing/contrib/pg/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +78 -41
- data/lib/datadog/tracing/contrib/pg/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -4
- 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 -5
- 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 -3
- 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 -5
- 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 +1 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/framework.rb +16 -23
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -4
- 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 +12 -9
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -6
- 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 -14
- 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 -4
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +7 -6
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +8 -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 -5
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +6 -7
- 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 +1 -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 +3 -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 +12 -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 +0 -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 -9
- 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 -4
- 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 -8
- 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 -50
- 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 +27 -40
- 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 +1 -3
- 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 +18 -12
- data/lib/datadog/tracing/metadata/tagging.rb +17 -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 +62 -11
- 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 +3 -5
- data/lib/datadog/tracing/sampling/rule_sampler.rb +8 -9
- 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 +9 -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 +6 -24
- data/lib/datadog/tracing/span_operation.rb +11 -14
- 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 -17
- 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 +2 -4
- data/lib/ddtrace/transport/http/env.rb +0 -2
- data/lib/ddtrace/transport/http/response.rb +1 -3
- 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 +2 -4
- 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 -10
- metadata +131 -50
- data/.editorconfig +0 -22
- data/.gitignore +0 -58
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -71
- 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 -2712
- data/docs/ProfilingDevelopment.md +0 -109
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -269
- data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +0 -13
- data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
- data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
- data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -42
- data/lib/datadog/profiling/old_ext.rb +0 -42
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
- 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 -37
- data/lib/datadog/profiling/transport/http/response.rb +0 -21
- data/lib/datadog/profiling/transport/http.rb +0 -112
- 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/headers/parser.rb +0 -37
- data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
- data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
- data/lib/datadog/tracing/propagation/grpc.rb +0 -98
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/tracing/trace_operation'
|
|
6
|
-
require 'datadog/opentracer/propagator'
|
|
1
|
+
require_relative '../tracing/context'
|
|
2
|
+
require_relative '../tracing/distributed/datadog'
|
|
3
|
+
require_relative '../tracing/trace_operation'
|
|
4
|
+
require_relative 'propagator'
|
|
7
5
|
|
|
8
6
|
module Datadog
|
|
9
7
|
module OpenTracer
|
|
10
8
|
# OpenTracing propagator for Datadog::OpenTracer::Tracer
|
|
11
9
|
module TextMapPropagator
|
|
12
10
|
extend Propagator
|
|
13
|
-
extend Tracing::Distributed::Headers::Ext
|
|
14
|
-
include Tracing::Distributed::Headers::Ext
|
|
15
11
|
|
|
16
12
|
BAGGAGE_PREFIX = 'ot-baggage-'.freeze
|
|
17
13
|
|
|
@@ -27,14 +23,17 @@ module Datadog
|
|
|
27
23
|
end
|
|
28
24
|
|
|
29
25
|
# Inject Datadog trace properties
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
digest = if span_context.datadog_context && span_context.datadog_context.active_trace
|
|
27
|
+
span_context.datadog_context.active_trace.to_digest
|
|
28
|
+
else
|
|
29
|
+
span_context.datadog_trace_digest
|
|
30
|
+
end
|
|
32
31
|
return unless digest
|
|
33
32
|
|
|
34
|
-
carrier[
|
|
35
|
-
carrier[
|
|
36
|
-
carrier[
|
|
37
|
-
carrier[
|
|
33
|
+
carrier[Tracing::Distributed::Datadog::ORIGIN_KEY] = digest.trace_origin
|
|
34
|
+
carrier[Tracing::Distributed::Datadog::PARENT_ID_KEY] = digest.span_id
|
|
35
|
+
carrier[Tracing::Distributed::Datadog::SAMPLING_PRIORITY_KEY] = digest.trace_sampling_priority
|
|
36
|
+
carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] = digest.trace_id
|
|
38
37
|
|
|
39
38
|
nil
|
|
40
39
|
end
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
1
|
require 'time'
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
require_relative '../tracing/context'
|
|
4
|
+
require_relative '../tracing/tracer'
|
|
7
5
|
|
|
8
6
|
module Datadog
|
|
9
7
|
module OpenTracer
|
|
@@ -52,13 +50,15 @@ module Datadog
|
|
|
52
50
|
# yield the newly-started Scope. If `finish_on_close` is true then the
|
|
53
51
|
# Span will be finished automatically after the block is executed.
|
|
54
52
|
# @return [Scope] The newly-started and activated Scope
|
|
55
|
-
def start_active_span(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
def start_active_span(
|
|
54
|
+
operation_name,
|
|
55
|
+
child_of: nil,
|
|
56
|
+
references: nil,
|
|
57
|
+
start_time: Time.now,
|
|
58
|
+
tags: nil,
|
|
59
|
+
ignore_active_scope: false,
|
|
60
|
+
finish_on_close: true
|
|
61
|
+
)
|
|
62
62
|
|
|
63
63
|
# When meant to automatically determine the parent,
|
|
64
64
|
# Use the active scope first, otherwise fall back to any
|
|
@@ -124,12 +124,14 @@ module Datadog
|
|
|
124
124
|
# References#CHILD_OF reference to the ScopeManager#active.
|
|
125
125
|
# @return [Span] the newly-started Span instance, which has not been
|
|
126
126
|
# automatically registered via the ScopeManager
|
|
127
|
-
def start_span(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
def start_span(
|
|
128
|
+
operation_name,
|
|
129
|
+
child_of: nil,
|
|
130
|
+
references: nil,
|
|
131
|
+
start_time: Time.now,
|
|
132
|
+
tags: nil,
|
|
133
|
+
ignore_active_scope: false
|
|
134
|
+
)
|
|
133
135
|
|
|
134
136
|
# Derive the OpenTracer::SpanContext to inherit from.
|
|
135
137
|
parent_span_context = inherited_span_context(child_of, ignore_active_scope: ignore_active_scope)
|
|
@@ -147,12 +149,10 @@ module Datadog
|
|
|
147
149
|
tags: tags || {}
|
|
148
150
|
)
|
|
149
151
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
SpanContextFactory.build(datadog_context: datadog_context)
|
|
155
|
-
end
|
|
152
|
+
span_context = SpanContextFactory.build(
|
|
153
|
+
datadog_context: datadog_context || datadog_tracer.send(:call_context),
|
|
154
|
+
baggage: parent_span_context ? parent_span_context.baggage.dup : {}
|
|
155
|
+
)
|
|
156
156
|
|
|
157
157
|
# Wrap the Datadog span and OpenTracer::Span context in a OpenTracer::Span
|
|
158
158
|
Span.new(datadog_span: datadog_span, span_context: span_context)
|
data/lib/datadog/opentracer.rb
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
# typed: strict
|
|
2
|
-
|
|
3
1
|
require 'opentracing'
|
|
4
2
|
require 'opentracing/carrier'
|
|
5
|
-
|
|
3
|
+
require_relative 'tracing'
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
require_relative 'opentracer/carrier'
|
|
6
|
+
require_relative 'opentracer/tracer'
|
|
7
|
+
require_relative 'opentracer/span'
|
|
8
|
+
require_relative 'opentracer/span_context'
|
|
9
|
+
require_relative 'opentracer/span_context_factory'
|
|
10
|
+
require_relative 'opentracer/scope'
|
|
11
|
+
require_relative 'opentracer/scope_manager'
|
|
12
|
+
require_relative 'opentracer/thread_local_scope'
|
|
13
|
+
require_relative 'opentracer/thread_local_scope_manager'
|
|
14
|
+
require_relative 'opentracer/distributed_headers'
|
|
15
|
+
require_relative 'opentracer/propagator'
|
|
16
|
+
require_relative 'opentracer/text_map_propagator'
|
|
17
|
+
require_relative 'opentracer/binary_propagator'
|
|
18
|
+
require_relative 'opentracer/rack_propagator'
|
|
19
|
+
require_relative 'opentracer/global_tracer'
|
|
22
20
|
|
|
23
21
|
# Modify the OpenTracing module functions
|
|
24
22
|
::OpenTracing.singleton_class.prepend(Datadog::OpenTracer::GlobalTracer)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'datadog/core/utils/object_set'
|
|
5
|
-
require 'datadog/core/utils/string_table'
|
|
1
|
+
require_relative '../core/buffer/thread_safe'
|
|
2
|
+
require_relative '../core/utils/object_set'
|
|
3
|
+
require_relative '../core/utils/string_table'
|
|
6
4
|
|
|
7
5
|
module Datadog
|
|
8
6
|
module Profiling
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Profiling
|
|
3
|
+
module Collectors
|
|
4
|
+
# Used to trigger the periodic execution of Collectors::ThreadState, which implements all of the sampling logic
|
|
5
|
+
# itself; this class only implements the "when to do it" part.
|
|
6
|
+
# Almost all of this class is implemented as native code.
|
|
7
|
+
#
|
|
8
|
+
# Methods prefixed with _native_ are implemented in `collectors_cpu_and_wall_time_worker.c`
|
|
9
|
+
class CpuAndWallTimeWorker
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
attr_accessor :failure_exception
|
|
13
|
+
|
|
14
|
+
public
|
|
15
|
+
|
|
16
|
+
def initialize(
|
|
17
|
+
recorder:,
|
|
18
|
+
max_frames:,
|
|
19
|
+
tracer:,
|
|
20
|
+
gc_profiling_enabled:,
|
|
21
|
+
allocation_counting_enabled:,
|
|
22
|
+
thread_context_collector: ThreadContext.new(recorder: recorder, max_frames: max_frames, tracer: tracer),
|
|
23
|
+
idle_sampling_helper: IdleSamplingHelper.new
|
|
24
|
+
)
|
|
25
|
+
self.class._native_initialize(
|
|
26
|
+
self,
|
|
27
|
+
thread_context_collector,
|
|
28
|
+
gc_profiling_enabled,
|
|
29
|
+
idle_sampling_helper,
|
|
30
|
+
allocation_counting_enabled
|
|
31
|
+
)
|
|
32
|
+
@worker_thread = nil
|
|
33
|
+
@failure_exception = nil
|
|
34
|
+
@start_stop_mutex = Mutex.new
|
|
35
|
+
@idle_sampling_helper = idle_sampling_helper
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def start
|
|
39
|
+
@start_stop_mutex.synchronize do
|
|
40
|
+
return if @worker_thread && @worker_thread.alive?
|
|
41
|
+
|
|
42
|
+
Datadog.logger.debug { "Starting thread for: #{self}" }
|
|
43
|
+
|
|
44
|
+
@idle_sampling_helper.start
|
|
45
|
+
|
|
46
|
+
@worker_thread = Thread.new do
|
|
47
|
+
begin
|
|
48
|
+
Thread.current.name = self.class.name
|
|
49
|
+
|
|
50
|
+
self.class._native_sampling_loop(self)
|
|
51
|
+
|
|
52
|
+
Datadog.logger.debug('CpuAndWallTimeWorker thread stopping cleanly')
|
|
53
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
54
|
+
@failure_exception = e
|
|
55
|
+
Datadog.logger.warn(
|
|
56
|
+
'CpuAndWallTimeWorker thread error. ' \
|
|
57
|
+
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# TODO: Provided only for compatibility with the API for Collectors::OldStack used in the Profiler class.
|
|
67
|
+
# Can be removed once we remove OldStack.
|
|
68
|
+
def enabled=(_); end
|
|
69
|
+
|
|
70
|
+
def stop(*_)
|
|
71
|
+
@start_stop_mutex.synchronize do
|
|
72
|
+
Datadog.logger.debug('Requesting CpuAndWallTimeWorker thread shut down')
|
|
73
|
+
|
|
74
|
+
@idle_sampling_helper.stop
|
|
75
|
+
|
|
76
|
+
return unless @worker_thread
|
|
77
|
+
|
|
78
|
+
self.class._native_stop(self, @worker_thread)
|
|
79
|
+
|
|
80
|
+
@worker_thread.join
|
|
81
|
+
@worker_thread = nil
|
|
82
|
+
@failure_exception = nil
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def reset_after_fork
|
|
87
|
+
self.class._native_reset_after_fork(self)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def stats
|
|
91
|
+
self.class._native_stats(self)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Profiling
|
|
3
|
+
module Collectors
|
|
4
|
+
# Used to pace the rate of profiling samples based on the last observed time for a sample.
|
|
5
|
+
# All of this module is implemented as native code.
|
|
6
|
+
#
|
|
7
|
+
# Methods prefixed with _native_ are implemented in `collectors_dynamic_sampling_rate.c`
|
|
8
|
+
module DynamicSamplingRate
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Profiling
|
|
3
|
+
module Collectors
|
|
4
|
+
# Used by the Collectors::CpuAndWallTimeWorker to gather samples when the Ruby process is idle.
|
|
5
|
+
# Almost all of this class is implemented as native code.
|
|
6
|
+
#
|
|
7
|
+
# Methods prefixed with _native_ are implemented in `collectors_idle_sampling_helper.c`
|
|
8
|
+
class IdleSamplingHelper
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
attr_accessor :failure_exception
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@worker_thread = nil
|
|
17
|
+
@start_stop_mutex = Mutex.new
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def start
|
|
21
|
+
@start_stop_mutex.synchronize do
|
|
22
|
+
return if @worker_thread && @worker_thread.alive?
|
|
23
|
+
|
|
24
|
+
Datadog.logger.debug { "Starting thread for: #{self}" }
|
|
25
|
+
|
|
26
|
+
# The same instance of the IdleSamplingHelper can be reused multiple times, and this resets it back to
|
|
27
|
+
# a pristine state before recreating the worker thread
|
|
28
|
+
self.class._native_reset(self)
|
|
29
|
+
|
|
30
|
+
@worker_thread = Thread.new do
|
|
31
|
+
begin
|
|
32
|
+
Thread.current.name = self.class.name
|
|
33
|
+
|
|
34
|
+
self.class._native_idle_sampling_loop(self)
|
|
35
|
+
|
|
36
|
+
Datadog.logger.debug('IdleSamplingHelper thread stopping cleanly')
|
|
37
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
38
|
+
@failure_exception = e
|
|
39
|
+
Datadog.logger.warn(
|
|
40
|
+
'IdleSamplingHelper thread error. ' \
|
|
41
|
+
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def stop(*_)
|
|
51
|
+
@start_stop_mutex.synchronize do
|
|
52
|
+
Datadog.logger.debug('Requesting IdleSamplingHelper thread shut down')
|
|
53
|
+
|
|
54
|
+
return unless @worker_thread
|
|
55
|
+
|
|
56
|
+
self.class._native_stop(self)
|
|
57
|
+
|
|
58
|
+
@worker_thread.join
|
|
59
|
+
@worker_thread = nil
|
|
60
|
+
@failure_exception = nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
require 'datadog/profiling/events/stack'
|
|
9
|
-
require 'datadog/profiling/native_extension'
|
|
1
|
+
require_relative '../../core/utils/only_once'
|
|
2
|
+
require_relative '../../core/utils/time'
|
|
3
|
+
require_relative '../../core/worker'
|
|
4
|
+
require_relative '../../core/workers/polling'
|
|
5
|
+
require_relative '../backtrace_location'
|
|
6
|
+
require_relative '../events/stack'
|
|
7
|
+
require_relative '../native_extension'
|
|
10
8
|
|
|
11
9
|
module Datadog
|
|
12
10
|
module Profiling
|
|
@@ -15,7 +13,7 @@ module Datadog
|
|
|
15
13
|
# Runs on its own background thread.
|
|
16
14
|
#
|
|
17
15
|
# This class has the prefix "Old" because it will be deprecated by the new native CPU Profiler
|
|
18
|
-
class OldStack < Core::Worker
|
|
16
|
+
class OldStack < Core::Worker
|
|
19
17
|
include Core::Workers::Polling
|
|
20
18
|
|
|
21
19
|
DEFAULT_MAX_TIME_USAGE_PCT = 2.0
|
|
@@ -75,9 +73,7 @@ module Datadog
|
|
|
75
73
|
# Cache this buffer, since it's pretty expensive to keep accessing it
|
|
76
74
|
@stack_sample_event_recorder = recorder[Events::StackSample]
|
|
77
75
|
# See below for details on why this is needed
|
|
78
|
-
@needs_process_waiter_workaround =
|
|
79
|
-
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3') &&
|
|
80
|
-
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7')
|
|
76
|
+
@needs_process_waiter_workaround = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7')
|
|
81
77
|
end
|
|
82
78
|
|
|
83
79
|
def start
|
|
@@ -218,6 +214,13 @@ module Datadog
|
|
|
218
214
|
)
|
|
219
215
|
end
|
|
220
216
|
|
|
217
|
+
def reset_after_fork
|
|
218
|
+
recorder.reset_after_fork
|
|
219
|
+
|
|
220
|
+
# NOTE: We could perhaps also call #reset_cpu_time_tracking here, although it's not needed because we always
|
|
221
|
+
# call in in #start.
|
|
222
|
+
end
|
|
223
|
+
|
|
221
224
|
private
|
|
222
225
|
|
|
223
226
|
# If the profiler is started for a while, stopped and then restarted OR whenever the process forks, we need to
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
1
|
module Datadog
|
|
4
2
|
module Profiling
|
|
5
3
|
module Collectors
|
|
6
|
-
# Used to gather a stack trace from a given Ruby thread.
|
|
4
|
+
# Used to gather a stack trace from a given Ruby thread. Stores its output on a `StackRecorder`.
|
|
7
5
|
#
|
|
8
|
-
#
|
|
9
|
-
class Stack
|
|
10
|
-
# This method exists only to enable testing Datadog::Profiling::Collectors::Stack behavior using RSpec.
|
|
11
|
-
# It SHOULD NOT be used for other purposes.
|
|
12
|
-
def sample(thread, recorder_instance, metric_values_hash, labels_array, max_frames: 400)
|
|
13
|
-
self.class._native_sample(thread, recorder_instance, metric_values_hash, labels_array, max_frames)
|
|
14
|
-
end
|
|
6
|
+
# This class is not empty; all of this class is implemented as native code.
|
|
7
|
+
class Stack # rubocop:disable Lint/EmptyClass
|
|
15
8
|
end
|
|
16
9
|
end
|
|
17
10
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Profiling
|
|
5
|
+
module Collectors
|
|
6
|
+
# Used to trigger sampling of threads, based on external "events", such as:
|
|
7
|
+
# * periodic timer for cpu-time and wall-time
|
|
8
|
+
# * VM garbage collection events
|
|
9
|
+
# * VM object allocation events
|
|
10
|
+
# Triggering of this component (e.g. watching for the above "events") is implemented by
|
|
11
|
+
# Collectors::CpuAndWallTimeWorker.
|
|
12
|
+
# The stack collection itself is handled using the Datadog::Profiling::Collectors::Stack.
|
|
13
|
+
# Almost all of this class is implemented as native code.
|
|
14
|
+
#
|
|
15
|
+
# Methods prefixed with _native_ are implemented in `collectors_thread_context.c`
|
|
16
|
+
class ThreadContext
|
|
17
|
+
def initialize(recorder:, max_frames:, tracer:)
|
|
18
|
+
tracer_context_key = safely_extract_context_key_from(tracer)
|
|
19
|
+
self.class._native_initialize(self, recorder, max_frames, tracer_context_key)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def inspect
|
|
23
|
+
# Compose Ruby's default inspect with our custom inspect for the native parts
|
|
24
|
+
result = super()
|
|
25
|
+
result[-1] = "#{self.class._native_inspect(self)}>"
|
|
26
|
+
result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def reset_after_fork
|
|
30
|
+
self.class._native_reset_after_fork(self)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def safely_extract_context_key_from(tracer)
|
|
36
|
+
provider = tracer && tracer.respond_to?(:provider) && tracer.provider
|
|
37
|
+
|
|
38
|
+
return unless provider
|
|
39
|
+
|
|
40
|
+
context = provider.instance_variable_get(:@context)
|
|
41
|
+
context && context.instance_variable_get(:@key)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Profiling
|
|
5
|
+
# Profiling component
|
|
6
|
+
module Component
|
|
7
|
+
def build_profiler(settings, agent_settings, tracer)
|
|
8
|
+
return unless settings.profiling.enabled
|
|
9
|
+
|
|
10
|
+
# Workaround for weird dependency direction: the Core::Configuration::Components class currently has a
|
|
11
|
+
# dependency on individual products, in this case the Profiler.
|
|
12
|
+
# (Note "currently": in the future we want to change this so core classes don't depend on specific products)
|
|
13
|
+
#
|
|
14
|
+
# If the current file included a `require 'datadog/profiler'` at its beginning, we would generate circular
|
|
15
|
+
# requires when used from profiling:
|
|
16
|
+
#
|
|
17
|
+
# datadog/profiling
|
|
18
|
+
# └─requires─> datadog/core
|
|
19
|
+
# └─requires─> datadog/core/configuration/components
|
|
20
|
+
# └─requires─> datadog/profiling # Loop!
|
|
21
|
+
#
|
|
22
|
+
# ...thus in #1998 we removed such a require.
|
|
23
|
+
#
|
|
24
|
+
# On the other hand, if datadog/core is loaded by a different product and no general `require 'ddtrace'` is
|
|
25
|
+
# done, then profiling may not be loaded, and thus to avoid this issue we do a require here (which is a
|
|
26
|
+
# no-op if profiling is already loaded).
|
|
27
|
+
require_relative '../profiling'
|
|
28
|
+
return unless Profiling.supported?
|
|
29
|
+
|
|
30
|
+
unless defined?(Profiling::Tasks::Setup)
|
|
31
|
+
# In #1545 a user reported a NameError due to this constant being uninitialized
|
|
32
|
+
# I've documented my suspicion on why that happened in
|
|
33
|
+
# https://github.com/DataDog/dd-trace-rb/issues/1545#issuecomment-856049025
|
|
34
|
+
#
|
|
35
|
+
# > Thanks for the info! It seems to feed into my theory: there's two moments in the code where we check if
|
|
36
|
+
# > profiler is "supported": 1) when loading ddtrace (inside preload) and 2) when starting the profile
|
|
37
|
+
# > after Datadog.configure gets run.
|
|
38
|
+
# > The problem is that the code assumes that both checks 1) and 2) will always reach the same conclusion:
|
|
39
|
+
# > either profiler is supported, or profiler is not supported.
|
|
40
|
+
# > In the problematic case, it looks like in your case check 1 decides that profiler is not
|
|
41
|
+
# > supported => doesn't load it, and then check 2 decides that it is => assumes it is loaded and tries to
|
|
42
|
+
# > start it.
|
|
43
|
+
#
|
|
44
|
+
# I was never able to validate if this was the issue or why exactly .supported? would change its mind BUT
|
|
45
|
+
# just in case it happens again, I've left this check which avoids breaking the user's application AND
|
|
46
|
+
# would instead direct them to report it to us instead, so that we can investigate what's wrong.
|
|
47
|
+
#
|
|
48
|
+
# TODO: As of June 2021, most checks in .supported? are related to the google-protobuf gem; so it's
|
|
49
|
+
# very likely that it was the origin of the issue we saw. Thus, if, as planned we end up moving away from
|
|
50
|
+
# protobuf OR enough time has passed and no users saw the issue again, we can remove this check altogether.
|
|
51
|
+
Datadog.logger.error(
|
|
52
|
+
'Profiling was marked as supported and enabled, but setup task was not loaded properly. ' \
|
|
53
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug'
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
return
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Load extensions needed to support some of the Profiling features
|
|
60
|
+
Profiling::Tasks::Setup.new.run
|
|
61
|
+
|
|
62
|
+
# NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
|
|
63
|
+
|
|
64
|
+
if settings.profiling.advanced.force_enable_new_profiler
|
|
65
|
+
print_new_profiler_warnings
|
|
66
|
+
|
|
67
|
+
recorder = Datadog::Profiling::StackRecorder.new(
|
|
68
|
+
cpu_time_enabled: RUBY_PLATFORM.include?('linux'), # Only supported on Linux currently
|
|
69
|
+
alloc_samples_enabled: false, # Always disabled for now -- work in progress
|
|
70
|
+
)
|
|
71
|
+
collector = Datadog::Profiling::Collectors::CpuAndWallTimeWorker.new(
|
|
72
|
+
recorder: recorder,
|
|
73
|
+
max_frames: settings.profiling.advanced.max_frames,
|
|
74
|
+
tracer: tracer,
|
|
75
|
+
gc_profiling_enabled: should_enable_gc_profiling?(settings),
|
|
76
|
+
allocation_counting_enabled: settings.profiling.advanced.allocation_counting_enabled,
|
|
77
|
+
)
|
|
78
|
+
else
|
|
79
|
+
trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
|
|
80
|
+
tracer: tracer,
|
|
81
|
+
endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
recorder = build_profiler_old_recorder(settings)
|
|
85
|
+
collector = build_profiler_oldstack_collector(settings, recorder, trace_identifiers_helper)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
exporter = build_profiler_exporter(settings, recorder)
|
|
89
|
+
transport = build_profiler_transport(settings, agent_settings)
|
|
90
|
+
scheduler = Profiling::Scheduler.new(exporter: exporter, transport: transport)
|
|
91
|
+
|
|
92
|
+
Profiling::Profiler.new([collector], scheduler)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
def build_profiler_old_recorder(settings)
|
|
98
|
+
Profiling::OldRecorder.new([Profiling::Events::StackSample], settings.profiling.advanced.max_events)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def build_profiler_exporter(settings, recorder)
|
|
102
|
+
code_provenance_collector =
|
|
103
|
+
(Profiling::Collectors::CodeProvenance.new if settings.profiling.advanced.code_provenance_enabled)
|
|
104
|
+
|
|
105
|
+
Profiling::Exporter.new(pprof_recorder: recorder, code_provenance_collector: code_provenance_collector)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def build_profiler_oldstack_collector(settings, old_recorder, trace_identifiers_helper)
|
|
109
|
+
Profiling::Collectors::OldStack.new(
|
|
110
|
+
old_recorder,
|
|
111
|
+
trace_identifiers_helper: trace_identifiers_helper,
|
|
112
|
+
max_frames: settings.profiling.advanced.max_frames
|
|
113
|
+
)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def build_profiler_transport(settings, agent_settings)
|
|
117
|
+
settings.profiling.exporter.transport ||
|
|
118
|
+
Profiling::HttpTransport.new(
|
|
119
|
+
agent_settings: agent_settings,
|
|
120
|
+
site: settings.site,
|
|
121
|
+
api_key: settings.api_key,
|
|
122
|
+
upload_timeout_seconds: settings.profiling.upload.timeout_seconds,
|
|
123
|
+
)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def should_enable_gc_profiling?(settings)
|
|
127
|
+
# See comments on the setting definition for more context on why it exists.
|
|
128
|
+
if settings.profiling.advanced.force_enable_gc_profiling
|
|
129
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3')
|
|
130
|
+
Datadog.logger.debug(
|
|
131
|
+
'Profiling time/resources spent in Garbage Collection force enabled. Do not use Ractors in combination ' \
|
|
132
|
+
'with this option as profiles will be incomplete.'
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
true
|
|
137
|
+
else
|
|
138
|
+
false
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def print_new_profiler_warnings
|
|
143
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6')
|
|
144
|
+
Datadog.logger.warn(
|
|
145
|
+
'New Ruby profiler has been force-enabled. This is a beta feature. Please report any issues ' \
|
|
146
|
+
'you run into to Datadog support or via <https://github.com/datadog/dd-trace-rb/issues/new>!'
|
|
147
|
+
)
|
|
148
|
+
else
|
|
149
|
+
# For more details on the issue, see the "BIG Issue" comment on `gvl_owner` function in
|
|
150
|
+
# `private_vm_api_access.c`.
|
|
151
|
+
Datadog.logger.warn(
|
|
152
|
+
'New Ruby profiler has been force-enabled on a legacy Ruby version (< 2.6). This is not recommended in ' \
|
|
153
|
+
'production environments, as due to limitations in Ruby APIs, we suspect it may lead to crashes in very ' \
|
|
154
|
+
'rare situations. Please report any issues you run into to Datadog support or ' \
|
|
155
|
+
'via <https://github.com/datadog/dd-trace-rb/issues/new>!'
|
|
156
|
+
)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|