ddtrace 0.42.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 +1474 -362
- data/CONTRIBUTING.md +2 -6
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +18 -39
- data/docs/DevelopmentGuide.md +45 -2
- data/docs/GettingStarted.md +335 -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 +10 -8
- 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 +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.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 +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 +3 -1
- 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 +1 -0
- 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 +22 -12
- 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 +2 -1
- 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 +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 +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 +60 -49
- 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 -402
- 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.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,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.
|
|
@@ -18,6 +17,7 @@ module Datadog
|
|
|
18
17
|
# even if the buffer is full. In that case, a random item is discarded.
|
|
19
18
|
def push(item)
|
|
20
19
|
return if closed?
|
|
20
|
+
|
|
21
21
|
full? ? replace!(item) : add!(item)
|
|
22
22
|
item
|
|
23
23
|
end
|
|
@@ -168,8 +168,8 @@ module Datadog
|
|
|
168
168
|
synchronize { super }
|
|
169
169
|
end
|
|
170
170
|
|
|
171
|
-
def synchronize
|
|
172
|
-
@mutex.synchronize
|
|
171
|
+
def synchronize(&block)
|
|
172
|
+
@mutex.synchronize(&block)
|
|
173
173
|
end
|
|
174
174
|
end
|
|
175
175
|
|
|
@@ -213,6 +213,8 @@ module Datadog
|
|
|
213
213
|
|
|
214
214
|
# Health metrics for trace buffers.
|
|
215
215
|
module MeasuredBuffer
|
|
216
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
217
|
+
|
|
216
218
|
def initialize(*_)
|
|
217
219
|
super
|
|
218
220
|
|
|
@@ -259,7 +261,7 @@ module Datadog
|
|
|
259
261
|
|
|
260
262
|
@buffer_spans += trace.length
|
|
261
263
|
rescue StandardError => e
|
|
262
|
-
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
264
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
263
265
|
end
|
|
264
266
|
|
|
265
267
|
def measure_drop(trace)
|
|
@@ -267,7 +269,7 @@ module Datadog
|
|
|
267
269
|
|
|
268
270
|
@buffer_spans -= trace.length
|
|
269
271
|
rescue StandardError => e
|
|
270
|
-
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
272
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
271
273
|
end
|
|
272
274
|
|
|
273
275
|
def measure_pop(traces)
|
|
@@ -290,7 +292,7 @@ module Datadog
|
|
|
290
292
|
@buffer_dropped = 0
|
|
291
293
|
@buffer_spans = 0
|
|
292
294
|
rescue StandardError => e
|
|
293
|
-
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
295
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
294
296
|
end
|
|
295
297
|
end
|
|
296
298
|
|
|
@@ -318,7 +320,7 @@ module Datadog
|
|
|
318
320
|
#
|
|
319
321
|
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
|
320
322
|
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
|
321
|
-
TraceBuffer = if Datadog::Ext::
|
|
323
|
+
TraceBuffer = if Datadog::Core::Environment::Ext::RUBY_ENGINE == 'ruby'
|
|
322
324
|
CRubyTraceBuffer
|
|
323
325
|
else
|
|
324
326
|
ThreadSafeTraceBuffer
|
data/lib/ddtrace/chunker.rb
CHANGED
|
@@ -1,14 +1,42 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
|
-
|
|
3
3
|
require 'ddtrace/configuration/pin_setup'
|
|
4
4
|
require 'ddtrace/configuration/settings'
|
|
5
5
|
require 'ddtrace/configuration/components'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Configuration provides a unique access point for configurations
|
|
9
|
-
module Configuration
|
|
9
|
+
module Configuration # rubocop:disable Metrics/ModuleLength
|
|
10
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
10
11
|
extend Forwardable
|
|
11
12
|
|
|
13
|
+
# Used to ensure that @components initialization/reconfiguration is performed one-at-a-time, by a single thread.
|
|
14
|
+
#
|
|
15
|
+
# This is important because components can end up being accessed from multiple application threads (for instance on
|
|
16
|
+
# a threaded webserver), and we don't want their initialization to clash (for instance, starting two profilers...).
|
|
17
|
+
#
|
|
18
|
+
# Note that a Mutex **IS NOT** reentrant: the same thread cannot grab the same Mutex more than once.
|
|
19
|
+
# This means below we are careful not to nest calls to methods that would trigger initialization and grab the lock.
|
|
20
|
+
#
|
|
21
|
+
# Every method that directly or indirectly mutates @components should be holding the lock (through
|
|
22
|
+
# #safely_synchronize) while doing so.
|
|
23
|
+
COMPONENTS_WRITE_LOCK = Mutex.new
|
|
24
|
+
private_constant :COMPONENTS_WRITE_LOCK
|
|
25
|
+
|
|
26
|
+
# We use a separate lock when reading the @components, so that they continue to be accessible during reconfiguration.
|
|
27
|
+
# This was needed because we ran into several issues where we still needed to read the old
|
|
28
|
+
# components while the COMPONENTS_WRITE_LOCK was being held (see https://github.com/DataDog/dd-trace-rb/pull/1387
|
|
29
|
+
# and https://github.com/DataDog/dd-trace-rb/pull/1373#issuecomment-799593022 ).
|
|
30
|
+
#
|
|
31
|
+
# Technically on MRI we could get away without this lock, but on non-MRI Rubies, we may run into issues because
|
|
32
|
+
# we fall into the "UnsafeDCLFactory" case of https://shipilev.net/blog/2014/safe-public-construction/ .
|
|
33
|
+
# Specifically, on JRuby reads from the @components do NOT have volatile semantics, and on TruffleRuby they do
|
|
34
|
+
# BUT just as an implementation detail, see https://github.com/jruby/jruby/wiki/Concurrency-in-jruby#volatility and
|
|
35
|
+
# https://github.com/DataDog/dd-trace-rb/pull/1329#issuecomment-776750377 .
|
|
36
|
+
# Concurrency is hard.
|
|
37
|
+
COMPONENTS_READ_LOCK = Mutex.new
|
|
38
|
+
private_constant :COMPONENTS_READ_LOCK
|
|
39
|
+
|
|
12
40
|
attr_writer :configuration
|
|
13
41
|
|
|
14
42
|
def configuration
|
|
@@ -19,13 +47,15 @@ module Datadog
|
|
|
19
47
|
if target.is_a?(Settings)
|
|
20
48
|
yield(target) if block_given?
|
|
21
49
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
50
|
+
safely_synchronize do |write_components|
|
|
51
|
+
write_components.call(
|
|
52
|
+
if components?
|
|
53
|
+
replace_components!(target, @components)
|
|
54
|
+
else
|
|
55
|
+
build_components(target)
|
|
56
|
+
end
|
|
57
|
+
)
|
|
58
|
+
end
|
|
29
59
|
|
|
30
60
|
target
|
|
31
61
|
else
|
|
@@ -36,40 +66,91 @@ module Datadog
|
|
|
36
66
|
def_delegators \
|
|
37
67
|
:components,
|
|
38
68
|
:health_metrics,
|
|
69
|
+
:profiler,
|
|
39
70
|
:runtime_metrics,
|
|
40
71
|
:tracer
|
|
41
72
|
|
|
42
73
|
def logger
|
|
43
|
-
|
|
74
|
+
# avoid initializing components if they didn't already exist
|
|
75
|
+
current_components = components(allow_initialization: false)
|
|
76
|
+
|
|
77
|
+
if current_components
|
|
44
78
|
@temp_logger = nil
|
|
45
|
-
|
|
79
|
+
current_components.logger
|
|
46
80
|
else
|
|
47
|
-
|
|
48
|
-
# This prevents recursive loops while initializing.
|
|
49
|
-
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
|
50
|
-
@temp_logger ||= begin
|
|
51
|
-
logger = configuration.logger.instance || Datadog::Logger.new(STDOUT)
|
|
52
|
-
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
53
|
-
logger
|
|
54
|
-
end
|
|
81
|
+
logger_without_components
|
|
55
82
|
end
|
|
56
83
|
end
|
|
57
84
|
|
|
85
|
+
# Gracefully shuts down all components.
|
|
86
|
+
#
|
|
87
|
+
# Components will still respond to method calls as usual,
|
|
88
|
+
# but might not internally perform their work after shutdown.
|
|
89
|
+
#
|
|
90
|
+
# This avoids errors being raised across the host application
|
|
91
|
+
# during shutdown, while allowing for graceful decommission of resources.
|
|
92
|
+
#
|
|
93
|
+
# Components won't be automatically reinitialized after a shutdown.
|
|
58
94
|
def shutdown!
|
|
59
|
-
|
|
60
|
-
components.shutdown!
|
|
61
|
-
@components = nil
|
|
95
|
+
safely_synchronize do
|
|
96
|
+
@components.shutdown! if components?
|
|
62
97
|
end
|
|
63
98
|
end
|
|
64
99
|
|
|
65
100
|
protected
|
|
66
101
|
|
|
67
|
-
def components
|
|
68
|
-
@components
|
|
102
|
+
def components(allow_initialization: true)
|
|
103
|
+
current_components = COMPONENTS_READ_LOCK.synchronize { defined?(@components) && @components }
|
|
104
|
+
return current_components if current_components || !allow_initialization
|
|
105
|
+
|
|
106
|
+
safely_synchronize do |write_components|
|
|
107
|
+
(defined?(@components) && @components) || write_components.call(build_components(configuration))
|
|
108
|
+
end
|
|
69
109
|
end
|
|
70
110
|
|
|
71
111
|
private
|
|
72
112
|
|
|
113
|
+
# Gracefully shuts down the tracer and disposes of component references,
|
|
114
|
+
# allowing execution to start anew.
|
|
115
|
+
#
|
|
116
|
+
# In contrast with +#shutdown!+, components will be automatically
|
|
117
|
+
# reinitialized after a reset.
|
|
118
|
+
#
|
|
119
|
+
# Used internally to ensure a clean environment between test runs.
|
|
120
|
+
def reset!
|
|
121
|
+
safely_synchronize do |write_components|
|
|
122
|
+
@components.shutdown! if components?
|
|
123
|
+
write_components.call(nil)
|
|
124
|
+
configuration.reset!
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def safely_synchronize
|
|
129
|
+
# Writes to @components should only happen through this proc. Because this proc is only accessible to callers of
|
|
130
|
+
# safely_synchronize, this forces all writers to go through this method.
|
|
131
|
+
write_components = proc do |new_value|
|
|
132
|
+
COMPONENTS_READ_LOCK.synchronize { @components = new_value }
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
COMPONENTS_WRITE_LOCK.synchronize do
|
|
136
|
+
begin
|
|
137
|
+
yield write_components
|
|
138
|
+
rescue ThreadError => e
|
|
139
|
+
logger_without_components.error(
|
|
140
|
+
'Detected deadlock during ddtrace initialization. ' \
|
|
141
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
|
142
|
+
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
|
143
|
+
)
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def components?
|
|
150
|
+
# This does not need to grab the COMPONENTS_READ_LOCK because it's not returning the components
|
|
151
|
+
(defined?(@components) && @components) != nil
|
|
152
|
+
end
|
|
153
|
+
|
|
73
154
|
def build_components(settings)
|
|
74
155
|
components = Components.new(settings)
|
|
75
156
|
components.startup!(settings)
|
|
@@ -83,5 +164,32 @@ module Datadog
|
|
|
83
164
|
components.startup!(settings)
|
|
84
165
|
components
|
|
85
166
|
end
|
|
167
|
+
|
|
168
|
+
def logger_without_components
|
|
169
|
+
# Use default logger without initializing components.
|
|
170
|
+
# This enables logging during initialization, otherwise we'd run into deadlocks.
|
|
171
|
+
@temp_logger ||= begin
|
|
172
|
+
logger = configuration.logger.instance || Datadog::Logger.new($stdout)
|
|
173
|
+
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
174
|
+
logger
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Called from our at_exit hook whenever there was a pending Interrupt exception (e.g. typically due to ctrl+c)
|
|
179
|
+
# to print a nice message whenever we're taking a bit longer than usual to finish the process.
|
|
180
|
+
def handle_interrupt_shutdown!
|
|
181
|
+
logger = Datadog.logger
|
|
182
|
+
shutdown_thread = Thread.new { shutdown! }
|
|
183
|
+
print_message_treshold_seconds = 0.2
|
|
184
|
+
|
|
185
|
+
slow_shutdown = shutdown_thread.join(print_message_treshold_seconds).nil?
|
|
186
|
+
|
|
187
|
+
if slow_shutdown
|
|
188
|
+
logger.info 'Reporting remaining data... Press ctrl+c to exit immediately.'
|
|
189
|
+
shutdown_thread.join
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
nil
|
|
193
|
+
end
|
|
86
194
|
end
|
|
87
195
|
end
|