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,33 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
|
4
|
+
# See the file README.txt included with the distribution for
|
|
5
|
+
# software license details.
|
|
6
|
+
#++
|
|
7
|
+
|
|
8
|
+
require 'net/http'
|
|
9
|
+
require 'stringio'
|
|
10
|
+
require 'cgi'
|
|
11
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/parts'
|
|
12
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
|
|
13
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/multipartable'
|
|
14
|
+
|
|
15
|
+
module Datadog
|
|
16
|
+
module Vendor
|
|
17
|
+
module Net
|
|
18
|
+
class HTTP
|
|
19
|
+
class Put
|
|
20
|
+
class Multipart < ::Net::HTTP::Put
|
|
21
|
+
include ::Datadog::Vendor::Multipart::Post::Multipartable
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class Post
|
|
26
|
+
class Multipart < ::Net::HTTP::Post
|
|
27
|
+
include ::Datadog::Vendor::Multipart::Post::Multipartable
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/ddtrace/version.rb
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module VERSION
|
|
3
4
|
MAJOR = 0
|
|
4
|
-
MINOR =
|
|
5
|
+
MINOR = 52
|
|
5
6
|
PATCH = 0
|
|
6
7
|
PRE = nil
|
|
7
8
|
|
|
8
9
|
STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
|
|
9
10
|
|
|
10
|
-
MINIMUM_RUBY_VERSION = '2.
|
|
11
|
+
MINIMUM_RUBY_VERSION = '2.1.0'.freeze
|
|
12
|
+
|
|
13
|
+
# Ruby 3.2 is not supported: Ruby 3.x support as implemented using *args
|
|
14
|
+
# needs ruby2_keywords to continue working, yet the scheduled removal of
|
|
15
|
+
# ruby2_keywords when Ruby 2.6 is EOL'd (i.e on Ruby 3.2 release) would
|
|
16
|
+
# leave the code with no option, other than to move to *args, **kwargs.
|
|
17
|
+
#
|
|
18
|
+
# See https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
|
|
19
|
+
#
|
|
20
|
+
# This constraint can only be removed when the dependency on ruby2_keywords is
|
|
21
|
+
# dropped. An allowance is nonetheless made to test prerelease versions.
|
|
22
|
+
# The version constraint may be bumped if the removal is postponed.
|
|
23
|
+
MAXIMUM_RUBY_VERSION = '3.2'.freeze
|
|
11
24
|
end
|
|
12
25
|
end
|
data/lib/ddtrace/worker.rb
CHANGED
data/lib/ddtrace/workers.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'time'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/workers/trace_writer'
|
|
@@ -58,7 +59,7 @@ module Datadog
|
|
|
58
59
|
# TODO[manu]: findout the reason and reschedule the send if it's not
|
|
59
60
|
# a fatal exception
|
|
60
61
|
Datadog.logger.error(
|
|
61
|
-
"Error during traces flush: dropped #{traces.length} items. Cause: #{e} Location: #{e.backtrace.first}"
|
|
62
|
+
"Error during traces flush: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
62
63
|
)
|
|
63
64
|
end
|
|
64
65
|
end
|
|
@@ -67,9 +68,13 @@ module Datadog
|
|
|
67
68
|
def start
|
|
68
69
|
@mutex.synchronize do
|
|
69
70
|
return if @run
|
|
71
|
+
|
|
70
72
|
@run = true
|
|
71
|
-
Datadog.logger.debug
|
|
73
|
+
Datadog.logger.debug { "Starting thread for: #{self}" }
|
|
72
74
|
@worker = Thread.new { perform }
|
|
75
|
+
@worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
76
|
+
|
|
77
|
+
nil
|
|
73
78
|
end
|
|
74
79
|
end
|
|
75
80
|
|
|
@@ -108,6 +113,7 @@ module Datadog
|
|
|
108
113
|
|
|
109
114
|
@mutex.synchronize do
|
|
110
115
|
return if !@run && @trace_buffer.empty?
|
|
116
|
+
|
|
111
117
|
@shutdown.wait(@mutex, @back_off) if @run # do not wait when shutting down
|
|
112
118
|
end
|
|
113
119
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/logger'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
@@ -12,13 +13,13 @@ module Datadog
|
|
|
12
13
|
SHUTDOWN_TIMEOUT = 1
|
|
13
14
|
|
|
14
15
|
def self.included(base)
|
|
15
|
-
base.
|
|
16
|
+
base.prepend(PrependedMethods)
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
# Methods that must be prepended
|
|
19
20
|
module PrependedMethods
|
|
20
21
|
def perform(*args)
|
|
21
|
-
|
|
22
|
+
start_async { self.result = super(*args) } unless started?
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
|
|
@@ -31,18 +32,22 @@ module Datadog
|
|
|
31
32
|
|
|
32
33
|
def join(timeout = nil)
|
|
33
34
|
return true unless running?
|
|
35
|
+
|
|
34
36
|
!worker.join(timeout).nil?
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
def terminate
|
|
38
40
|
return false unless running?
|
|
41
|
+
|
|
39
42
|
@run_async = false
|
|
43
|
+
Datadog.logger.debug { "Forcibly terminating worker thread for: #{self}" }
|
|
40
44
|
worker.terminate
|
|
41
45
|
true
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
def run_async?
|
|
45
49
|
return false unless instance_variable_defined?(:@run_async)
|
|
50
|
+
|
|
46
51
|
@run_async == true
|
|
47
52
|
end
|
|
48
53
|
|
|
@@ -56,6 +61,7 @@ module Datadog
|
|
|
56
61
|
|
|
57
62
|
def error?
|
|
58
63
|
return false unless instance_variable_defined?(:@error)
|
|
64
|
+
|
|
59
65
|
!@error.nil?
|
|
60
66
|
end
|
|
61
67
|
|
|
@@ -101,9 +107,10 @@ module Datadog
|
|
|
101
107
|
@worker ||= nil
|
|
102
108
|
end
|
|
103
109
|
|
|
104
|
-
def
|
|
110
|
+
def start_async(&block)
|
|
105
111
|
mutex.synchronize do
|
|
106
112
|
return if running?
|
|
113
|
+
|
|
107
114
|
if forked?
|
|
108
115
|
case fork_policy
|
|
109
116
|
when FORK_POLICY_STOP
|
|
@@ -121,7 +128,7 @@ module Datadog
|
|
|
121
128
|
@run_async = true
|
|
122
129
|
@pid = Process.pid
|
|
123
130
|
@error = nil
|
|
124
|
-
Datadog.logger.debug
|
|
131
|
+
Datadog.logger.debug { "Starting thread for: #{self}" }
|
|
125
132
|
|
|
126
133
|
@worker = ::Thread.new do
|
|
127
134
|
begin
|
|
@@ -129,10 +136,13 @@ module Datadog
|
|
|
129
136
|
# rubocop:disable Lint/RescueException
|
|
130
137
|
rescue Exception => e
|
|
131
138
|
@error = e
|
|
132
|
-
Datadog.logger.debug("Worker thread error. Cause #{e.message} Location: #{e.backtrace.first}")
|
|
139
|
+
Datadog.logger.debug("Worker thread error. Cause #{e.message} Location: #{Array(e.backtrace).first}")
|
|
133
140
|
raise
|
|
134
141
|
end
|
|
135
142
|
end
|
|
143
|
+
@worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
144
|
+
|
|
145
|
+
nil
|
|
136
146
|
end
|
|
137
147
|
|
|
138
148
|
def stop_fork
|
data/lib/ddtrace/workers/loop.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
module Datadog
|
|
2
3
|
module Workers
|
|
3
4
|
# Adds looping behavior to workers, with a sleep
|
|
@@ -8,7 +9,7 @@ module Datadog
|
|
|
8
9
|
BASE_INTERVAL = 1
|
|
9
10
|
|
|
10
11
|
def self.included(base)
|
|
11
|
-
base.
|
|
12
|
+
base.prepend(PrependedMethods)
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Methods that must be prepended
|
|
@@ -21,6 +22,7 @@ module Datadog
|
|
|
21
22
|
def stop_loop
|
|
22
23
|
mutex.synchronize do
|
|
23
24
|
return false unless run_loop?
|
|
25
|
+
|
|
24
26
|
@run_loop = false
|
|
25
27
|
shutdown.signal
|
|
26
28
|
end
|
|
@@ -34,6 +36,7 @@ module Datadog
|
|
|
34
36
|
|
|
35
37
|
def run_loop?
|
|
36
38
|
return false unless instance_variable_defined?(:@run_loop)
|
|
39
|
+
|
|
37
40
|
@run_loop == true
|
|
38
41
|
end
|
|
39
42
|
|
|
@@ -53,12 +56,29 @@ module Datadog
|
|
|
53
56
|
@loop_wait_time ||= loop_base_interval
|
|
54
57
|
end
|
|
55
58
|
|
|
59
|
+
def loop_wait_time=(value)
|
|
60
|
+
@loop_wait_time = value
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def reset_loop_wait_time
|
|
64
|
+
self.loop_wait_time = loop_base_interval
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Should the loop "back off" when there's no work?
|
|
56
68
|
def loop_back_off?
|
|
57
69
|
false
|
|
58
70
|
end
|
|
59
71
|
|
|
60
|
-
def loop_back_off!
|
|
61
|
-
|
|
72
|
+
def loop_back_off!
|
|
73
|
+
self.loop_wait_time = [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Should perform_loop just straight into work, or start by waiting?
|
|
77
|
+
#
|
|
78
|
+
# The use case is if we want to report some information (like profiles) from time to time, we may not want to
|
|
79
|
+
# report empty/zero/some residual value immediately when the worker starts.
|
|
80
|
+
def loop_wait_before_first_iteration?
|
|
81
|
+
false
|
|
62
82
|
end
|
|
63
83
|
|
|
64
84
|
protected
|
|
@@ -75,16 +95,22 @@ module Datadog
|
|
|
75
95
|
private
|
|
76
96
|
|
|
77
97
|
def perform_loop
|
|
78
|
-
|
|
98
|
+
mutex.synchronize do
|
|
99
|
+
@run_loop = true
|
|
100
|
+
|
|
101
|
+
shutdown.wait(mutex, loop_wait_time) if loop_wait_before_first_iteration?
|
|
102
|
+
end
|
|
79
103
|
|
|
80
104
|
loop do
|
|
81
105
|
if work_pending?
|
|
106
|
+
# There's work to do...
|
|
82
107
|
# Run the task
|
|
83
108
|
yield
|
|
84
109
|
|
|
85
110
|
# Reset the wait interval
|
|
86
|
-
loop_back_off
|
|
111
|
+
reset_loop_wait_time if loop_back_off?
|
|
87
112
|
elsif loop_back_off?
|
|
113
|
+
# There's no work to do...
|
|
88
114
|
# Back off the wait interval a bit
|
|
89
115
|
loop_back_off!
|
|
90
116
|
end
|
|
@@ -92,6 +118,7 @@ module Datadog
|
|
|
92
118
|
# Wait for an interval, unless shutdown has been signaled.
|
|
93
119
|
mutex.synchronize do
|
|
94
120
|
return unless run_loop? || work_pending?
|
|
121
|
+
|
|
95
122
|
shutdown.wait(mutex, loop_wait_time) if run_loop?
|
|
96
123
|
end
|
|
97
124
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/workers/async'
|
|
2
3
|
require 'ddtrace/workers/loop'
|
|
3
4
|
|
|
@@ -8,9 +9,9 @@ module Datadog
|
|
|
8
9
|
SHUTDOWN_TIMEOUT = 1
|
|
9
10
|
|
|
10
11
|
def self.included(base)
|
|
11
|
-
base.
|
|
12
|
-
base.
|
|
13
|
-
base.
|
|
12
|
+
base.include(Workers::IntervalLoop)
|
|
13
|
+
base.include(Workers::Async::Thread)
|
|
14
|
+
base.prepend(PrependedMethods)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
# Methods that must be prepended
|
|
@@ -26,8 +27,14 @@ module Datadog
|
|
|
26
27
|
stop_loop
|
|
27
28
|
graceful = join(timeout)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
if !graceful && force_stop
|
|
31
|
+
Datadog.logger.debug do
|
|
32
|
+
"Timeout while waiting for worker to finish gracefully, forcing termination for: #{self}"
|
|
33
|
+
end
|
|
34
|
+
terminate
|
|
35
|
+
else
|
|
36
|
+
graceful
|
|
37
|
+
end
|
|
31
38
|
else
|
|
32
39
|
false
|
|
33
40
|
end
|
|
@@ -35,6 +42,7 @@ module Datadog
|
|
|
35
42
|
|
|
36
43
|
def enabled?
|
|
37
44
|
return true unless instance_variable_defined?(:@enabled)
|
|
45
|
+
|
|
38
46
|
@enabled
|
|
39
47
|
end
|
|
40
48
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
module Datadog
|
|
2
3
|
module Workers
|
|
3
4
|
# Adds queue behavior to workers, with a buffer
|
|
4
5
|
# to which items can be queued then dequeued.
|
|
5
6
|
module Queue
|
|
6
7
|
def self.included(base)
|
|
7
|
-
base.
|
|
8
|
+
base.prepend(PrependedMethods)
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
# Methods that must be prepended
|
|
@@ -26,6 +27,7 @@ module Datadog
|
|
|
26
27
|
buffer.shift
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
# Are there more items to be processed next?
|
|
29
31
|
def work_pending?
|
|
30
32
|
!buffer.empty?
|
|
31
33
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/runtime/metrics'
|
|
@@ -12,19 +13,23 @@ module Datadog
|
|
|
12
13
|
extend Forwardable
|
|
13
14
|
include Workers::Polling
|
|
14
15
|
|
|
16
|
+
# In seconds
|
|
17
|
+
DEFAULT_FLUSH_INTERVAL = 10
|
|
18
|
+
DEFAULT_BACK_OFF_MAX = 30
|
|
19
|
+
|
|
15
20
|
attr_reader \
|
|
16
21
|
:metrics
|
|
17
22
|
|
|
18
23
|
def initialize(options = {})
|
|
19
|
-
@metrics = options.fetch(:metrics
|
|
24
|
+
@metrics = options.fetch(:metrics) { Runtime::Metrics.new }
|
|
20
25
|
|
|
21
26
|
# Workers::Async::Thread settings
|
|
22
27
|
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
|
|
23
28
|
|
|
24
29
|
# Workers::IntervalLoop settings
|
|
25
|
-
self.
|
|
26
|
-
self.
|
|
27
|
-
self.
|
|
30
|
+
self.loop_base_interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
|
|
31
|
+
self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
|
|
32
|
+
self.loop_back_off_max = options.fetch(:back_off_max, DEFAULT_BACK_OFF_MAX)
|
|
28
33
|
|
|
29
34
|
self.enabled = options.fetch(:enabled, false)
|
|
30
35
|
end
|
|
@@ -39,6 +44,19 @@ module Datadog
|
|
|
39
44
|
metrics.associate_with_span(*args).tap { perform }
|
|
40
45
|
end
|
|
41
46
|
|
|
47
|
+
# TODO: `close_metrics` is only needed because
|
|
48
|
+
# Datadog::Components directly manipulates the lifecycle of
|
|
49
|
+
# Runtime::Metrics.statsd instances.
|
|
50
|
+
# This should be avoided, as it prevents this class from
|
|
51
|
+
# ensuring correct resource decommission of its internal
|
|
52
|
+
# dependencies.
|
|
53
|
+
def stop(*args, close_metrics: true)
|
|
54
|
+
self.enabled = false
|
|
55
|
+
result = super(*args)
|
|
56
|
+
@metrics.close if close_metrics
|
|
57
|
+
result
|
|
58
|
+
end
|
|
59
|
+
|
|
42
60
|
def_delegators \
|
|
43
61
|
:metrics,
|
|
44
62
|
:register_service
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/logger'
|
|
2
3
|
require 'ddtrace/transport/http'
|
|
3
4
|
|
|
@@ -16,15 +17,10 @@ module Datadog
|
|
|
16
17
|
def initialize(options = {})
|
|
17
18
|
transport_options = options.fetch(:transport_options, {})
|
|
18
19
|
|
|
19
|
-
if
|
|
20
|
-
transport_options = { on_build: transport_options }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
transport_options[:hostname] = options[:hostname] if options.key?(:hostname)
|
|
24
|
-
transport_options[:port] = options[:port] if options.key?(:port)
|
|
20
|
+
transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
|
|
25
21
|
|
|
26
22
|
@transport = options.fetch(:transport) do
|
|
27
|
-
Transport::HTTP.default(transport_options)
|
|
23
|
+
Transport::HTTP.default(**transport_options)
|
|
28
24
|
end
|
|
29
25
|
end
|
|
30
26
|
|
|
@@ -41,7 +37,7 @@ module Datadog
|
|
|
41
37
|
flush_traces(traces)
|
|
42
38
|
rescue StandardError => e
|
|
43
39
|
Datadog.logger.error(
|
|
44
|
-
"Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{e.backtrace.first}"
|
|
40
|
+
"Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
45
41
|
)
|
|
46
42
|
end
|
|
47
43
|
|
|
@@ -65,10 +61,8 @@ module Datadog
|
|
|
65
61
|
traces.each do |trace|
|
|
66
62
|
next if trace.first.nil?
|
|
67
63
|
|
|
68
|
-
hostname = Datadog::
|
|
69
|
-
unless hostname.nil? || hostname.empty?
|
|
70
|
-
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
71
|
-
end
|
|
64
|
+
hostname = Datadog::Core::Environment::Socket.hostname
|
|
65
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
72
66
|
end
|
|
73
67
|
end
|
|
74
68
|
|
|
@@ -84,10 +78,6 @@ module Datadog
|
|
|
84
78
|
def initialize
|
|
85
79
|
super(:flush_completed)
|
|
86
80
|
end
|
|
87
|
-
|
|
88
|
-
def publish(response)
|
|
89
|
-
super(response)
|
|
90
|
-
end
|
|
91
81
|
end
|
|
92
82
|
end
|
|
93
83
|
|
|
@@ -127,10 +117,15 @@ module Datadog
|
|
|
127
117
|
|
|
128
118
|
# NOTE: #perform is wrapped by other modules:
|
|
129
119
|
# Polling --> Async --> IntervalLoop --> AsyncTraceWriter --> TraceWriter
|
|
120
|
+
#
|
|
121
|
+
# WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
|
|
122
|
+
# result from the writer, whereas this method always returns nil.
|
|
130
123
|
def perform(traces)
|
|
131
124
|
super(traces).tap do |responses|
|
|
132
125
|
loop_back_off! if responses.find(&:server_error?)
|
|
133
126
|
end
|
|
127
|
+
|
|
128
|
+
nil
|
|
134
129
|
end
|
|
135
130
|
|
|
136
131
|
def stop(*args)
|
|
@@ -148,6 +143,7 @@ module Datadog
|
|
|
148
143
|
[buffer.pop]
|
|
149
144
|
end
|
|
150
145
|
|
|
146
|
+
# Are there more traces to be processed next?
|
|
151
147
|
def work_pending?
|
|
152
148
|
!buffer.empty?
|
|
153
149
|
end
|
|
@@ -187,6 +183,8 @@ module Datadog
|
|
|
187
183
|
@async = false if @writer_fork_policy == FORK_POLICY_SYNC
|
|
188
184
|
end
|
|
189
185
|
|
|
186
|
+
# WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#write is spec'd to return the
|
|
187
|
+
# result from the writer, whereas this method returns something else when running in async mode.
|
|
190
188
|
def write(trace)
|
|
191
189
|
# Start worker thread. If the process has forked, it will trigger #after_fork to
|
|
192
190
|
# reconfigure the worker accordingly.
|