ddtrace 0.41.0 → 0.52.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/.editorconfig +22 -0
- data/.gitignore +7 -1
- data/CHANGELOG.md +1496 -354
- data/CONTRIBUTING.md +3 -7
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +18 -38
- data/docs/DevelopmentGuide.md +55 -2
- data/docs/GettingStarted.md +338 -79
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
- data/lib/datadog/ci.rb +17 -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 +98 -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 +74 -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 +443 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +35 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +77 -0
- data/lib/datadog/contrib.rb +69 -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/ddtrace.rb +22 -48
- 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 +233 -135
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration.rb +132 -24
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +231 -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 +132 -12
- data/lib/ddtrace/context.rb +41 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +17 -5
- 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.rb +1 -0
- 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/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +1 -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.rb +1 -0
- 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/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_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.rb +1 -0
- 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/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.rb +1 -0
- 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/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 +49 -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 +3 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -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 +39 -15
- 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.rb +13 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- 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.rb +1 -0
- 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/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 +5 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +1 -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.rb +1 -0
- 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/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 +11 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +26 -1
- 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 +29 -8
- 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/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +21 -3
- 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 +5 -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 +3 -2
- 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 +1 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +1 -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 +2 -3
- 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 +14 -6
- 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 +20 -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 +1 -0
- data/lib/ddtrace/ext/profiling.rb +56 -0
- data/lib/ddtrace/ext/runtime.rb +2 -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 +3 -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.rb +21 -39
- 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/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/profiling.rb +151 -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 +257 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +38 -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/cpu.rb +67 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +156 -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 +18 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +120 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +90 -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 +117 -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 +134 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +82 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -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.rb +120 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +101 -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/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/io.rb +31 -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/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/propagation/grpc_propagator.rb +18 -4
- 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 +21 -14
- data/lib/ddtrace/sampler.rb +2 -1
- data/lib/ddtrace/sampling.rb +1 -0
- 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 +6 -10
- data/lib/ddtrace/span.rb +44 -19
- 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 +68 -57
- data/lib/ddtrace/transport/http.rb +51 -38
- data/lib/ddtrace/transport/http/adapters/net.rb +28 -8
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -4
- data/lib/ddtrace/transport/http/api.rb +1 -0
- 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/builder.rb +8 -1
- 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/io.rb +2 -1
- 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/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.rb +23 -12
- 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 +34 -2
- 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.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -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/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +15 -2
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/loop.rb +32 -5
- data/lib/ddtrace/workers/polling.rb +13 -5
- 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/writer.rb +33 -8
- metadata +149 -388
- 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 -1071
- data/Gemfile +0 -7
- data/Rakefile +0 -768
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -370
- data/lib/ddtrace/augmentation.rb +0 -13
- 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/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,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
|
data/lib/ddtrace.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# typed: strict
|
|
3
2
|
# During development, we load `ddtrace` by through `ddtrace.gemspec`,
|
|
4
3
|
# which in turn eager loads 'ddtrace/version'.
|
|
5
4
|
#
|
|
@@ -15,64 +14,39 @@ require 'ddtrace/quantization/http'
|
|
|
15
14
|
require 'ddtrace/pipeline'
|
|
16
15
|
require 'ddtrace/configuration'
|
|
17
16
|
require 'ddtrace/patcher'
|
|
18
|
-
require 'ddtrace/augmentation'
|
|
19
17
|
require 'ddtrace/metrics'
|
|
18
|
+
require 'ddtrace/auto_instrument_base'
|
|
19
|
+
require 'ddtrace/profiling'
|
|
20
|
+
|
|
21
|
+
require 'datadog/contrib'
|
|
22
|
+
require 'ddtrace/contrib/auto_instrument'
|
|
23
|
+
require 'ddtrace/contrib/extensions'
|
|
24
|
+
|
|
25
|
+
require 'ddtrace/opentelemetry/extensions'
|
|
20
26
|
|
|
21
27
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
22
28
|
module Datadog
|
|
23
|
-
extend Augmentation
|
|
24
29
|
extend Configuration
|
|
30
|
+
extend AutoInstrumentBase
|
|
25
31
|
|
|
26
|
-
# Load
|
|
27
|
-
require 'ddtrace/contrib/extensions'
|
|
32
|
+
# Load built-in Datadog integrations
|
|
28
33
|
extend Contrib::Extensions
|
|
34
|
+
# Load Contrib auto instrumentation
|
|
35
|
+
extend Contrib::AutoInstrument
|
|
36
|
+
# Load Contrib extension to global Datadog objects
|
|
37
|
+
Configuration::Settings.include Contrib::Extensions::Configuration::Settings
|
|
29
38
|
|
|
30
39
|
# Load and extend OpenTelemetry compatibility by default
|
|
31
|
-
require 'ddtrace/opentelemetry/extensions'
|
|
32
40
|
extend OpenTelemetry::Extensions
|
|
33
41
|
|
|
34
42
|
# Add shutdown hook:
|
|
35
43
|
# Ensures the tracer has an opportunity to flush traces
|
|
36
44
|
# and cleanup before terminating the process.
|
|
37
|
-
at_exit
|
|
45
|
+
at_exit do
|
|
46
|
+
if Interrupt === $! # rubocop:disable Style/SpecialGlobalVars is process terminating due to a ctrl+c or similar?
|
|
47
|
+
Datadog.send(:handle_interrupt_shutdown!)
|
|
48
|
+
else
|
|
49
|
+
Datadog.shutdown!
|
|
50
|
+
end
|
|
51
|
+
end
|
|
38
52
|
end
|
|
39
|
-
|
|
40
|
-
require 'ddtrace/contrib/action_cable/integration'
|
|
41
|
-
require 'ddtrace/contrib/action_pack/integration'
|
|
42
|
-
require 'ddtrace/contrib/action_view/integration'
|
|
43
|
-
require 'ddtrace/contrib/active_model_serializers/integration'
|
|
44
|
-
require 'ddtrace/contrib/active_record/integration'
|
|
45
|
-
require 'ddtrace/contrib/active_support/integration'
|
|
46
|
-
require 'ddtrace/contrib/aws/integration'
|
|
47
|
-
require 'ddtrace/contrib/concurrent_ruby/integration'
|
|
48
|
-
require 'ddtrace/contrib/dalli/integration'
|
|
49
|
-
require 'ddtrace/contrib/delayed_job/integration'
|
|
50
|
-
require 'ddtrace/contrib/elasticsearch/integration'
|
|
51
|
-
require 'ddtrace/contrib/ethon/integration'
|
|
52
|
-
require 'ddtrace/contrib/excon/integration'
|
|
53
|
-
require 'ddtrace/contrib/faraday/integration'
|
|
54
|
-
require 'ddtrace/contrib/grape/integration'
|
|
55
|
-
require 'ddtrace/contrib/graphql/integration'
|
|
56
|
-
require 'ddtrace/contrib/grpc/integration'
|
|
57
|
-
require 'ddtrace/contrib/http/integration'
|
|
58
|
-
require 'ddtrace/contrib/httprb/integration'
|
|
59
|
-
require 'ddtrace/contrib/integration'
|
|
60
|
-
require 'ddtrace/contrib/kafka/integration'
|
|
61
|
-
require 'ddtrace/contrib/presto/integration'
|
|
62
|
-
require 'ddtrace/contrib/que/integration'
|
|
63
|
-
require 'ddtrace/contrib/mysql2/integration'
|
|
64
|
-
require 'ddtrace/contrib/mongodb/integration'
|
|
65
|
-
require 'ddtrace/contrib/racecar/integration'
|
|
66
|
-
require 'ddtrace/contrib/rack/integration'
|
|
67
|
-
require 'ddtrace/contrib/rails/integration'
|
|
68
|
-
require 'ddtrace/contrib/rake/integration'
|
|
69
|
-
require 'ddtrace/contrib/redis/integration'
|
|
70
|
-
require 'ddtrace/contrib/resque/integration'
|
|
71
|
-
require 'ddtrace/contrib/rest_client/integration'
|
|
72
|
-
require 'ddtrace/contrib/sequel/integration'
|
|
73
|
-
require 'ddtrace/contrib/shoryuken/integration'
|
|
74
|
-
require 'ddtrace/contrib/sidekiq/integration'
|
|
75
|
-
require 'ddtrace/contrib/sinatra/integration'
|
|
76
|
-
require 'ddtrace/contrib/sneakers/integration'
|
|
77
|
-
require 'ddtrace/contrib/sucker_punch/integration'
|
|
78
|
-
require 'ddtrace/monkey'
|
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,136 +1,179 @@
|
|
|
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.
|
|
7
6
|
module Datadog
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
15
|
-
@buffer_accepted_lengths = 0
|
|
16
|
-
@buffer_dropped = 0
|
|
17
|
-
@buffer_spans = 0
|
|
7
|
+
# Buffer that stores objects. The buffer has a maximum size and when
|
|
8
|
+
# the buffer is full, a random object is discarded.
|
|
9
|
+
class Buffer
|
|
10
|
+
def initialize(max_size)
|
|
11
|
+
@max_size = max_size
|
|
12
|
+
@items = []
|
|
13
|
+
@closed = false
|
|
18
14
|
end
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
# Add a new ``item`` in the local queue. This method doesn't block the execution
|
|
17
|
+
# even if the buffer is full. In that case, a random item is discarded.
|
|
18
|
+
def push(item)
|
|
19
|
+
return if closed?
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
21
|
+
full? ? replace!(item) : add!(item)
|
|
22
|
+
item
|
|
27
23
|
end
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
# A bulk push alternative to +#push+. Use this method if
|
|
26
|
+
# pushing more than one item for efficiency.
|
|
27
|
+
def concat(items)
|
|
28
|
+
return if closed?
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
# Segment items into underflow and overflow
|
|
31
|
+
underflow, overflow = overflow_segments(items)
|
|
32
|
+
|
|
33
|
+
# Concatenate items do not exceed capacity.
|
|
34
|
+
add_all!(underflow) unless underflow.nil?
|
|
35
|
+
|
|
36
|
+
# Iteratively replace items, to ensure pseudo-random replacement.
|
|
37
|
+
overflow.each { |item| replace!(item) } unless overflow.nil?
|
|
35
38
|
end
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
# Stored items are returned and the local buffer is reset.
|
|
41
|
+
def pop
|
|
42
|
+
drain!
|
|
43
|
+
end
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
# Return the current number of stored traces.
|
|
46
|
+
def length
|
|
47
|
+
@items.length
|
|
48
|
+
end
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
# Return if the buffer is empty.
|
|
51
|
+
def empty?
|
|
52
|
+
@items.empty?
|
|
53
|
+
end
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
@
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
# Closes this buffer, preventing further pushing.
|
|
56
|
+
# Draining is still allowed.
|
|
57
|
+
def close
|
|
58
|
+
@closed = true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def closed?
|
|
62
|
+
@closed
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
protected
|
|
66
|
+
|
|
67
|
+
# Segment items into two distinct segments: underflow and overflow.
|
|
68
|
+
# Underflow are items that will fit into buffer.
|
|
69
|
+
# Overflow are items that will exceed capacity, after underflow is added.
|
|
70
|
+
# Returns each array, and nil if there is no underflow/overflow.
|
|
71
|
+
def overflow_segments(items)
|
|
72
|
+
underflow = nil
|
|
73
|
+
overflow = nil
|
|
74
|
+
|
|
75
|
+
overflow_size = @max_size > 0 ? (@items.length + items.length) - @max_size : 0
|
|
76
|
+
|
|
77
|
+
if overflow_size > 0
|
|
78
|
+
# Items will overflow
|
|
79
|
+
if overflow_size < items.length
|
|
80
|
+
# Partial overflow
|
|
81
|
+
underflow_end_index = items.length - overflow_size - 1
|
|
82
|
+
underflow = items[0..underflow_end_index]
|
|
83
|
+
overflow = items[(underflow_end_index + 1)..-1]
|
|
84
|
+
else
|
|
85
|
+
# Total overflow
|
|
86
|
+
overflow = items
|
|
87
|
+
end
|
|
88
|
+
else
|
|
89
|
+
# Items do not exceed capacity.
|
|
90
|
+
underflow = items
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
[underflow, overflow]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def full?
|
|
97
|
+
@max_size > 0 && @items.length >= @max_size
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def add_all!(items)
|
|
101
|
+
@items.concat(items)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def add!(item)
|
|
105
|
+
@items << item
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def replace!(item)
|
|
109
|
+
# Choose random item to be replaced
|
|
110
|
+
replace_index = rand(@items.length)
|
|
111
|
+
|
|
112
|
+
# Replace random item
|
|
113
|
+
discarded_item = @items[replace_index]
|
|
114
|
+
@items[replace_index] = item
|
|
115
|
+
|
|
116
|
+
# Return discarded item
|
|
117
|
+
discarded_item
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def drain!
|
|
121
|
+
items = @items
|
|
122
|
+
@items = []
|
|
123
|
+
items
|
|
58
124
|
end
|
|
59
125
|
end
|
|
60
126
|
|
|
61
|
-
#
|
|
127
|
+
# Buffer that stores objects, has a maximum size, and
|
|
62
128
|
# can be safely used concurrently on any environment.
|
|
63
129
|
#
|
|
64
130
|
# This implementation uses a {Mutex} around public methods, incurring
|
|
65
|
-
# overhead in order to ensure
|
|
131
|
+
# overhead in order to ensure thread-safety.
|
|
66
132
|
#
|
|
67
133
|
# This is implementation is recommended for non-CRuby environments.
|
|
68
|
-
# If using CRuby, {Datadog::
|
|
69
|
-
class ThreadSafeBuffer <
|
|
134
|
+
# If using CRuby, {Datadog::CRubyBuffer} is a faster implementation with minimal compromise.
|
|
135
|
+
class ThreadSafeBuffer < Buffer
|
|
70
136
|
def initialize(max_size)
|
|
71
|
-
super
|
|
137
|
+
super
|
|
72
138
|
|
|
73
|
-
@
|
|
74
|
-
|
|
75
|
-
@mutex = Mutex.new()
|
|
76
|
-
@traces = []
|
|
77
|
-
@closed = false
|
|
139
|
+
@mutex = Mutex.new
|
|
78
140
|
end
|
|
79
141
|
|
|
80
|
-
# Add a new ``
|
|
81
|
-
# even if the buffer is full. In that case, a random
|
|
82
|
-
def push(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
len = @traces.length
|
|
86
|
-
if len < @max_size || @max_size <= 0
|
|
87
|
-
@traces << trace
|
|
88
|
-
else
|
|
89
|
-
# we should replace a random trace with the new one
|
|
90
|
-
replace_index = rand(len)
|
|
91
|
-
replaced_trace = @traces[replace_index]
|
|
92
|
-
@traces[replace_index] = trace
|
|
93
|
-
measure_drop(replaced_trace)
|
|
94
|
-
end
|
|
142
|
+
# Add a new ``item`` in the local queue. This method doesn't block the execution
|
|
143
|
+
# even if the buffer is full. In that case, a random item is discarded.
|
|
144
|
+
def push(item)
|
|
145
|
+
synchronize { super }
|
|
146
|
+
end
|
|
95
147
|
|
|
96
|
-
|
|
97
|
-
|
|
148
|
+
def concat(items)
|
|
149
|
+
synchronize { super }
|
|
98
150
|
end
|
|
99
151
|
|
|
100
152
|
# Return the current number of stored traces.
|
|
101
153
|
def length
|
|
102
|
-
|
|
103
|
-
return @traces.length
|
|
104
|
-
end
|
|
154
|
+
synchronize { super }
|
|
105
155
|
end
|
|
106
156
|
|
|
107
157
|
# Return if the buffer is empty.
|
|
108
158
|
def empty?
|
|
109
|
-
|
|
110
|
-
return @traces.empty?
|
|
111
|
-
end
|
|
159
|
+
synchronize { super }
|
|
112
160
|
end
|
|
113
161
|
|
|
114
162
|
# Stored traces are returned and the local buffer is reset.
|
|
115
163
|
def pop
|
|
116
|
-
|
|
117
|
-
traces = @traces
|
|
118
|
-
@traces = []
|
|
119
|
-
|
|
120
|
-
measure_pop(traces)
|
|
121
|
-
|
|
122
|
-
return traces
|
|
123
|
-
end
|
|
164
|
+
synchronize { super }
|
|
124
165
|
end
|
|
125
166
|
|
|
126
167
|
def close
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
168
|
+
synchronize { super }
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def synchronize(&block)
|
|
172
|
+
@mutex.synchronize(&block)
|
|
130
173
|
end
|
|
131
174
|
end
|
|
132
175
|
|
|
133
|
-
#
|
|
176
|
+
# Buffer that stores objects, has a maximum size, and
|
|
134
177
|
# can be safely used concurrently with CRuby.
|
|
135
178
|
#
|
|
136
179
|
# Under extreme concurrency scenarios, this class can exceed
|
|
@@ -151,80 +194,135 @@ module Datadog
|
|
|
151
194
|
#
|
|
152
195
|
# @see spec/ddtrace/benchmark/buffer_benchmark_spec.rb Buffer benchmarks
|
|
153
196
|
# @see https://github.com/ruby-concurrency/concurrent-ruby/blob/c1114a0c6891d9634f019f1f9fe58dcae8658964/lib/concurrent-ruby/concurrent/array.rb#L23-L27
|
|
154
|
-
class
|
|
155
|
-
|
|
156
|
-
|
|
197
|
+
class CRubyBuffer < Buffer
|
|
198
|
+
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
|
199
|
+
# even if the buffer is full. In that case, a random trace is discarded.
|
|
200
|
+
def replace!(item)
|
|
201
|
+
# we should replace a random trace with the new one
|
|
202
|
+
replace_index = rand(@items.size)
|
|
203
|
+
replaced_trace = @items.delete_at(replace_index)
|
|
204
|
+
@items << item
|
|
205
|
+
|
|
206
|
+
# We might have deleted an element right when the buffer
|
|
207
|
+
# was drained, thus +replaced_trace+ will be +nil+.
|
|
208
|
+
# In that case, nothing was replaced, and this method
|
|
209
|
+
# performed a simple insertion into the buffer.
|
|
210
|
+
replaced_trace
|
|
211
|
+
end
|
|
212
|
+
end
|
|
157
213
|
|
|
158
|
-
|
|
214
|
+
# Health metrics for trace buffers.
|
|
215
|
+
module MeasuredBuffer
|
|
216
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
159
217
|
|
|
160
|
-
|
|
161
|
-
|
|
218
|
+
def initialize(*_)
|
|
219
|
+
super
|
|
220
|
+
|
|
221
|
+
@buffer_accepted = 0
|
|
222
|
+
@buffer_accepted_lengths = 0
|
|
223
|
+
@buffer_dropped = 0
|
|
224
|
+
@buffer_spans = 0
|
|
162
225
|
end
|
|
163
226
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def push(trace)
|
|
167
|
-
return if @closed
|
|
168
|
-
len = @traces.length
|
|
169
|
-
if len < @max_size || @max_size <= 0
|
|
170
|
-
@traces << trace
|
|
171
|
-
else
|
|
172
|
-
# we should replace a random trace with the new one
|
|
173
|
-
replace_index = rand(len)
|
|
174
|
-
replaced_trace = @traces.delete_at(replace_index)
|
|
175
|
-
@traces << trace
|
|
176
|
-
|
|
177
|
-
# Check if we deleted the element right when the buffer
|
|
178
|
-
# was popped. In that case we didn't actually delete anything,
|
|
179
|
-
# we just inserted into a newly cleared buffer instead.
|
|
180
|
-
measure_drop(replaced_trace) if replaced_trace
|
|
181
|
-
end
|
|
227
|
+
def add!(trace)
|
|
228
|
+
super
|
|
182
229
|
|
|
230
|
+
# Emit health metrics
|
|
183
231
|
measure_accept(trace)
|
|
184
232
|
end
|
|
185
233
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
@traces.length
|
|
189
|
-
end
|
|
234
|
+
def add_all!(traces)
|
|
235
|
+
super
|
|
190
236
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
@traces.empty?
|
|
237
|
+
# Emit health metrics
|
|
238
|
+
traces.each { |trace| measure_accept(trace) }
|
|
194
239
|
end
|
|
195
240
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
traces = @traces.pop(VERY_LARGE_INTEGER)
|
|
241
|
+
def replace!(trace)
|
|
242
|
+
discarded_trace = super
|
|
199
243
|
|
|
200
|
-
|
|
244
|
+
# Emit health metrics
|
|
245
|
+
measure_accept(trace)
|
|
246
|
+
measure_drop(discarded_trace) if discarded_trace
|
|
201
247
|
|
|
248
|
+
discarded_trace
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# Stored traces are returned and the local buffer is reset.
|
|
252
|
+
def drain!
|
|
253
|
+
traces = super
|
|
254
|
+
measure_pop(traces)
|
|
202
255
|
traces
|
|
203
256
|
end
|
|
204
257
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
258
|
+
def measure_accept(trace)
|
|
259
|
+
@buffer_accepted += 1
|
|
260
|
+
@buffer_accepted_lengths += trace.length
|
|
208
261
|
|
|
209
|
-
|
|
210
|
-
|
|
262
|
+
@buffer_spans += trace.length
|
|
263
|
+
rescue StandardError => e
|
|
264
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def measure_drop(trace)
|
|
268
|
+
@buffer_dropped += 1
|
|
269
|
+
|
|
270
|
+
@buffer_spans -= trace.length
|
|
271
|
+
rescue StandardError => e
|
|
272
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def measure_pop(traces)
|
|
276
|
+
# Accepted, cumulative totals
|
|
277
|
+
Datadog.health_metrics.queue_accepted(@buffer_accepted)
|
|
278
|
+
Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths)
|
|
279
|
+
|
|
280
|
+
# Dropped, cumulative totals
|
|
281
|
+
Datadog.health_metrics.queue_dropped(@buffer_dropped)
|
|
282
|
+
# TODO: are we missing a +queue_dropped_lengths+ metric?
|
|
283
|
+
|
|
284
|
+
# Queue gauges, current values
|
|
285
|
+
Datadog.health_metrics.queue_max_length(@max_size)
|
|
286
|
+
Datadog.health_metrics.queue_spans(@buffer_spans)
|
|
287
|
+
Datadog.health_metrics.queue_length(traces.length)
|
|
288
|
+
|
|
289
|
+
# Reset aggregated metrics
|
|
290
|
+
@buffer_accepted = 0
|
|
291
|
+
@buffer_accepted_lengths = 0
|
|
292
|
+
@buffer_dropped = 0
|
|
293
|
+
@buffer_spans = 0
|
|
294
|
+
rescue StandardError => e
|
|
295
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
211
296
|
end
|
|
212
297
|
end
|
|
213
298
|
|
|
214
|
-
#
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
299
|
+
# Trace buffer that stores application traces, has a maximum size, and
|
|
300
|
+
# can be safely used concurrently on any environment.
|
|
301
|
+
#
|
|
302
|
+
# @see {Datadog::ThreadSafeBuffer}
|
|
303
|
+
class ThreadSafeTraceBuffer < ThreadSafeBuffer
|
|
304
|
+
prepend MeasuredBuffer
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
# Trace buffer that stores application traces, has a maximum size, and
|
|
308
|
+
# can be safely used concurrently with CRuby.
|
|
309
|
+
#
|
|
310
|
+
# @see {Datadog::CRubyBuffer}
|
|
311
|
+
class CRubyTraceBuffer < CRubyBuffer
|
|
312
|
+
prepend MeasuredBuffer
|
|
313
|
+
end
|
|
221
314
|
|
|
222
315
|
# Trace buffer that stores application traces. The buffer has a maximum size and when
|
|
223
316
|
# the buffer is full, a random trace is discarded. This class is thread-safe and is used
|
|
224
317
|
# automatically by the ``Tracer`` instance when a ``Span`` is finished.
|
|
225
318
|
#
|
|
319
|
+
# We choose the default TraceBuffer implementation for current platform dynamically here.
|
|
320
|
+
#
|
|
226
321
|
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
|
227
322
|
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
|
228
|
-
|
|
229
|
-
|
|
323
|
+
TraceBuffer = if Datadog::Core::Environment::Ext::RUBY_ENGINE == 'ruby'
|
|
324
|
+
CRubyTraceBuffer
|
|
325
|
+
else
|
|
326
|
+
ThreadSafeTraceBuffer
|
|
327
|
+
end
|
|
230
328
|
end
|