ddtrace 0.42.0 → 0.54.2
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/.editorconfig +22 -0
- data/.gitignore +7 -1
- data/CHANGELOG.md +1645 -370
- data/CONTRIBUTING.md +2 -6
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +21 -39
- data/docs/DevelopmentGuide.md +46 -8
- data/docs/GettingStarted.md +439 -92
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +86 -0
- data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +52 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +197 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +35 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +22 -0
- data/lib/datadog/ci/configuration/components.rb +31 -0
- data/lib/datadog/ci/configuration/settings.rb +37 -0
- data/lib/datadog/ci/context_flush.rb +29 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +75 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
- data/lib/datadog/ci/ext/app_types.rb +10 -0
- data/lib/datadog/ci/ext/environment.rb +485 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +36 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +81 -0
- data/lib/datadog/ci.rb +17 -0
- data/lib/datadog/contrib.rb +71 -0
- data/lib/datadog/core/environment/cgroup.rb +52 -0
- data/lib/datadog/core/environment/class_count.rb +20 -0
- data/lib/datadog/core/environment/container.rb +91 -0
- data/lib/datadog/core/environment/ext.rb +27 -0
- data/lib/datadog/core/environment/gc.rb +19 -0
- data/lib/datadog/core/environment/identity.rb +51 -0
- data/lib/datadog/core/environment/socket.rb +17 -0
- data/lib/datadog/core/environment/thread_count.rb +19 -0
- data/lib/datadog/core/environment/variable_helpers.rb +42 -0
- data/lib/datadog/core/environment/vm_cache.rb +46 -0
- data/lib/ddtrace/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +5 -0
- data/lib/ddtrace/auto_instrument_base.rb +7 -0
- data/lib/ddtrace/buffer.rb +38 -24
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +309 -0
- data/lib/ddtrace/configuration/base.rb +9 -11
- data/lib/ddtrace/configuration/components.rb +167 -26
- data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
- data/lib/ddtrace/configuration/option.rb +1 -0
- data/lib/ddtrace/configuration/option_definition.rb +2 -3
- data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
- data/lib/ddtrace/configuration/option_set.rb +1 -0
- data/lib/ddtrace/configuration/options.rb +7 -9
- data/lib/ddtrace/configuration/pin_setup.rb +1 -0
- data/lib/ddtrace/configuration/settings.rb +142 -12
- data/lib/ddtrace/configuration.rb +132 -24
- data/lib/ddtrace/context.rb +51 -22
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +13 -2
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +47 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
- data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
- data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
- data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
- data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
- data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
- data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_view/event.rb +4 -7
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
- data/lib/ddtrace/contrib/action_view/events.rb +1 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
- data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
- data/lib/ddtrace/contrib/active_job/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/active_job/event.rb +54 -0
- data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
- data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
- data/lib/ddtrace/contrib/active_job/events.rb +39 -0
- data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
- data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
- data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
- data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_record/event.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
- data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
- data/lib/ddtrace/contrib/analytics.rb +1 -0
- data/lib/ddtrace/contrib/auto_instrument.rb +48 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/aws/ext.rb +1 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
- data/lib/ddtrace/contrib/aws/integration.rb +1 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
- data/lib/ddtrace/contrib/aws/services.rb +4 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
- data/lib/ddtrace/contrib/configurable.rb +65 -38
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +5 -3
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
- data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
- data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/excon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/integration.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +90 -14
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
- data/lib/ddtrace/contrib/grape/ext.rb +2 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
- data/lib/ddtrace/contrib/grape/integration.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/ext.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
- data/lib/ddtrace/contrib/http/integration.rb +1 -0
- data/lib/ddtrace/contrib/http/patcher.rb +2 -1
- data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
- data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
- data/lib/ddtrace/contrib/integration.rb +4 -3
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/event.rb +4 -3
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events.rb +1 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
- data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/mongodb/integration.rb +6 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
- data/lib/ddtrace/contrib/patchable.rb +21 -9
- data/lib/ddtrace/contrib/patcher.rb +12 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/presto/ext.rb +1 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/presto/integration.rb +1 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
- data/lib/ddtrace/contrib/qless/ext.rb +21 -0
- data/lib/ddtrace/contrib/qless/integration.rb +39 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/que/ext.rb +20 -19
- data/lib/ddtrace/contrib/que/integration.rb +1 -0
- data/lib/ddtrace/contrib/que/patcher.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +4 -2
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/racecar/event.rb +4 -2
- data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events.rb +1 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
- data/lib/ddtrace/contrib/rack/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/integration.rb +8 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +50 -2
- data/lib/ddtrace/contrib/rails/integration.rb +1 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +40 -21
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +5 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rake/ext.rb +1 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/rake/integration.rb +2 -1
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
- data/lib/ddtrace/contrib/redis/ext.rb +2 -0
- data/lib/ddtrace/contrib/redis/instrumentation.rb +90 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +3 -67
- data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
- data/lib/ddtrace/contrib/redis/tags.rb +6 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
- data/lib/ddtrace/contrib/registerable.rb +4 -4
- data/lib/ddtrace/contrib/registry.rb +3 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +2 -5
- data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sequel/database.rb +2 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +4 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +4 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
- data/lib/ddtrace/contrib/sinatra/tracer.rb +28 -7
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
- data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
- data/lib/ddtrace/correlation.rb +3 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
- data/lib/ddtrace/diagnostics/health.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
- data/lib/ddtrace/encoding.rb +3 -0
- data/lib/ddtrace/error.rb +78 -8
- data/lib/ddtrace/event.rb +1 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +9 -2
- data/lib/ddtrace/ext/environment.rb +8 -0
- data/lib/ddtrace/ext/errors.rb +1 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -0
- data/lib/ddtrace/ext/git.rb +32 -0
- data/lib/ddtrace/ext/http.rb +2 -1
- data/lib/ddtrace/ext/integration.rb +1 -0
- data/lib/ddtrace/ext/manual_tracing.rb +1 -0
- data/lib/ddtrace/ext/metrics.rb +1 -0
- data/lib/ddtrace/ext/net.rb +1 -0
- data/lib/ddtrace/ext/priority.rb +7 -4
- data/lib/ddtrace/ext/profiling.rb +53 -0
- data/lib/ddtrace/ext/runtime.rb +5 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +9 -0
- data/lib/ddtrace/ext/transport.rb +14 -0
- data/lib/ddtrace/forced_tracing.rb +3 -0
- data/lib/ddtrace/logger.rb +2 -1
- data/lib/ddtrace/metrics.rb +84 -24
- data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
- data/lib/ddtrace/opentelemetry/span.rb +1 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/carrier.rb +1 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
- data/lib/ddtrace/opentracer/propagator.rb +1 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/scope.rb +1 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/span.rb +3 -6
- data/lib/ddtrace/opentracer/span_context.rb +1 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/tracer.rb +1 -0
- data/lib/ddtrace/opentracer.rb +21 -39
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
- data/lib/ddtrace/profiling/buffer.rb +42 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +297 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +46 -0
- data/lib/ddtrace/profiling/event.rb +14 -0
- data/lib/ddtrace/profiling/events/stack.rb +81 -0
- data/lib/ddtrace/profiling/exporter.rb +24 -0
- data/lib/ddtrace/profiling/ext/forking.rb +98 -0
- data/lib/ddtrace/profiling/flush.rb +44 -0
- data/lib/ddtrace/profiling/native_extension.rb +40 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +126 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +103 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +140 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
- data/lib/ddtrace/profiling/pprof/template.rb +119 -0
- data/lib/ddtrace/profiling/preload.rb +4 -0
- data/lib/ddtrace/profiling/profiler.rb +31 -0
- data/lib/ddtrace/profiling/recorder.rb +96 -0
- data/lib/ddtrace/profiling/scheduler.rb +150 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +90 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +42 -0
- data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
- data/lib/ddtrace/profiling/transport/client.rb +15 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +94 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/http.rb +111 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
- data/lib/ddtrace/profiling/transport/io.rb +31 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
- data/lib/ddtrace/profiling/transport/request.rb +16 -0
- data/lib/ddtrace/profiling/transport/response.rb +9 -0
- data/lib/ddtrace/profiling.rb +149 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
- data/lib/ddtrace/propagation/http_propagator.rb +18 -2
- data/lib/ddtrace/quantization/hash.rb +1 -0
- data/lib/ddtrace/quantization/http.rb +4 -0
- data/lib/ddtrace/runtime/metrics.rb +35 -14
- data/lib/ddtrace/sampler.rb +20 -9
- data/lib/ddtrace/sampling/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +19 -11
- data/lib/ddtrace/sampling.rb +1 -0
- data/lib/ddtrace/span.rb +27 -14
- data/lib/ddtrace/sync_writer.rb +17 -15
- data/lib/ddtrace/tasks/exec.rb +47 -0
- data/lib/ddtrace/tasks/help.rb +15 -0
- data/lib/ddtrace/tracer.rb +61 -50
- data/lib/ddtrace/transport/http/adapters/net.rb +41 -11
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +26 -16
- data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +1 -0
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/api.rb +1 -0
- data/lib/ddtrace/transport/http/builder.rb +21 -7
- data/lib/ddtrace/transport/http/client.rb +3 -1
- data/lib/ddtrace/transport/http/env.rb +9 -0
- data/lib/ddtrace/transport/http/response.rb +1 -0
- data/lib/ddtrace/transport/http/statistics.rb +3 -2
- data/lib/ddtrace/transport/http/traces.rb +6 -6
- data/lib/ddtrace/transport/http.rb +48 -41
- data/lib/ddtrace/transport/io/client.rb +17 -9
- data/lib/ddtrace/transport/io/response.rb +2 -3
- data/lib/ddtrace/transport/io/traces.rb +10 -1
- data/lib/ddtrace/transport/io.rb +2 -1
- data/lib/ddtrace/transport/parcel.rb +7 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/statistics.rb +1 -0
- data/lib/ddtrace/transport/traces.rb +21 -3
- data/lib/ddtrace/utils/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +53 -0
- data/lib/ddtrace/utils/object_set.rb +40 -0
- data/lib/ddtrace/utils/only_once.rb +41 -0
- data/lib/ddtrace/utils/sequence.rb +18 -0
- data/lib/ddtrace/utils/string_table.rb +46 -0
- data/lib/ddtrace/utils/time.rb +40 -3
- data/lib/ddtrace/utils.rb +23 -12
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +16 -3
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/{loop.rb → interval_loop.rb} +23 -12
- data/lib/ddtrace/workers/polling.rb +14 -6
- data/lib/ddtrace/workers/queue.rb +3 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +33 -8
- data/lib/ddtrace.rb +22 -48
- metadata +182 -405
- data/.circleci/config.yml +0 -548
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
- data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
- data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
- data/.dockerignore +0 -1
- data/.env +0 -26
- data/.github/CODEOWNERS +0 -1
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -38
- data/Appraisals +0 -1121
- data/Gemfile +0 -7
- data/Rakefile +0 -788
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -370
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/monkey.rb +0 -58
- data/lib/ddtrace/runtime/cgroup.rb +0 -44
- data/lib/ddtrace/runtime/class_count.rb +0 -17
- data/lib/ddtrace/runtime/container.rb +0 -73
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -41
- data/lib/ddtrace/runtime/object_space.rb +0 -19
- data/lib/ddtrace/runtime/socket.rb +0 -14
- data/lib/ddtrace/runtime/thread_count.rb +0 -16
- data/tasks/release_gem.rake +0 -28
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/contrib/registry'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
# Registry is a global, declarative repository of all available integrations.
|
|
7
|
+
#
|
|
8
|
+
# Integrations should register themselves with the registry as early as
|
|
9
|
+
# possible as the initial tracer configuration can only activate integrations
|
|
10
|
+
# if they have already been registered.
|
|
11
|
+
#
|
|
12
|
+
# Despite that, integrations *can* be appended to the registry at any point
|
|
13
|
+
# of the program execution. Newly appended integrations can then be
|
|
14
|
+
# activated during tracer reconfiguration.
|
|
15
|
+
#
|
|
16
|
+
# The registry does not depend on runtime configuration and registered integrations
|
|
17
|
+
# must execute correctly after successive configuration changes.
|
|
18
|
+
# The registered integrations themselves can depend on the stateful configuration
|
|
19
|
+
# of the tracer.
|
|
20
|
+
#
|
|
21
|
+
# `Datadog.registry` is a helper accessor to this constant, but it's only available
|
|
22
|
+
# after the tracer has complete initialization. Use `Datadog::Contrib::REGISTRY` instead
|
|
23
|
+
# of `Datadog.registry` when you code might be called during tracer initialization.
|
|
24
|
+
REGISTRY = Registry.new
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
require 'ddtrace/contrib/action_cable/integration'
|
|
29
|
+
require 'ddtrace/contrib/action_mailer/integration'
|
|
30
|
+
require 'ddtrace/contrib/action_pack/integration'
|
|
31
|
+
require 'ddtrace/contrib/action_view/integration'
|
|
32
|
+
require 'ddtrace/contrib/active_model_serializers/integration'
|
|
33
|
+
require 'ddtrace/contrib/active_job/integration'
|
|
34
|
+
require 'ddtrace/contrib/active_record/integration'
|
|
35
|
+
require 'ddtrace/contrib/active_support/integration'
|
|
36
|
+
require 'ddtrace/contrib/aws/integration'
|
|
37
|
+
require 'ddtrace/contrib/concurrent_ruby/integration'
|
|
38
|
+
require 'ddtrace/contrib/dalli/integration'
|
|
39
|
+
require 'ddtrace/contrib/delayed_job/integration'
|
|
40
|
+
require 'ddtrace/contrib/elasticsearch/integration'
|
|
41
|
+
require 'ddtrace/contrib/ethon/integration'
|
|
42
|
+
require 'ddtrace/contrib/excon/integration'
|
|
43
|
+
require 'ddtrace/contrib/faraday/integration'
|
|
44
|
+
require 'ddtrace/contrib/grape/integration'
|
|
45
|
+
require 'ddtrace/contrib/graphql/integration'
|
|
46
|
+
require 'ddtrace/contrib/grpc/integration'
|
|
47
|
+
require 'ddtrace/contrib/http/integration'
|
|
48
|
+
require 'ddtrace/contrib/httpclient/integration'
|
|
49
|
+
require 'ddtrace/contrib/httprb/integration'
|
|
50
|
+
require 'ddtrace/contrib/integration'
|
|
51
|
+
require 'ddtrace/contrib/kafka/integration'
|
|
52
|
+
require 'ddtrace/contrib/lograge/integration'
|
|
53
|
+
require 'ddtrace/contrib/mongodb/integration'
|
|
54
|
+
require 'ddtrace/contrib/mysql2/integration'
|
|
55
|
+
require 'ddtrace/contrib/presto/integration'
|
|
56
|
+
require 'ddtrace/contrib/qless/integration'
|
|
57
|
+
require 'ddtrace/contrib/que/integration'
|
|
58
|
+
require 'ddtrace/contrib/racecar/integration'
|
|
59
|
+
require 'ddtrace/contrib/rack/integration'
|
|
60
|
+
require 'ddtrace/contrib/rails/integration'
|
|
61
|
+
require 'ddtrace/contrib/rake/integration'
|
|
62
|
+
require 'ddtrace/contrib/redis/integration'
|
|
63
|
+
require 'ddtrace/contrib/resque/integration'
|
|
64
|
+
require 'ddtrace/contrib/rest_client/integration'
|
|
65
|
+
require 'ddtrace/contrib/semantic_logger/integration'
|
|
66
|
+
require 'ddtrace/contrib/sequel/integration'
|
|
67
|
+
require 'ddtrace/contrib/shoryuken/integration'
|
|
68
|
+
require 'ddtrace/contrib/sidekiq/integration'
|
|
69
|
+
require 'ddtrace/contrib/sinatra/integration'
|
|
70
|
+
require 'ddtrace/contrib/sneakers/integration'
|
|
71
|
+
require 'ddtrace/contrib/sucker_punch/integration'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'datadog/core/environment/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Core
|
|
6
|
+
module Environment
|
|
7
|
+
# Reads information from Linux cgroups.
|
|
8
|
+
# This information is used to extract information
|
|
9
|
+
# about the current Linux container identity.
|
|
10
|
+
# @see https://man7.org/linux/man-pages/man7/cgroups.7.html
|
|
11
|
+
module Cgroup
|
|
12
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
13
|
+
|
|
14
|
+
LINE_REGEX = /^(\d+):([^:]*):(.+)$/.freeze
|
|
15
|
+
|
|
16
|
+
Descriptor = Struct.new(
|
|
17
|
+
:id,
|
|
18
|
+
:groups,
|
|
19
|
+
:path,
|
|
20
|
+
:controllers
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
module_function
|
|
24
|
+
|
|
25
|
+
def descriptors(process = 'self')
|
|
26
|
+
[].tap do |descriptors|
|
|
27
|
+
begin
|
|
28
|
+
filepath = "/proc/#{process}/cgroup"
|
|
29
|
+
|
|
30
|
+
if File.exist?(filepath)
|
|
31
|
+
File.foreach("/proc/#{process}/cgroup") do |line|
|
|
32
|
+
line = line.strip
|
|
33
|
+
descriptors << parse(line) unless line.empty?
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
rescue StandardError => e
|
|
37
|
+
Datadog.logger.error("Error while parsing cgroup. Cause: #{e.message} Location: #{Array(e.backtrace).first}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def parse(line)
|
|
43
|
+
id, groups, path = line.scan(LINE_REGEX).first
|
|
44
|
+
|
|
45
|
+
Descriptor.new(id, groups, path).tap do |descriptor|
|
|
46
|
+
descriptor.controllers = groups.split(',') unless groups.nil?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Core
|
|
4
|
+
module Environment
|
|
5
|
+
# Retrieves number of classes from runtime
|
|
6
|
+
module ClassCount
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
def value
|
|
10
|
+
::ObjectSpace.count_objects[:T_CLASS]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def available?
|
|
14
|
+
::ObjectSpace.respond_to?(:count_objects) \
|
|
15
|
+
&& ::ObjectSpace.count_objects.key?(:T_CLASS)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'datadog/core/environment/cgroup'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Core
|
|
6
|
+
module Environment
|
|
7
|
+
# For container environments
|
|
8
|
+
module Container
|
|
9
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
10
|
+
|
|
11
|
+
UUID_PATTERN = '[0-9a-f]{8}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{12}'.freeze
|
|
12
|
+
CONTAINER_PATTERN = '[0-9a-f]{64}'.freeze
|
|
13
|
+
|
|
14
|
+
PLATFORM_REGEX = /(?<platform>.*?)(?:.slice)?$/.freeze
|
|
15
|
+
POD_REGEX = /(?<pod>(pod)?#{UUID_PATTERN})(?:.slice)?$/.freeze
|
|
16
|
+
CONTAINER_REGEX = /(?<container>#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)?$/.freeze
|
|
17
|
+
FARGATE_14_CONTAINER_REGEX = /(?<container>[0-9a-f]{32}-[0-9]{1,10})/.freeze
|
|
18
|
+
|
|
19
|
+
Descriptor = Struct.new(
|
|
20
|
+
:platform,
|
|
21
|
+
:container_id,
|
|
22
|
+
:task_uid
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
module_function
|
|
26
|
+
|
|
27
|
+
def platform
|
|
28
|
+
descriptor.platform
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def container_id
|
|
32
|
+
descriptor.container_id
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def task_uid
|
|
36
|
+
descriptor.task_uid
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def descriptor
|
|
40
|
+
@descriptor ||= Descriptor.new.tap do |descriptor|
|
|
41
|
+
begin
|
|
42
|
+
Cgroup.descriptors.each do |cgroup_descriptor|
|
|
43
|
+
# Parse container data from cgroup descriptor
|
|
44
|
+
path = cgroup_descriptor.path
|
|
45
|
+
next if path.nil?
|
|
46
|
+
|
|
47
|
+
# Split path into parts
|
|
48
|
+
parts = path.split('/')
|
|
49
|
+
parts.shift # Remove leading empty part
|
|
50
|
+
|
|
51
|
+
# Read info from path
|
|
52
|
+
next if parts.empty?
|
|
53
|
+
|
|
54
|
+
platform = parts[0][PLATFORM_REGEX, :platform]
|
|
55
|
+
container_id, task_uid = nil
|
|
56
|
+
|
|
57
|
+
case parts.length
|
|
58
|
+
when 0..1
|
|
59
|
+
next
|
|
60
|
+
when 2
|
|
61
|
+
container_id = parts[-1][CONTAINER_REGEX, :container] \
|
|
62
|
+
|| parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
|
|
63
|
+
else
|
|
64
|
+
if (container_id = parts[-1][CONTAINER_REGEX, :container])
|
|
65
|
+
task_uid = parts[-2][POD_REGEX, :pod] || parts[1][POD_REGEX, :pod]
|
|
66
|
+
else
|
|
67
|
+
container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# If container ID wasn't found, ignore.
|
|
72
|
+
# Path might describe a non-container environment.
|
|
73
|
+
next if container_id.nil?
|
|
74
|
+
|
|
75
|
+
descriptor.platform = platform
|
|
76
|
+
descriptor.container_id = container_id
|
|
77
|
+
descriptor.task_uid = task_uid
|
|
78
|
+
|
|
79
|
+
break
|
|
80
|
+
end
|
|
81
|
+
rescue StandardError => e
|
|
82
|
+
Datadog.logger.error(
|
|
83
|
+
"Error while parsing container info. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/version'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Core
|
|
6
|
+
module Environment
|
|
7
|
+
module Ext
|
|
8
|
+
# Identity
|
|
9
|
+
LANG = 'ruby'.freeze
|
|
10
|
+
LANG_ENGINE = RUBY_ENGINE
|
|
11
|
+
LANG_INTERPRETER = "#{RUBY_ENGINE}-#{RUBY_PLATFORM}".freeze
|
|
12
|
+
LANG_PLATFORM = RUBY_PLATFORM
|
|
13
|
+
LANG_VERSION = RUBY_VERSION
|
|
14
|
+
RUBY_ENGINE = ::RUBY_ENGINE # e.g. 'ruby', 'jruby', 'truffleruby'
|
|
15
|
+
TRACER_VERSION = Datadog::VERSION::STRING
|
|
16
|
+
|
|
17
|
+
# e.g for CRuby '3.0.1', for JRuby '9.2.19.0', for TruffleRuby '21.1.0'
|
|
18
|
+
ENGINE_VERSION = if defined?(RUBY_ENGINE_VERSION)
|
|
19
|
+
RUBY_ENGINE_VERSION
|
|
20
|
+
else
|
|
21
|
+
# CRuby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
|
22
|
+
RUBY_VERSION
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Core
|
|
4
|
+
module Environment
|
|
5
|
+
# Retrieves garbage collection statistics
|
|
6
|
+
module GC
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
def stat
|
|
10
|
+
::GC.stat
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def available?
|
|
14
|
+
defined?(::GC) && ::GC.respond_to?(:stat)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
require 'securerandom'
|
|
3
|
+
require 'datadog/core/environment/ext'
|
|
4
|
+
require 'ddtrace/utils/forking'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Core
|
|
8
|
+
module Environment
|
|
9
|
+
# For runtime identity
|
|
10
|
+
module Identity
|
|
11
|
+
extend Datadog::Utils::Forking
|
|
12
|
+
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
# Retrieves number of classes from runtime
|
|
16
|
+
def id
|
|
17
|
+
@id ||= SecureRandom.uuid
|
|
18
|
+
|
|
19
|
+
# Check if runtime has changed, e.g. forked.
|
|
20
|
+
after_fork! { @id = SecureRandom.uuid }
|
|
21
|
+
|
|
22
|
+
@id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def lang
|
|
26
|
+
Core::Environment::Ext::LANG
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def lang_engine
|
|
30
|
+
Core::Environment::Ext::LANG_ENGINE
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def lang_interpreter
|
|
34
|
+
Core::Environment::Ext::LANG_INTERPRETER
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def lang_platform
|
|
38
|
+
Core::Environment::Ext::LANG_PLATFORM
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def lang_version
|
|
42
|
+
Core::Environment::Ext::LANG_VERSION
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def tracer_version
|
|
46
|
+
Core::Environment::Ext::TRACER_VERSION
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Core
|
|
4
|
+
module Environment
|
|
5
|
+
# Retrieves number of threads from runtime
|
|
6
|
+
module ThreadCount
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
def value
|
|
10
|
+
Thread.list.count
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def available?
|
|
14
|
+
Thread.respond_to?(:list)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
module Datadog
|
|
3
|
+
module Core
|
|
4
|
+
# Namespace for handling application environment
|
|
5
|
+
module Environment
|
|
6
|
+
# Defines helper methods for environment
|
|
7
|
+
module VariableHelpers
|
|
8
|
+
extend self
|
|
9
|
+
|
|
10
|
+
def env_to_bool(var, default = nil)
|
|
11
|
+
var = decode_array(var)
|
|
12
|
+
var && ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def env_to_int(var, default = nil)
|
|
16
|
+
var = decode_array(var)
|
|
17
|
+
var && ENV.key?(var) ? ENV[var].to_i : default
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def env_to_float(var, default = nil)
|
|
21
|
+
var = decode_array(var)
|
|
22
|
+
var && ENV.key?(var) ? ENV[var].to_f : default
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def env_to_list(var, default = [])
|
|
26
|
+
var = decode_array(var)
|
|
27
|
+
if var && ENV.key?(var)
|
|
28
|
+
ENV[var].split(',').map(&:strip)
|
|
29
|
+
else
|
|
30
|
+
default
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def decode_array(var)
|
|
37
|
+
var.is_a?(Array) ? var.find { |env_var| ENV.key?(env_var) } : var
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Core
|
|
4
|
+
module Environment
|
|
5
|
+
# Reports Ruby VM cache performance statistics.
|
|
6
|
+
# This currently encompasses cache invalidation counters and is CRuby-specific.
|
|
7
|
+
#
|
|
8
|
+
# JRuby emulates some CRuby global cache statistics, but they are synthetic and don't
|
|
9
|
+
# provide actionable performance information in the same way CRuby does.
|
|
10
|
+
# @see https://github.com/jruby/jruby/issues/4384#issuecomment-267069314
|
|
11
|
+
#
|
|
12
|
+
# TruffleRuby does not have a global runtime cache invalidation cache.
|
|
13
|
+
# @see http://archive.today/2021.09.10-205702/https://medium.com/graalvm/precise-method-and-constant-invalidation-in-truffleruby-4dd56c6bac1a
|
|
14
|
+
module VMCache
|
|
15
|
+
module_function
|
|
16
|
+
|
|
17
|
+
# Global constant cache "generation" counter.
|
|
18
|
+
#
|
|
19
|
+
# Whenever a constant creation busts the global constant cache
|
|
20
|
+
# this value is incremented. This has a measurable performance impact
|
|
21
|
+
# and thus show be avoided after application warm up.
|
|
22
|
+
def global_constant_state
|
|
23
|
+
::RubyVM.stat[:global_constant_state]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Global method cache "generation" counter.
|
|
27
|
+
#
|
|
28
|
+
# Whenever a method creation busts the global method cache
|
|
29
|
+
# this value is incremented. This has a measurable performance impact
|
|
30
|
+
# and thus show be avoided after application warm up.
|
|
31
|
+
#
|
|
32
|
+
# Since Ruby 3.0, the method class is kept on a per-class basis,
|
|
33
|
+
# largely mitigating global method cache busting. `global_method_state`
|
|
34
|
+
# is thus not available since Ruby 3.0.
|
|
35
|
+
# @see https://bugs.ruby-lang.org/issues/16614
|
|
36
|
+
def global_method_state
|
|
37
|
+
::RubyVM.stat[:global_method_state]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def available?
|
|
41
|
+
defined?(::RubyVM) && ::RubyVM.respond_to?(:stat)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/ddtrace/analytics.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/ext/analytics'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
@@ -6,11 +7,13 @@ module Datadog
|
|
|
6
7
|
class << self
|
|
7
8
|
def set_sample_rate(span, sample_rate)
|
|
8
9
|
return if span.nil? || !sample_rate.is_a?(Numeric)
|
|
10
|
+
|
|
9
11
|
span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def set_measured(span, value = true)
|
|
13
15
|
return if span.nil?
|
|
16
|
+
|
|
14
17
|
# rubocop:disable Style/MultipleComparison
|
|
15
18
|
value = value == true || value == 1 ? 1 : 0
|
|
16
19
|
span.set_metric(Datadog::Ext::Analytics::TAG_MEASURED, value)
|
data/lib/ddtrace/buffer.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: true
|
|
2
2
|
require 'ddtrace/diagnostics/health'
|
|
3
|
-
require 'ddtrace/runtime/object_space'
|
|
4
3
|
|
|
5
4
|
# Trace buffer that accumulates traces for a consumer.
|
|
6
5
|
# Consumption can happen from a different thread.
|
|
@@ -15,9 +14,14 @@ module Datadog
|
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
# Add a new ``item`` in the local queue. This method doesn't block the execution
|
|
18
|
-
# even if the buffer is full.
|
|
17
|
+
# even if the buffer is full.
|
|
18
|
+
#
|
|
19
|
+
# When the buffer is full, we try to ensure that we are fairly sampling newly
|
|
20
|
+
# pushed traces by randomly inserting them into the buffer slots. This discards
|
|
21
|
+
# old traces randomly while trying to ensure that recent traces are still captured.
|
|
19
22
|
def push(item)
|
|
20
23
|
return if closed?
|
|
24
|
+
|
|
21
25
|
full? ? replace!(item) : add!(item)
|
|
22
26
|
item
|
|
23
27
|
end
|
|
@@ -64,7 +68,7 @@ module Datadog
|
|
|
64
68
|
|
|
65
69
|
protected
|
|
66
70
|
|
|
67
|
-
# Segment items into two
|
|
71
|
+
# Segment items into two segments: underflow and overflow.
|
|
68
72
|
# Underflow are items that will fit into buffer.
|
|
69
73
|
# Overflow are items that will exceed capacity, after underflow is added.
|
|
70
74
|
# Returns each array, and nil if there is no underflow/overflow.
|
|
@@ -168,17 +172,14 @@ module Datadog
|
|
|
168
172
|
synchronize { super }
|
|
169
173
|
end
|
|
170
174
|
|
|
171
|
-
def synchronize
|
|
172
|
-
@mutex.synchronize
|
|
175
|
+
def synchronize(&block)
|
|
176
|
+
@mutex.synchronize(&block)
|
|
173
177
|
end
|
|
174
178
|
end
|
|
175
179
|
|
|
176
180
|
# Buffer that stores objects, has a maximum size, and
|
|
177
181
|
# can be safely used concurrently with CRuby.
|
|
178
182
|
#
|
|
179
|
-
# Under extreme concurrency scenarios, this class can exceed
|
|
180
|
-
# its +max_size+ by up to 4%.
|
|
181
|
-
#
|
|
182
183
|
# Because singular +Array+ operations are thread-safe in CRuby,
|
|
183
184
|
# we can implement the trace buffer without an explicit lock,
|
|
184
185
|
# while making the compromise of allowing the buffer to go
|
|
@@ -187,7 +188,6 @@ module Datadog
|
|
|
187
188
|
# On the following scenario:
|
|
188
189
|
# * 4.5 million spans/second.
|
|
189
190
|
# * Pushed into a single CRubyTraceBuffer from 1000 threads.
|
|
190
|
-
# The buffer can exceed its maximum size by no more than 4%.
|
|
191
191
|
#
|
|
192
192
|
# This implementation allocates less memory and is faster
|
|
193
193
|
# than {Datadog::ThreadSafeBuffer}.
|
|
@@ -195,24 +195,38 @@ module Datadog
|
|
|
195
195
|
# @see spec/ddtrace/benchmark/buffer_benchmark_spec.rb Buffer benchmarks
|
|
196
196
|
# @see https://github.com/ruby-concurrency/concurrent-ruby/blob/c1114a0c6891d9634f019f1f9fe58dcae8658964/lib/concurrent-ruby/concurrent/array.rb#L23-L27
|
|
197
197
|
class CRubyBuffer < Buffer
|
|
198
|
+
# A very large number to allow us to effectively
|
|
199
|
+
# drop all items when invoking `slice!(i, FIXNUM_MAX)`.
|
|
200
|
+
FIXNUM_MAX = (1 << 62) - 1
|
|
201
|
+
|
|
198
202
|
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
|
199
203
|
# even if the buffer is full. In that case, a random trace is discarded.
|
|
200
204
|
def replace!(item)
|
|
201
|
-
#
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
# We
|
|
207
|
-
#
|
|
208
|
-
#
|
|
209
|
-
# performed
|
|
210
|
-
|
|
205
|
+
# Ensure buffer stays within +max_size+ items.
|
|
206
|
+
# This can happen when there's concurrent modification
|
|
207
|
+
# between a call the check in `full?` and the `add!` call in
|
|
208
|
+
# `full? ? replace!(item) : add!(item)`.
|
|
209
|
+
#
|
|
210
|
+
# We can still have `@items.size > @max_size` for a short period of
|
|
211
|
+
# time, but we will always try to correct it here.
|
|
212
|
+
#
|
|
213
|
+
# `slice!` is performed before `delete_at` & `<<` to avoid always
|
|
214
|
+
# removing the item that was just inserted.
|
|
215
|
+
#
|
|
216
|
+
# DEV: `slice!` with two integer arguments is ~10% faster than
|
|
217
|
+
# `slice!` with a {Range} argument.
|
|
218
|
+
@items.slice!(@max_size, FIXNUM_MAX)
|
|
219
|
+
|
|
220
|
+
# We should replace a random trace with the new one
|
|
221
|
+
replace_index = rand(@max_size)
|
|
222
|
+
@items[replace_index] = item
|
|
211
223
|
end
|
|
212
224
|
end
|
|
213
225
|
|
|
214
226
|
# Health metrics for trace buffers.
|
|
215
227
|
module MeasuredBuffer
|
|
228
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
229
|
+
|
|
216
230
|
def initialize(*_)
|
|
217
231
|
super
|
|
218
232
|
|
|
@@ -259,7 +273,7 @@ module Datadog
|
|
|
259
273
|
|
|
260
274
|
@buffer_spans += trace.length
|
|
261
275
|
rescue StandardError => e
|
|
262
|
-
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
276
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
263
277
|
end
|
|
264
278
|
|
|
265
279
|
def measure_drop(trace)
|
|
@@ -267,7 +281,7 @@ module Datadog
|
|
|
267
281
|
|
|
268
282
|
@buffer_spans -= trace.length
|
|
269
283
|
rescue StandardError => e
|
|
270
|
-
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
284
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
271
285
|
end
|
|
272
286
|
|
|
273
287
|
def measure_pop(traces)
|
|
@@ -290,7 +304,7 @@ module Datadog
|
|
|
290
304
|
@buffer_dropped = 0
|
|
291
305
|
@buffer_spans = 0
|
|
292
306
|
rescue StandardError => e
|
|
293
|
-
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
307
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
294
308
|
end
|
|
295
309
|
end
|
|
296
310
|
|
|
@@ -318,7 +332,7 @@ module Datadog
|
|
|
318
332
|
#
|
|
319
333
|
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
|
320
334
|
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
|
321
|
-
TraceBuffer = if Datadog::Ext::
|
|
335
|
+
TraceBuffer = if Datadog::Core::Environment::Ext::RUBY_ENGINE == 'ruby'
|
|
322
336
|
CRubyTraceBuffer
|
|
323
337
|
else
|
|
324
338
|
ThreadSafeTraceBuffer
|
data/lib/ddtrace/chunker.rb
CHANGED