ddtrace 1.10.1 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +125 -1
- data/README.md +8 -10
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +110 -18
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +26 -3
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +3 -0
- data/lib/datadog/appsec/component.rb +40 -6
- data/lib/datadog/appsec/configuration/settings.rb +20 -4
- data/lib/datadog/appsec/configuration.rb +8 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -0
- data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -0
- data/lib/datadog/appsec/contrib/integration.rb +2 -0
- data/lib/datadog/appsec/contrib/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -0
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +4 -15
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +6 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +17 -4
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -0
- data/lib/datadog/appsec/contrib/rails/framework.rb +2 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/request.rb +2 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -0
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -0
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -0
- data/lib/datadog/appsec/extensions.rb +2 -0
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +2 -4
- data/lib/datadog/appsec/processor/rule_loader.rb +63 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +146 -0
- data/lib/datadog/appsec/processor.rb +15 -70
- data/lib/datadog/appsec/remote.rb +121 -0
- data/lib/datadog/appsec/utils/http.rb +2 -0
- data/lib/datadog/appsec/utils.rb +2 -0
- data/lib/datadog/appsec.rb +18 -4
- data/lib/datadog/ci/configuration/components.rb +2 -0
- data/lib/datadog/ci/configuration/settings.rb +2 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +2 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +2 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -0
- data/lib/datadog/ci/extensions.rb +2 -0
- data/lib/datadog/ci/flush.rb +2 -0
- data/lib/datadog/ci.rb +2 -0
- data/lib/datadog/core/buffer/cruby.rb +2 -0
- data/lib/datadog/core/buffer/random.rb +2 -0
- data/lib/datadog/core/buffer/thread_safe.rb +2 -0
- data/lib/datadog/core/chunker.rb +2 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +68 -17
- data/lib/datadog/core/configuration/components.rb +11 -14
- data/lib/datadog/core/configuration/dependency_resolver.rb +2 -0
- data/lib/datadog/core/configuration/option.rb +2 -0
- data/lib/datadog/core/configuration/option_definition.rb +2 -0
- data/lib/datadog/core/configuration/option_definition_set.rb +2 -0
- data/lib/datadog/core/configuration/option_set.rb +2 -0
- data/lib/datadog/core/configuration/settings.rb +70 -16
- data/lib/datadog/core/diagnostics/health.rb +2 -0
- data/lib/datadog/core/environment/class_count.rb +2 -0
- data/lib/datadog/core/environment/gc.rb +2 -0
- data/lib/datadog/core/environment/identity.rb +58 -0
- data/lib/datadog/core/environment/socket.rb +2 -0
- data/lib/datadog/core/environment/thread_count.rb +2 -0
- data/lib/datadog/core/environment/variable_helpers.rb +10 -2
- data/lib/datadog/core/environment/vm_cache.rb +2 -0
- data/lib/datadog/core/extensions.rb +2 -0
- data/lib/datadog/core/header_collection.rb +2 -0
- data/lib/datadog/core/metrics/helpers.rb +2 -0
- data/lib/datadog/core/metrics/metric.rb +2 -0
- data/lib/datadog/core/remote/client/capabilities.rb +57 -0
- data/lib/datadog/core/remote/client.rb +225 -0
- data/lib/datadog/core/remote/component.rb +158 -0
- data/lib/datadog/core/remote/configuration/content.rb +84 -0
- data/lib/datadog/core/remote/configuration/digest.rb +62 -0
- data/lib/datadog/core/remote/configuration/path.rb +90 -0
- data/lib/datadog/core/remote/configuration/repository.rb +292 -0
- data/lib/datadog/core/remote/configuration/target.rb +74 -0
- data/lib/datadog/core/remote/configuration.rb +18 -0
- data/lib/datadog/core/remote/dispatcher.rb +59 -0
- data/lib/datadog/core/remote/ext.rb +12 -0
- data/lib/datadog/core/remote/negotiation.rb +57 -0
- data/lib/datadog/core/remote/worker.rb +96 -0
- data/lib/datadog/core/remote.rb +24 -0
- data/lib/datadog/core/telemetry/collector.rb +8 -9
- data/lib/datadog/core/telemetry/heartbeat.rb +2 -0
- data/lib/datadog/core/telemetry/http/env.rb +2 -0
- data/lib/datadog/core/telemetry/http/transport.rb +2 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +2 -0
- data/lib/datadog/core/telemetry/v1/application.rb +7 -1
- data/lib/datadog/core/telemetry/v1/dependency.rb +7 -1
- data/lib/datadog/core/telemetry/v1/host.rb +9 -1
- data/lib/datadog/core/telemetry/v1/integration.rb +7 -1
- data/lib/datadog/core/telemetry/v1/product.rb +9 -1
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +7 -1
- data/lib/datadog/core/transport/config.rb +58 -0
- data/lib/datadog/core/transport/http/api/instance.rb +37 -0
- data/lib/datadog/core/transport/http/api/spec.rb +19 -0
- data/lib/datadog/core/transport/http/api.rb +57 -0
- data/lib/datadog/core/transport/http/builder.rb +217 -0
- data/lib/datadog/core/transport/http/client.rb +45 -0
- data/lib/datadog/core/transport/http/config.rb +268 -0
- data/lib/datadog/core/transport/http/negotiation.rb +144 -0
- data/lib/datadog/core/transport/http.rb +169 -0
- data/lib/datadog/core/transport/negotiation.rb +60 -0
- data/lib/datadog/core/utils/compression.rb +2 -0
- data/lib/datadog/core/utils/hash.rb +32 -0
- data/lib/datadog/core/utils/object_set.rb +2 -0
- data/lib/datadog/core/utils/safe_dup.rb +20 -2
- data/lib/datadog/core/utils/sequence.rb +2 -0
- data/lib/datadog/core/utils/time.rb +2 -0
- data/lib/datadog/core/worker.rb +2 -0
- data/lib/datadog/core/workers/async.rb +6 -2
- data/lib/datadog/core/workers/interval_loop.rb +7 -1
- data/lib/datadog/core/workers/queue.rb +2 -0
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -0
- data/lib/datadog/kit.rb +2 -0
- data/lib/datadog/opentracer/binary_propagator.rb +2 -0
- data/lib/datadog/opentracer/carrier.rb +2 -0
- data/lib/datadog/opentracer/global_tracer.rb +2 -0
- data/lib/datadog/opentracer/propagator.rb +2 -0
- data/lib/datadog/opentracer/scope.rb +2 -0
- data/lib/datadog/opentracer/scope_manager.rb +2 -0
- data/lib/datadog/opentracer/span_context.rb +2 -0
- data/lib/datadog/opentracer/span_context_factory.rb +2 -0
- data/lib/datadog/opentracer/thread_local_scope.rb +2 -0
- data/lib/datadog/opentracer.rb +2 -0
- data/lib/datadog/profiling/backtrace_location.rb +2 -0
- data/lib/datadog/profiling/buffer.rb +2 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +19 -3
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +2 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/collectors/stack.rb +2 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +2 -2
- data/lib/datadog/profiling/component.rb +103 -29
- data/lib/datadog/profiling/event.rb +2 -0
- data/lib/datadog/profiling/events/stack.rb +2 -0
- data/lib/datadog/profiling/ext.rb +28 -26
- data/lib/datadog/profiling/flush.rb +2 -0
- data/lib/datadog/profiling/native_extension.rb +2 -0
- data/lib/datadog/profiling/pprof/message_set.rb +2 -0
- data/lib/datadog/profiling/pprof/payload.rb +2 -0
- data/lib/datadog/profiling/pprof/string_table.rb +2 -0
- data/lib/datadog/profiling/preload.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +3 -1
- data/lib/datadog/profiling/stack_recorder.rb +0 -18
- data/lib/datadog/profiling/tag_builder.rb +2 -0
- data/lib/datadog/profiling/tasks/setup.rb +0 -26
- data/lib/datadog/profiling.rb +2 -1
- data/lib/datadog/tracing/analytics.rb +2 -0
- data/lib/datadog/tracing/configuration/ext.rb +7 -0
- data/lib/datadog/tracing/configuration/settings.rb +14 -0
- data/lib/datadog/tracing/context.rb +2 -0
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/action_cable/event.rb +2 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +2 -0
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +2 -0
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -0
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -24
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +14 -1
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/action_view/event.rb +2 -0
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -0
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +2 -0
- data/lib/datadog/tracing/contrib/active_job/events.rb +2 -0
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +2 -0
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +2 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/active_record/event.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +4 -1
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +6 -2
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -0
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/analytics.rb +2 -0
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -0
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +9 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +8 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +2 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +2 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/configurable.rb +2 -0
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +2 -0
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +2 -0
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +2 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -2
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -2
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/faraday/connection.rb +2 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -2
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +2 -0
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/grape/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +2 -0
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +2 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +8 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -2
- data/lib/datadog/tracing/contrib/http/integration.rb +2 -0
- data/lib/datadog/tracing/contrib/http/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +2 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/integration.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/events.rb +2 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/patchable.rb +2 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +2 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/qless/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +2 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +2 -0
- data/lib/datadog/tracing/contrib/racecar/events.rb +2 -0
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +9 -2
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -0
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -0
- data/lib/datadog/tracing/contrib/rails/utils.rb +3 -1
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/rake/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/redis/tags.rb +2 -0
- data/lib/datadog/tracing/contrib/registerable.rb +2 -0
- data/lib/datadog/tracing/contrib/registry.rb +2 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +2 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +2 -0
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +34 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +18 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
- data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +3 -0
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -0
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +12 -3
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +8 -0
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +16 -2
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +11 -4
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +18 -2
- data/lib/datadog/tracing/contrib/sidekiq/{tracing.rb → utils.rb} +3 -1
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +2 -0
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +2 -0
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -0
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +2 -0
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +2 -0
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +2 -2
- data/lib/datadog/tracing/contrib.rb +3 -0
- data/lib/datadog/tracing/correlation.rb +10 -10
- data/lib/datadog/tracing/diagnostics/health.rb +2 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -15
- data/lib/datadog/tracing/flush.rb +2 -0
- data/lib/datadog/tracing/metadata/analytics.rb +2 -0
- data/lib/datadog/tracing/metadata/errors.rb +2 -0
- data/lib/datadog/tracing/metadata/ext.rb +6 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +2 -0
- data/lib/datadog/tracing/pipeline/span_processor.rb +2 -0
- data/lib/datadog/tracing/propagation/http.rb +2 -0
- data/lib/datadog/tracing/runtime/metrics.rb +2 -0
- data/lib/datadog/tracing/sampling/all_sampler.rb +2 -0
- data/lib/datadog/tracing/sampling/matcher.rb +2 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +2 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +2 -0
- data/lib/datadog/tracing/sync_writer.rb +2 -0
- data/lib/datadog/tracing/trace_digest.rb +2 -0
- data/lib/datadog/tracing/utils.rb +2 -0
- data/lib/datadog/tracing.rb +2 -0
- data/lib/ddtrace/auto_instrument.rb +2 -0
- data/lib/ddtrace/auto_instrument_base.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +12 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +2 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +2 -0
- data/lib/ddtrace/transport/http/api/instance.rb +2 -0
- data/lib/ddtrace/transport/http/api/map.rb +2 -0
- data/lib/ddtrace/transport/http/api/spec.rb +2 -0
- data/lib/ddtrace/transport/http/env.rb +2 -0
- data/lib/ddtrace/transport/http/response.rb +2 -0
- data/lib/ddtrace/transport/io/response.rb +2 -0
- data/lib/ddtrace/transport/io/traces.rb +2 -0
- data/lib/ddtrace/transport/io.rb +2 -0
- data/lib/ddtrace/transport/parcel.rb +2 -0
- data/lib/ddtrace/transport/request.rb +3 -1
- data/lib/ddtrace/transport/statistics.rb +2 -0
- data/lib/ddtrace/transport/trace_formatter.rb +2 -0
- data/lib/ddtrace/version.rb +9 -5
- data/lib/ddtrace.rb +2 -0
- metadata +43 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bf1177aae94a3724758e48ce461638de0a4b75956c8c1318251f2b568de28c5d
|
|
4
|
+
data.tar.gz: f42454cd32ff7eaf91c7beda1e6ff8a99726efddc8e01fdb4797b4f115c29df4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5d5787eb9f073043151922af478a75affcfe8f2a9723fbe6c8e0561be6c7f95c700c91e1f4ca10401e018f1587f0289b1720d5c38e2cccdb80f7fcffd7eba0ba
|
|
7
|
+
data.tar.gz: 5f9d0adcfc38de9d60c51a46360ce60351228db21cabd07dc176a99f4bf77f80b0cc8f12dbe844ea3ae88f2384174158415a28de3e6adc1b6b54e56be1186665
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,85 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [1.11.0] - 2023-04-27
|
|
6
|
+
|
|
7
|
+
### Highlights
|
|
8
|
+
|
|
9
|
+
As of ddtrace 1.11.0, these features are GA and emabled by default:
|
|
10
|
+
|
|
11
|
+
- CPU Profiling 2.0
|
|
12
|
+
- Remote Configuration
|
|
13
|
+
- Telemetry
|
|
14
|
+
|
|
15
|
+
For more details, check the release notes.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
* Add remote configuration, enabled by default ([#2674][], [#2678][], [#2686][], [#2687][], [#2688][], [#2689][], [#2696][], [#2705][], [#2731][], [#2732][], [#2733][], [#2739][], [#2756][], [#2769][], [#2771][], [#2773][], [#2789][], [#2805][], [#2794][])
|
|
20
|
+
* AppSec: Add response headers passing to WAF ([#2701][])
|
|
21
|
+
* Tracing: Distributed tracing for Sidekiq ([#2513][])
|
|
22
|
+
* Tracing: Add Roda integration ([#2368][])
|
|
23
|
+
* Profiling: Support disabling endpoint names collection in new profiler ([#2698][])
|
|
24
|
+
* Tracing: Support Sidekiq 7 ([#2810][])
|
|
25
|
+
* Core: Add support for Unix Domain Socket (UDS) configuration via `DD_TRACE_AGENT_URL` ([#2806][])
|
|
26
|
+
* Core: Enable Telemetry by default ([#2762][])
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
* Core: Allow `1` as true value in environment variables ([#2710][])
|
|
31
|
+
* Profiling: Enable CPU Profiling 2.0 by default ([#2702][])
|
|
32
|
+
* Tracing: Improve controller instrumentation and deprecate option `exception_controller` ([#2726][])
|
|
33
|
+
* Tracing: Implement Span Attribute Schema Environment Variable ([#2727][])
|
|
34
|
+
* Tracing: Change default `service_name` values (gated by feature flag) ([#2760][])
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
* Bug: Tracing: Fix w3c propagation special character handling ([#2720][])
|
|
39
|
+
* Performance: Tracing: Use `+@` instead of `dup` for duplicating strings ([#2704][])
|
|
40
|
+
* Profiling: Avoid triggering allocation sampling during sampling ([#2690][])
|
|
41
|
+
* Integrations: Tracing: Fix Rails < 3 conditional check in Utils#railtie_supported? ([#2695][])
|
|
42
|
+
* Profiling: Do not auto-enable new profiler when rugged gem is detected ([#2741][])
|
|
43
|
+
* Tracing: Fix using SemanticLogger#log(severity, message, progname) ([#2748][]) ([@rqz13][])
|
|
44
|
+
* Profiling: Improve detection of mysql2 gem incompatibilities with profiler ([#2770][])
|
|
45
|
+
* AppSec: Remove check for `::Rack::Request.instance_methods.include?(:each_header)` at load time ([#2778][])
|
|
46
|
+
* Tracing: Fix quadratic backtracking on invalid URI ([#2788][])
|
|
47
|
+
* Community: Correctly set mutex ([#2757][]) ([@ixti][])
|
|
48
|
+
|
|
49
|
+
Read the [full changeset](https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.0.beta1) and the release [milestone](https://github.com/DataDog/dd-trace-rb/milestone/121?closed=1).
|
|
50
|
+
|
|
51
|
+
## [1.11.0.beta1] - 2023-04-14
|
|
52
|
+
|
|
53
|
+
As of ddtrace 1.11.0.beta1, CPU Profiling 2.0 is now GA and enabled by default. For more details, check the release notes.
|
|
54
|
+
|
|
55
|
+
As of ddtrace 1.11.0.beta1, Remote Configuration is now public beta and disabled by default. For more details, check the release notes.
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
* Add remote configuration beta, disabled by default ([#2674][], [#2678][], [#2686][], [#2687][], [#2688][], [#2689][], [#2696][], [#2705][], [#2731][], [#2732][], [#2733][], [#2739][], [#2756][], [#2769][], [#2771][], [#2773][], [#2789][])
|
|
60
|
+
* AppSec: Add response headers passing to WAF ([#2701][])
|
|
61
|
+
* Tracing: Distributed tracing for Sidekiq ([#2513][])
|
|
62
|
+
* Tracing: Add Roda integration ([#2368][])
|
|
63
|
+
* Profiling: [PROF-6555] Support disabling endpoint names collection in new profiler ([#2698][])
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
* Core: Allow `1` as true value in environment variables ([#2710][])
|
|
68
|
+
* Profiling: [PROF-7360] Enable CPU Profiling 2.0 by default ([#2702][])
|
|
69
|
+
* Tracing: Improve controller instrumentation and deprecate option `exception_controller` ([#2726][])
|
|
70
|
+
* Tracing: Implement Span Attribute Schema Environment Variable ([#2727][])
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
|
|
74
|
+
* Bug: Tracing: Fix w3c propagation special character handling ([#2720][])
|
|
75
|
+
* Performance: Tracing: Use `+@` instead of `dup` for duplicating strings ([#2704][])
|
|
76
|
+
* Profiling: [PROF-7307] Avoid triggering allocation sampling during sampling ([#2690][])
|
|
77
|
+
* Integrations: Tracing: Fix Rails < 3 conditional check in Utils#railtie_supported? ([#2695][])
|
|
78
|
+
* Profiling: [PROF-7409] Do not auto-enable new profiler when rugged gem is detected ([#2741][])
|
|
79
|
+
* Tracing: Fix using SemanticLogger#log(severity, message, progname) ([#2748][]) ([@rqz13][])
|
|
80
|
+
* Profiling: [PROF-6447] Improve detection of mysql2 gem incompatibilities with profiler ([#2770][])
|
|
81
|
+
* AppSec: Remove check for `::Rack::Request.instance_methods.include?(:each_header)` at load time ([#2778][])
|
|
82
|
+
* Tracing: Fix quadratic backtracking on invalid URI ([#2788][])
|
|
83
|
+
|
|
5
84
|
## [1.10.1] - 2023-03-10
|
|
6
85
|
|
|
7
86
|
### Fixed
|
|
@@ -2323,7 +2402,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
|
2323
2402
|
|
|
2324
2403
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
2325
2404
|
|
|
2326
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.
|
|
2405
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.11.0...master
|
|
2406
|
+
[1.11.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.0
|
|
2407
|
+
[1.11.0.beta1]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.0.beta1
|
|
2327
2408
|
[1.10.1]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.0...v1.10.1
|
|
2328
2409
|
[1.10.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.9.0...v1.10.0
|
|
2329
2410
|
[1.9.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.8.0...v1.9.0
|
|
@@ -3261,6 +3342,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
3261
3342
|
[#2363]: https://github.com/DataDog/dd-trace-rb/issues/2363
|
|
3262
3343
|
[#2365]: https://github.com/DataDog/dd-trace-rb/issues/2365
|
|
3263
3344
|
[#2367]: https://github.com/DataDog/dd-trace-rb/issues/2367
|
|
3345
|
+
[#2368]: https://github.com/DataDog/dd-trace-rb/issues/2368
|
|
3264
3346
|
[#2378]: https://github.com/DataDog/dd-trace-rb/issues/2378
|
|
3265
3347
|
[#2382]: https://github.com/DataDog/dd-trace-rb/issues/2382
|
|
3266
3348
|
[#2390]: https://github.com/DataDog/dd-trace-rb/issues/2390
|
|
@@ -3293,6 +3375,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
3293
3375
|
[#2501]: https://github.com/DataDog/dd-trace-rb/issues/2501
|
|
3294
3376
|
[#2504]: https://github.com/DataDog/dd-trace-rb/issues/2504
|
|
3295
3377
|
[#2512]: https://github.com/DataDog/dd-trace-rb/issues/2512
|
|
3378
|
+
[#2513]: https://github.com/DataDog/dd-trace-rb/issues/2513
|
|
3296
3379
|
[#2522]: https://github.com/DataDog/dd-trace-rb/issues/2522
|
|
3297
3380
|
[#2526]: https://github.com/DataDog/dd-trace-rb/issues/2526
|
|
3298
3381
|
[#2530]: https://github.com/DataDog/dd-trace-rb/issues/2530
|
|
@@ -3334,7 +3417,46 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
3334
3417
|
[#2663]: https://github.com/DataDog/dd-trace-rb/issues/2663
|
|
3335
3418
|
[#2665]: https://github.com/DataDog/dd-trace-rb/issues/2665
|
|
3336
3419
|
[#2668]: https://github.com/DataDog/dd-trace-rb/issues/2668
|
|
3420
|
+
[#2674]: https://github.com/DataDog/dd-trace-rb/issues/2674
|
|
3421
|
+
[#2678]: https://github.com/DataDog/dd-trace-rb/issues/2678
|
|
3337
3422
|
[#2679]: https://github.com/DataDog/dd-trace-rb/issues/2679
|
|
3423
|
+
[#2686]: https://github.com/DataDog/dd-trace-rb/issues/2686
|
|
3424
|
+
[#2687]: https://github.com/DataDog/dd-trace-rb/issues/2687
|
|
3425
|
+
[#2688]: https://github.com/DataDog/dd-trace-rb/issues/2688
|
|
3426
|
+
[#2689]: https://github.com/DataDog/dd-trace-rb/issues/2689
|
|
3427
|
+
[#2690]: https://github.com/DataDog/dd-trace-rb/issues/2690
|
|
3428
|
+
[#2695]: https://github.com/DataDog/dd-trace-rb/issues/2695
|
|
3429
|
+
[#2696]: https://github.com/DataDog/dd-trace-rb/issues/2696
|
|
3430
|
+
[#2698]: https://github.com/DataDog/dd-trace-rb/issues/2698
|
|
3431
|
+
[#2701]: https://github.com/DataDog/dd-trace-rb/issues/2701
|
|
3432
|
+
[#2702]: https://github.com/DataDog/dd-trace-rb/issues/2702
|
|
3433
|
+
[#2704]: https://github.com/DataDog/dd-trace-rb/issues/2704
|
|
3434
|
+
[#2705]: https://github.com/DataDog/dd-trace-rb/issues/2705
|
|
3435
|
+
[#2710]: https://github.com/DataDog/dd-trace-rb/issues/2710
|
|
3436
|
+
[#2720]: https://github.com/DataDog/dd-trace-rb/issues/2720
|
|
3437
|
+
[#2726]: https://github.com/DataDog/dd-trace-rb/issues/2726
|
|
3438
|
+
[#2727]: https://github.com/DataDog/dd-trace-rb/issues/2727
|
|
3439
|
+
[#2731]: https://github.com/DataDog/dd-trace-rb/issues/2731
|
|
3440
|
+
[#2732]: https://github.com/DataDog/dd-trace-rb/issues/2732
|
|
3441
|
+
[#2733]: https://github.com/DataDog/dd-trace-rb/issues/2733
|
|
3442
|
+
[#2739]: https://github.com/DataDog/dd-trace-rb/issues/2739
|
|
3443
|
+
[#2741]: https://github.com/DataDog/dd-trace-rb/issues/2741
|
|
3444
|
+
[#2748]: https://github.com/DataDog/dd-trace-rb/issues/2748
|
|
3445
|
+
[#2756]: https://github.com/DataDog/dd-trace-rb/issues/2756
|
|
3446
|
+
[#2757]: https://github.com/DataDog/dd-trace-rb/issues/2757
|
|
3447
|
+
[#2760]: https://github.com/DataDog/dd-trace-rb/issues/2760
|
|
3448
|
+
[#2762]: https://github.com/DataDog/dd-trace-rb/issues/2762
|
|
3449
|
+
[#2769]: https://github.com/DataDog/dd-trace-rb/issues/2769
|
|
3450
|
+
[#2770]: https://github.com/DataDog/dd-trace-rb/issues/2770
|
|
3451
|
+
[#2771]: https://github.com/DataDog/dd-trace-rb/issues/2771
|
|
3452
|
+
[#2773]: https://github.com/DataDog/dd-trace-rb/issues/2773
|
|
3453
|
+
[#2778]: https://github.com/DataDog/dd-trace-rb/issues/2778
|
|
3454
|
+
[#2788]: https://github.com/DataDog/dd-trace-rb/issues/2788
|
|
3455
|
+
[#2789]: https://github.com/DataDog/dd-trace-rb/issues/2789
|
|
3456
|
+
[#2794]: https://github.com/DataDog/dd-trace-rb/issues/2794
|
|
3457
|
+
[#2805]: https://github.com/DataDog/dd-trace-rb/issues/2805
|
|
3458
|
+
[#2806]: https://github.com/DataDog/dd-trace-rb/issues/2806
|
|
3459
|
+
[#2810]: https://github.com/DataDog/dd-trace-rb/issues/2810
|
|
3338
3460
|
[@AdrianLC]: https://github.com/AdrianLC
|
|
3339
3461
|
[@Azure7111]: https://github.com/Azure7111
|
|
3340
3462
|
[@BabyGroot]: https://github.com/BabyGroot
|
|
@@ -3413,6 +3535,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
3413
3535
|
[@hs-bguven]: https://github.com/hs-bguven
|
|
3414
3536
|
[@illdelph]: https://github.com/illdelph
|
|
3415
3537
|
[@ioquatix]: https://github.com/ioquatix
|
|
3538
|
+
[@ixti]: https://github.com/ixti
|
|
3416
3539
|
[@jamiehodge]: https://github.com/jamiehodge
|
|
3417
3540
|
[@janz93]: https://github.com/janz93
|
|
3418
3541
|
[@jeffjo]: https://github.com/jeffjo
|
|
@@ -3456,6 +3579,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
3456
3579
|
[@renchap]: https://github.com/renchap
|
|
3457
3580
|
[@ricbartm]: https://github.com/ricbartm
|
|
3458
3581
|
[@roccoblues]: https://github.com/roccoblues
|
|
3582
|
+
[@rqz13]: https://github.com/rqz13
|
|
3459
3583
|
[@saturnflyer]: https://github.com/saturnflyer
|
|
3460
3584
|
[@sco11morgan]: https://github.com/sco11morgan
|
|
3461
3585
|
[@senny]: https://github.com/senny
|
data/README.md
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
# Datadog Trace Client
|
|
2
2
|
|
|
3
3
|
[](https://rubygems.org/gems/ddtrace/)
|
|
4
|
-
[](https://circleci.com/gh/DataDog/dd-trace-rb/tree/master)
|
|
5
4
|
[](https://app.codecov.io/gh/DataDog/dd-trace-rb/branch/master)
|
|
6
|
-
[]
|
|
5
|
+
[][api docs]
|
|
7
6
|
|
|
8
7
|
``ddtrace`` is Datadog’s tracing client for Ruby. It is used to trace requests as they flow across web servers,
|
|
9
|
-
databases and microservices so that developers have great
|
|
8
|
+
databases and microservices so that developers have great visibility into bottlenecks and troublesome requests.
|
|
10
9
|
|
|
11
10
|
## Getting started
|
|
12
11
|
|
|
13
12
|
**If you're upgrading from a 0.x version, check out our [upgrade guide](https://github.com/DataDog/dd-trace-rb/blob/master/docs/UpgradeGuide.md#from-0x-to-10).**
|
|
14
13
|
|
|
15
|
-
For a
|
|
14
|
+
For a product overview, installation, and configuration check out our [documentation][public docs].
|
|
16
15
|
|
|
17
|
-
For
|
|
16
|
+
For the gem API, check out our [API documentation][api docs].
|
|
18
17
|
|
|
19
|
-
For descriptions of terminology used in APM, take a look at the [
|
|
18
|
+
For descriptions of terminology used in APM, take a look at the [APM Terms and Concepts][APM glossary].
|
|
20
19
|
|
|
21
20
|
For contributing, checkout the [contribution guidelines][contribution docs] and [development guide][development docs].
|
|
22
21
|
|
|
23
|
-
[
|
|
24
|
-
[api docs]: https://github.
|
|
25
|
-
[
|
|
26
|
-
[visualization docs]: https://docs.datadoghq.com/tracing/visualization/
|
|
22
|
+
[public docs]: https://docs.datadoghq.com/tracing/setup/ruby/
|
|
23
|
+
[api docs]: https://datadog.github.io/dd-trace-rb/
|
|
24
|
+
[APM glossary]: https://docs.datadoghq.com/tracing/glossary/
|
|
27
25
|
[contribution docs]: https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md
|
|
28
26
|
[development docs]: https://github.com/DataDog/dd-trace-rb/blob/master/docs/DevelopmentGuide.md
|
|
29
27
|
|
|
@@ -77,26 +77,33 @@
|
|
|
77
77
|
|
|
78
78
|
// Contains state for a single CpuAndWallTimeWorker instance
|
|
79
79
|
struct cpu_and_wall_time_worker_state {
|
|
80
|
-
|
|
80
|
+
// These are immutable after initialization
|
|
81
81
|
|
|
82
82
|
bool gc_profiling_enabled;
|
|
83
83
|
bool allocation_counting_enabled;
|
|
84
|
+
bool dynamic_sampling_rate_enabled;
|
|
84
85
|
VALUE self_instance;
|
|
85
86
|
VALUE thread_context_collector_instance;
|
|
86
87
|
VALUE idle_sampling_helper_instance;
|
|
87
88
|
VALUE owner_thread;
|
|
88
89
|
dynamic_sampling_rate_state dynamic_sampling_rate;
|
|
90
|
+
VALUE gc_tracepoint; // Used to get gc start/finish information
|
|
91
|
+
VALUE object_allocation_tracepoint; // Used to get allocation counts and allocation profiling
|
|
92
|
+
|
|
93
|
+
// These are mutable and used to signal things between the worker thread and other threads
|
|
89
94
|
|
|
95
|
+
atomic_bool should_run;
|
|
90
96
|
// When something goes wrong during sampling, we record the Ruby exception here, so that it can be "re-raised" on
|
|
91
97
|
// the CpuAndWallTimeWorker thread
|
|
92
98
|
VALUE failure_exception;
|
|
93
99
|
// Used by `_native_stop` to flag the worker thread to start (see comment on `_native_sampling_loop`)
|
|
94
100
|
VALUE stop_thread;
|
|
95
101
|
|
|
96
|
-
//
|
|
97
|
-
VALUE gc_tracepoint;
|
|
102
|
+
// Others
|
|
98
103
|
|
|
99
|
-
|
|
104
|
+
// Used to detect/avoid nested sampling, e.g. when the object_allocation_tracepoint gets triggered by a memory allocation
|
|
105
|
+
// that happens during another sample.
|
|
106
|
+
bool during_sample;
|
|
100
107
|
|
|
101
108
|
struct stats {
|
|
102
109
|
// How many times we tried to trigger a sample
|
|
@@ -111,10 +118,25 @@ struct cpu_and_wall_time_worker_state {
|
|
|
111
118
|
unsigned int signal_handler_wrong_thread;
|
|
112
119
|
// How many times we actually sampled (except GC samples)
|
|
113
120
|
unsigned int sampled;
|
|
121
|
+
// How many times we skipped a sample because of the dynamic sampling rate mechanism
|
|
122
|
+
unsigned int skipped_sample_because_of_dynamic_sampling_rate;
|
|
123
|
+
|
|
124
|
+
// Stats for the results of calling rb_postponed_job_register_one
|
|
125
|
+
// The same function was already waiting to be executed
|
|
126
|
+
unsigned int postponed_job_skipped_already_existed;
|
|
127
|
+
// The function was added to the queue successfully
|
|
128
|
+
unsigned int postponed_job_success;
|
|
129
|
+
// The queue was full
|
|
130
|
+
unsigned int postponed_job_full;
|
|
131
|
+
// The function returned an unknown result code
|
|
132
|
+
unsigned int postponed_job_unknown_result;
|
|
133
|
+
|
|
114
134
|
// Min/max/total wall-time spent sampling (except GC samples)
|
|
115
135
|
uint64_t sampling_time_ns_min;
|
|
116
136
|
uint64_t sampling_time_ns_max;
|
|
117
137
|
uint64_t sampling_time_ns_total;
|
|
138
|
+
// How many times we saw allocations being done inside a sample
|
|
139
|
+
unsigned int allocations_during_sample;
|
|
118
140
|
} stats;
|
|
119
141
|
};
|
|
120
142
|
|
|
@@ -125,7 +147,8 @@ static VALUE _native_initialize(
|
|
|
125
147
|
VALUE thread_context_collector_instance,
|
|
126
148
|
VALUE gc_profiling_enabled,
|
|
127
149
|
VALUE idle_sampling_helper_instance,
|
|
128
|
-
VALUE allocation_counting_enabled
|
|
150
|
+
VALUE allocation_counting_enabled,
|
|
151
|
+
VALUE dynamic_sampling_rate_enabled
|
|
129
152
|
);
|
|
130
153
|
static void cpu_and_wall_time_worker_typed_data_mark(void *state_ptr);
|
|
131
154
|
static VALUE _native_sampling_loop(VALUE self, VALUE instance);
|
|
@@ -160,6 +183,7 @@ static void sleep_for(uint64_t time_ns);
|
|
|
160
183
|
static VALUE _native_allocation_count(DDTRACE_UNUSED VALUE self);
|
|
161
184
|
static void on_newobj_event(DDTRACE_UNUSED VALUE tracepoint_data, DDTRACE_UNUSED void *unused);
|
|
162
185
|
static void disable_tracepoints(struct cpu_and_wall_time_worker_state *state);
|
|
186
|
+
static VALUE _native_with_blocked_sigprof(DDTRACE_UNUSED VALUE self);
|
|
163
187
|
|
|
164
188
|
// Note on sampler global state safety:
|
|
165
189
|
//
|
|
@@ -197,7 +221,7 @@ void collectors_cpu_and_wall_time_worker_init(VALUE profiling_module) {
|
|
|
197
221
|
// https://bugs.ruby-lang.org/issues/18007 for a discussion around this.
|
|
198
222
|
rb_define_alloc_func(collectors_cpu_and_wall_time_worker_class, _native_new);
|
|
199
223
|
|
|
200
|
-
rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_initialize", _native_initialize,
|
|
224
|
+
rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_initialize", _native_initialize, 6);
|
|
201
225
|
rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_sampling_loop", _native_sampling_loop, 1);
|
|
202
226
|
rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_stop", _native_stop, 2);
|
|
203
227
|
rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_reset_after_fork", _native_reset_after_fork, 1);
|
|
@@ -212,6 +236,7 @@ void collectors_cpu_and_wall_time_worker_init(VALUE profiling_module) {
|
|
|
212
236
|
rb_define_singleton_method(testing_module, "_native_simulate_handle_sampling_signal", _native_simulate_handle_sampling_signal, 0);
|
|
213
237
|
rb_define_singleton_method(testing_module, "_native_simulate_sample_from_postponed_job", _native_simulate_sample_from_postponed_job, 0);
|
|
214
238
|
rb_define_singleton_method(testing_module, "_native_is_sigprof_blocked_in_current_thread", _native_is_sigprof_blocked_in_current_thread, 0);
|
|
239
|
+
rb_define_singleton_method(testing_module, "_native_with_blocked_sigprof", _native_with_blocked_sigprof, 0);
|
|
215
240
|
}
|
|
216
241
|
|
|
217
242
|
// This structure is used to define a Ruby object that stores a pointer to a struct cpu_and_wall_time_worker_state
|
|
@@ -230,17 +255,22 @@ static const rb_data_type_t cpu_and_wall_time_worker_typed_data = {
|
|
|
230
255
|
static VALUE _native_new(VALUE klass) {
|
|
231
256
|
struct cpu_and_wall_time_worker_state *state = ruby_xcalloc(1, sizeof(struct cpu_and_wall_time_worker_state));
|
|
232
257
|
|
|
233
|
-
atomic_init(&state->should_run, false);
|
|
234
258
|
state->gc_profiling_enabled = false;
|
|
235
259
|
state->allocation_counting_enabled = false;
|
|
260
|
+
state->dynamic_sampling_rate_enabled = true;
|
|
236
261
|
state->thread_context_collector_instance = Qnil;
|
|
237
262
|
state->idle_sampling_helper_instance = Qnil;
|
|
238
263
|
state->owner_thread = Qnil;
|
|
239
264
|
dynamic_sampling_rate_init(&state->dynamic_sampling_rate);
|
|
240
|
-
state->failure_exception = Qnil;
|
|
241
|
-
state->stop_thread = Qnil;
|
|
242
265
|
state->gc_tracepoint = Qnil;
|
|
243
266
|
state->object_allocation_tracepoint = Qnil;
|
|
267
|
+
|
|
268
|
+
atomic_init(&state->should_run, false);
|
|
269
|
+
state->failure_exception = Qnil;
|
|
270
|
+
state->stop_thread = Qnil;
|
|
271
|
+
|
|
272
|
+
state->during_sample = false;
|
|
273
|
+
|
|
244
274
|
reset_stats(state);
|
|
245
275
|
|
|
246
276
|
return state->self_instance = TypedData_Wrap_Struct(klass, &cpu_and_wall_time_worker_typed_data, state);
|
|
@@ -252,16 +282,19 @@ static VALUE _native_initialize(
|
|
|
252
282
|
VALUE thread_context_collector_instance,
|
|
253
283
|
VALUE gc_profiling_enabled,
|
|
254
284
|
VALUE idle_sampling_helper_instance,
|
|
255
|
-
VALUE allocation_counting_enabled
|
|
285
|
+
VALUE allocation_counting_enabled,
|
|
286
|
+
VALUE dynamic_sampling_rate_enabled
|
|
256
287
|
) {
|
|
257
288
|
ENFORCE_BOOLEAN(gc_profiling_enabled);
|
|
258
289
|
ENFORCE_BOOLEAN(allocation_counting_enabled);
|
|
290
|
+
ENFORCE_BOOLEAN(dynamic_sampling_rate_enabled);
|
|
259
291
|
|
|
260
292
|
struct cpu_and_wall_time_worker_state *state;
|
|
261
293
|
TypedData_Get_Struct(self_instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
|
|
262
294
|
|
|
263
295
|
state->gc_profiling_enabled = (gc_profiling_enabled == Qtrue);
|
|
264
296
|
state->allocation_counting_enabled = (allocation_counting_enabled == Qtrue);
|
|
297
|
+
state->dynamic_sampling_rate_enabled = (dynamic_sampling_rate_enabled == Qtrue);
|
|
265
298
|
state->thread_context_collector_instance = enforce_thread_context_collector_instance(thread_context_collector_instance);
|
|
266
299
|
state->idle_sampling_helper_instance = idle_sampling_helper_instance;
|
|
267
300
|
state->gc_tracepoint = rb_tracepoint_new(Qnil, RUBY_INTERNAL_EVENT_GC_ENTER | RUBY_INTERNAL_EVENT_GC_EXIT, on_gc_event, NULL /* unused */);
|
|
@@ -418,8 +451,20 @@ static void handle_sampling_signal(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED si
|
|
|
418
451
|
|
|
419
452
|
// Note: If we ever want to get rid of rb_postponed_job_register_one, remember not to clobber Ruby exceptions, as
|
|
420
453
|
// this function does this helpful job for us now -- https://github.com/ruby/ruby/commit/a98e343d39c4d7bf1e2190b076720f32d9f298b3.
|
|
421
|
-
|
|
422
|
-
|
|
454
|
+
int result = rb_postponed_job_register_one(0, sample_from_postponed_job, NULL);
|
|
455
|
+
|
|
456
|
+
// Officially, the result of rb_postponed_job_register_one is documented as being opaque, but in practice it does not
|
|
457
|
+
// seem to have changed between Ruby 2.3 and 3.2, and so we track it as a debugging mechanism
|
|
458
|
+
switch (result) {
|
|
459
|
+
case 0:
|
|
460
|
+
state->stats.postponed_job_full++; break;
|
|
461
|
+
case 1:
|
|
462
|
+
state->stats.postponed_job_success++; break;
|
|
463
|
+
case 2:
|
|
464
|
+
state->stats.postponed_job_skipped_already_existed++; break;
|
|
465
|
+
default:
|
|
466
|
+
state->stats.postponed_job_unknown_result++;
|
|
467
|
+
}
|
|
423
468
|
}
|
|
424
469
|
|
|
425
470
|
// The actual sampling trigger loop always runs **without** the global vm lock.
|
|
@@ -431,9 +476,6 @@ static void *run_sampling_trigger_loop(void *state_ptr) {
|
|
|
431
476
|
while (atomic_load(&state->should_run)) {
|
|
432
477
|
state->stats.trigger_sample_attempts++;
|
|
433
478
|
|
|
434
|
-
// TODO: This is still a placeholder for a more complex mechanism. In particular:
|
|
435
|
-
// * We want to do more than having a fixed sampling rate
|
|
436
|
-
|
|
437
479
|
current_gvl_owner owner = gvl_owner();
|
|
438
480
|
if (owner.valid) {
|
|
439
481
|
// Note that reading the GVL owner and sending them a signal is a race -- the Ruby VM keeps on executing while
|
|
@@ -460,7 +502,7 @@ static void *run_sampling_trigger_loop(void *state_ptr) {
|
|
|
460
502
|
// `dynamic_sampling_rate_get_sleep` may have changed while the above sleep was ongoing.
|
|
461
503
|
uint64_t extra_sleep =
|
|
462
504
|
dynamic_sampling_rate_get_sleep(&state->dynamic_sampling_rate, monotonic_wall_time_now_ns(DO_NOT_RAISE_ON_FAILURE));
|
|
463
|
-
if (extra_sleep > 0) sleep_for(extra_sleep);
|
|
505
|
+
if (state->dynamic_sampling_rate_enabled && extra_sleep > 0) sleep_for(extra_sleep);
|
|
464
506
|
}
|
|
465
507
|
|
|
466
508
|
return NULL; // Unused
|
|
@@ -485,8 +527,12 @@ static void sample_from_postponed_job(DDTRACE_UNUSED void *_unused) {
|
|
|
485
527
|
return; // We're not on the main Ractor; we currently don't support profiling non-main Ractors
|
|
486
528
|
}
|
|
487
529
|
|
|
530
|
+
state->during_sample = true;
|
|
531
|
+
|
|
488
532
|
// Rescue against any exceptions that happen during sampling
|
|
489
533
|
safely_call(rescued_sample_from_postponed_job, state->self_instance, state->self_instance);
|
|
534
|
+
|
|
535
|
+
state->during_sample = false;
|
|
490
536
|
}
|
|
491
537
|
|
|
492
538
|
static VALUE rescued_sample_from_postponed_job(VALUE self_instance) {
|
|
@@ -495,8 +541,8 @@ static VALUE rescued_sample_from_postponed_job(VALUE self_instance) {
|
|
|
495
541
|
|
|
496
542
|
long wall_time_ns_before_sample = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
|
|
497
543
|
|
|
498
|
-
if (!dynamic_sampling_rate_should_sample(&state->dynamic_sampling_rate, wall_time_ns_before_sample)) {
|
|
499
|
-
|
|
544
|
+
if (state->dynamic_sampling_rate_enabled && !dynamic_sampling_rate_should_sample(&state->dynamic_sampling_rate, wall_time_ns_before_sample)) {
|
|
545
|
+
state->stats.skipped_sample_because_of_dynamic_sampling_rate++;
|
|
500
546
|
return Qnil;
|
|
501
547
|
}
|
|
502
548
|
|
|
@@ -672,8 +718,12 @@ static void after_gc_from_postponed_job(DDTRACE_UNUSED void *_unused) {
|
|
|
672
718
|
return; // We're not on the main Ractor; we currently don't support profiling non-main Ractors
|
|
673
719
|
}
|
|
674
720
|
|
|
721
|
+
state->during_sample = true;
|
|
722
|
+
|
|
675
723
|
// Trigger sampling using the Collectors::ThreadState; rescue against any exceptions that happen during sampling
|
|
676
724
|
safely_call(thread_context_collector_sample_after_gc, state->thread_context_collector_instance, state->self_instance);
|
|
725
|
+
|
|
726
|
+
state->during_sample = false;
|
|
677
727
|
}
|
|
678
728
|
|
|
679
729
|
// Equivalent to Ruby begin/rescue call, where we call a C function and jump to the exception handler if an
|
|
@@ -749,10 +799,16 @@ static VALUE _native_stats(DDTRACE_UNUSED VALUE self, VALUE instance) {
|
|
|
749
799
|
ID2SYM(rb_intern("signal_handler_enqueued_sample")), /* => */ UINT2NUM(state->stats.signal_handler_enqueued_sample),
|
|
750
800
|
ID2SYM(rb_intern("signal_handler_wrong_thread")), /* => */ UINT2NUM(state->stats.signal_handler_wrong_thread),
|
|
751
801
|
ID2SYM(rb_intern("sampled")), /* => */ UINT2NUM(state->stats.sampled),
|
|
802
|
+
ID2SYM(rb_intern("skipped_sample_because_of_dynamic_sampling_rate")), /* => */ UINT2NUM(state->stats.skipped_sample_because_of_dynamic_sampling_rate),
|
|
803
|
+
ID2SYM(rb_intern("postponed_job_skipped_already_existed")), /* => */ UINT2NUM(state->stats.postponed_job_skipped_already_existed),
|
|
804
|
+
ID2SYM(rb_intern("postponed_job_success")), /* => */ UINT2NUM(state->stats.postponed_job_success),
|
|
805
|
+
ID2SYM(rb_intern("postponed_job_full")), /* => */ UINT2NUM(state->stats.postponed_job_full),
|
|
806
|
+
ID2SYM(rb_intern("postponed_job_unknown_result")), /* => */ UINT2NUM(state->stats.postponed_job_unknown_result),
|
|
752
807
|
ID2SYM(rb_intern("sampling_time_ns_min")), /* => */ pretty_sampling_time_ns_min,
|
|
753
808
|
ID2SYM(rb_intern("sampling_time_ns_max")), /* => */ pretty_sampling_time_ns_max,
|
|
754
809
|
ID2SYM(rb_intern("sampling_time_ns_total")), /* => */ pretty_sampling_time_ns_total,
|
|
755
810
|
ID2SYM(rb_intern("sampling_time_ns_avg")), /* => */ pretty_sampling_time_ns_avg,
|
|
811
|
+
ID2SYM(rb_intern("allocations_during_sample")), /* => */ UINT2NUM(state->stats.allocations_during_sample),
|
|
756
812
|
};
|
|
757
813
|
for (long unsigned int i = 0; i < VALUE_COUNT(arguments); i += 2) rb_hash_aset(stats_as_hash, arguments[i], arguments[i+1]);
|
|
758
814
|
return stats_as_hash;
|
|
@@ -813,9 +869,45 @@ static void on_newobj_event(DDTRACE_UNUSED VALUE tracepoint_data, DDTRACE_UNUSED
|
|
|
813
869
|
} else {
|
|
814
870
|
allocation_count++;
|
|
815
871
|
}
|
|
872
|
+
|
|
873
|
+
struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
|
|
874
|
+
|
|
875
|
+
// This should not happen in a normal situation because the tracepoint is always enabled after the instance is set
|
|
876
|
+
// and disabled before it is cleared, but just in case...
|
|
877
|
+
if (state == NULL) return;
|
|
878
|
+
|
|
879
|
+
// In a few cases, we may actually be allocating an object as part of profiler sampling. We don't want to recursively
|
|
880
|
+
// sample, so we just return early
|
|
881
|
+
if (state->during_sample) {
|
|
882
|
+
state->stats.allocations_during_sample++;
|
|
883
|
+
return;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
// @ivoanjo: Strictly speaking, this is not needed because Ruby should not call the same tracepoint while a previous
|
|
887
|
+
// invocation is still pending, (e.g. it wouldn't call `on_newobj_event` while it's already running), but I decided
|
|
888
|
+
// to keep this here for consistency -- every call to the thread context (other than the special gc calls which are
|
|
889
|
+
// defined as not being able to allocate) sets this.
|
|
890
|
+
state->during_sample = true;
|
|
891
|
+
|
|
892
|
+
// TODO: Sampling goes here (calling into `thread_context_collector_sample_allocation`)
|
|
893
|
+
|
|
894
|
+
state->during_sample = false;
|
|
816
895
|
}
|
|
817
896
|
|
|
818
897
|
static void disable_tracepoints(struct cpu_and_wall_time_worker_state *state) {
|
|
819
898
|
rb_tracepoint_disable(state->gc_tracepoint);
|
|
820
899
|
rb_tracepoint_disable(state->object_allocation_tracepoint);
|
|
821
900
|
}
|
|
901
|
+
|
|
902
|
+
static VALUE _native_with_blocked_sigprof(DDTRACE_UNUSED VALUE self) {
|
|
903
|
+
block_sigprof_signal_handler_from_running_in_current_thread();
|
|
904
|
+
int exception_state;
|
|
905
|
+
VALUE result = rb_protect(rb_yield, Qundef, &exception_state);
|
|
906
|
+
unblock_sigprof_signal_handler_from_running_in_current_thread();
|
|
907
|
+
|
|
908
|
+
if (exception_state) {
|
|
909
|
+
rb_jump_tag(exception_state);
|
|
910
|
+
} else {
|
|
911
|
+
return result;
|
|
912
|
+
}
|
|
913
|
+
}
|
|
@@ -97,6 +97,8 @@ struct thread_context_collector_state {
|
|
|
97
97
|
unsigned int sample_count;
|
|
98
98
|
// Reusable array to get list of threads
|
|
99
99
|
VALUE thread_list_buffer;
|
|
100
|
+
// Used to omit endpoint names (retrieved from tracer) from collected data
|
|
101
|
+
bool endpoint_collection_enabled;
|
|
100
102
|
|
|
101
103
|
struct stats {
|
|
102
104
|
// Track how many garbage collection samples we've taken.
|
|
@@ -140,7 +142,14 @@ static void thread_context_collector_typed_data_free(void *state_ptr);
|
|
|
140
142
|
static int hash_map_per_thread_context_mark(st_data_t key_thread, st_data_t _value, st_data_t _argument);
|
|
141
143
|
static int hash_map_per_thread_context_free_values(st_data_t _thread, st_data_t value_per_thread_context, st_data_t _argument);
|
|
142
144
|
static VALUE _native_new(VALUE klass);
|
|
143
|
-
static VALUE _native_initialize(
|
|
145
|
+
static VALUE _native_initialize(
|
|
146
|
+
VALUE self,
|
|
147
|
+
VALUE collector_instance,
|
|
148
|
+
VALUE recorder_instance,
|
|
149
|
+
VALUE max_frames,
|
|
150
|
+
VALUE tracer_context_key,
|
|
151
|
+
VALUE endpoint_collection_enabled
|
|
152
|
+
);
|
|
144
153
|
static VALUE _native_sample(VALUE self, VALUE collector_instance, VALUE profiler_overhead_stack_thread);
|
|
145
154
|
static VALUE _native_on_gc_start(VALUE self, VALUE collector_instance);
|
|
146
155
|
static VALUE _native_on_gc_finish(VALUE self, VALUE collector_instance);
|
|
@@ -198,7 +207,7 @@ void collectors_thread_context_init(VALUE profiling_module) {
|
|
|
198
207
|
// https://bugs.ruby-lang.org/issues/18007 for a discussion around this.
|
|
199
208
|
rb_define_alloc_func(collectors_thread_context_class, _native_new);
|
|
200
209
|
|
|
201
|
-
rb_define_singleton_method(collectors_thread_context_class, "_native_initialize", _native_initialize,
|
|
210
|
+
rb_define_singleton_method(collectors_thread_context_class, "_native_initialize", _native_initialize, 5);
|
|
202
211
|
rb_define_singleton_method(collectors_thread_context_class, "_native_inspect", _native_inspect, 1);
|
|
203
212
|
rb_define_singleton_method(collectors_thread_context_class, "_native_reset_after_fork", _native_reset_after_fork, 1);
|
|
204
213
|
rb_define_singleton_method(testing_module, "_native_sample", _native_sample, 2);
|
|
@@ -284,11 +293,21 @@ static VALUE _native_new(VALUE klass) {
|
|
|
284
293
|
state->recorder_instance = Qnil;
|
|
285
294
|
state->tracer_context_key = MISSING_TRACER_CONTEXT_KEY;
|
|
286
295
|
state->thread_list_buffer = rb_ary_new();
|
|
296
|
+
state->endpoint_collection_enabled = true;
|
|
287
297
|
|
|
288
298
|
return TypedData_Wrap_Struct(klass, &thread_context_collector_typed_data, state);
|
|
289
299
|
}
|
|
290
300
|
|
|
291
|
-
static VALUE _native_initialize(
|
|
301
|
+
static VALUE _native_initialize(
|
|
302
|
+
DDTRACE_UNUSED VALUE _self,
|
|
303
|
+
VALUE collector_instance,
|
|
304
|
+
VALUE recorder_instance,
|
|
305
|
+
VALUE max_frames,
|
|
306
|
+
VALUE tracer_context_key,
|
|
307
|
+
VALUE endpoint_collection_enabled
|
|
308
|
+
) {
|
|
309
|
+
ENFORCE_BOOLEAN(endpoint_collection_enabled);
|
|
310
|
+
|
|
292
311
|
struct thread_context_collector_state *state;
|
|
293
312
|
TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
|
|
294
313
|
|
|
@@ -299,6 +318,7 @@ static VALUE _native_initialize(DDTRACE_UNUSED VALUE _self, VALUE collector_inst
|
|
|
299
318
|
state->sampling_buffer = sampling_buffer_new(max_frames_requested);
|
|
300
319
|
// hash_map_per_thread_context is already initialized, nothing to do here
|
|
301
320
|
state->recorder_instance = enforce_recorder_instance(recorder_instance);
|
|
321
|
+
state->endpoint_collection_enabled = (endpoint_collection_enabled == Qtrue);
|
|
302
322
|
|
|
303
323
|
if (RTEST(tracer_context_key)) {
|
|
304
324
|
ENFORCE_TYPE(tracer_context_key, T_SYMBOL);
|
|
@@ -732,6 +752,7 @@ static VALUE _native_inspect(DDTRACE_UNUSED VALUE _self, VALUE collector_instanc
|
|
|
732
752
|
rb_str_concat(result, rb_sprintf(" tracer_context_key=%+"PRIsVALUE, tracer_context_key));
|
|
733
753
|
rb_str_concat(result, rb_sprintf(" sample_count=%u", state->sample_count));
|
|
734
754
|
rb_str_concat(result, rb_sprintf(" stats=%"PRIsVALUE, stats_as_ruby_hash(state)));
|
|
755
|
+
rb_str_concat(result, rb_sprintf(" endpoint_collection_enabled=%"PRIsVALUE, state->endpoint_collection_enabled ? Qtrue : Qfalse));
|
|
735
756
|
|
|
736
757
|
return result;
|
|
737
758
|
}
|
|
@@ -911,6 +932,8 @@ static void trace_identifiers_for(struct thread_context_collector_state *state,
|
|
|
911
932
|
|
|
912
933
|
trace_identifiers_result->valid = true;
|
|
913
934
|
|
|
935
|
+
if (!state->endpoint_collection_enabled) return;
|
|
936
|
+
|
|
914
937
|
VALUE root_span_type = rb_ivar_get(root_span, at_type_id /* @type */);
|
|
915
938
|
if (root_span_type == Qnil || !is_type_web(root_span_type)) return;
|
|
916
939
|
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
#pragma GCC diagnostic push
|
|
20
20
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
|
21
21
|
#pragma GCC diagnostic ignored "-Wattributes"
|
|
22
|
+
#pragma GCC diagnostic ignored "-Wpragmas"
|
|
23
|
+
#pragma GCC diagnostic ignored "-Wexpansion-to-defined"
|
|
22
24
|
#include <vm_core.h>
|
|
23
25
|
#pragma GCC diagnostic pop
|
|
24
26
|
#include <iseq.h>
|
|
@@ -651,6 +653,7 @@ check_method_entry(VALUE obj, int can_be_svar)
|
|
|
651
653
|
if (can_be_svar) {
|
|
652
654
|
return check_method_entry(((struct vm_svar *)obj)->cref_or_me, FALSE);
|
|
653
655
|
}
|
|
656
|
+
// fallthrough
|
|
654
657
|
default:
|
|
655
658
|
#if VM_CHECK_MODE > 0
|
|
656
659
|
rb_bug("check_method_entry: svar should not be there:");
|