ddtrace 0.45.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 +406 -1
- data/CONTRIBUTING.md +1 -5
- data/LICENSE-3rdparty.csv +2 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +19 -38
- data/docs/DevelopmentGuide.md +43 -0
- data/docs/GettingStarted.md +164 -76
- 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/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/ci.rb +17 -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/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +2 -0
- data/lib/ddtrace/auto_instrument_base.rb +1 -0
- data/lib/ddtrace/buffer.rb +10 -8
- data/lib/ddtrace/chunker.rb +1 -0
- 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 +128 -10
- data/lib/ddtrace/configuration.rb +118 -26
- data/lib/ddtrace/context.rb +23 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +1 -1
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +1 -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 +1 -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 -3
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events.rb +1 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +1 -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/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_record/event.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +5 -3
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +8 -7
- 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 +1 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +5 -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 +4 -3
- 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 +30 -0
- 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 -0
- data/lib/ddtrace/contrib/aws/services.rb +3 -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 -40
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -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 +1 -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 +1 -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 +7 -6
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -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 +3 -6
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +64 -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 +1 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +34 -31
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
- data/lib/ddtrace/contrib/grape/integration.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/ext.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +7 -6
- 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 +1 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +16 -20
- data/lib/ddtrace/contrib/httpclient/integration.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +8 -4
- 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 +16 -21
- 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 +3 -2
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events.rb +1 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
- data/lib/ddtrace/contrib/{cucumber → lograge}/patcher.rb +7 -4
- 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 +3 -2
- 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 +1 -0
- data/lib/ddtrace/contrib/qless/ext.rb +1 -0
- data/lib/ddtrace/contrib/qless/integration.rb +1 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +5 -5
- data/lib/ddtrace/contrib/qless/qless_job.rb +2 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +2 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -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 +2 -1
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/racecar/event.rb +4 -2
- data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events.rb +1 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
- data/lib/ddtrace/contrib/rack/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/integration.rb +1 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +7 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -0
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +1 -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 +18 -11
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +1 -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 +1 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +12 -4
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +1 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +2 -0
- data/lib/ddtrace/contrib/redis/tags.rb +1 -0
- 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 +18 -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 +25 -1
- 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 +2 -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 +8 -4
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -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 +3 -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 +11 -4
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -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 +3 -4
- data/lib/ddtrace/contrib/status_code_matcher.rb +6 -3
- 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 -1
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +2 -1
- 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 +10 -1
- 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 +1 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +3 -18
- 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/binary_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/carrier.rb +1 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
- data/lib/ddtrace/opentracer/propagator.rb +1 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/scope.rb +1 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/span.rb +3 -6
- data/lib/ddtrace/opentracer/span_context.rb +1 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/tracer.rb +1 -0
- data/lib/ddtrace/opentracer.rb +21 -39
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
- data/lib/ddtrace/profiling/buffer.rb +42 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +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/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/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/http.rb +120 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
- data/lib/ddtrace/profiling/transport/io.rb +31 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
- data/lib/ddtrace/profiling/transport/request.rb +16 -0
- data/lib/ddtrace/profiling/transport/response.rb +9 -0
- data/lib/ddtrace/profiling.rb +151 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
- data/lib/ddtrace/propagation/http_propagator.rb +3 -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/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +1 -0
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
- data/lib/ddtrace/sampling.rb +1 -0
- 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 +48 -50
- 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/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +1 -0
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/api.rb +1 -0
- data/lib/ddtrace/transport/http/builder.rb +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/http.rb +51 -38
- data/lib/ddtrace/transport/io/client.rb +17 -9
- data/lib/ddtrace/transport/io/response.rb +2 -3
- data/lib/ddtrace/transport/io/traces.rb +10 -1
- data/lib/ddtrace/transport/io.rb +2 -1
- data/lib/ddtrace/transport/parcel.rb +7 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/statistics.rb +1 -0
- data/lib/ddtrace/transport/traces.rb +21 -3
- data/lib/ddtrace/utils/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +2 -1
- 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/utils.rb +14 -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/post/composite_read_io.rb +117 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +15 -2
- data/lib/ddtrace/worker.rb +1 -0
- 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 +15 -1
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +14 -7
- data/lib/ddtrace.rb +20 -56
- metadata +130 -446
- data/.circleci/config.yml +0 -566
- 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-3.0.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/.github/workflows/add-milestone-to-pull-requests.yml +0 -42
- data/.github/workflows/create-next-milestone.yml +0 -20
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -41
- data/Appraisals +0 -1350
- data/Gemfile +0 -9
- data/Rakefile +0 -993
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -400
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -19
- data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -104
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
- data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/rspec/example.rb +0 -61
- data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -19
- data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
- data/lib/ddtrace/contrib/rspec/patcher.rb +0 -25
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/ext/ci.rb +0 -297
- 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 -40
- 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,231 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
require 'uri'
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/ext/transport'
|
|
5
|
+
require 'ddtrace/configuration/settings'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Configuration
|
|
9
|
+
# This class unifies all the different ways that users can configure how we talk to the agent.
|
|
10
|
+
#
|
|
11
|
+
# It has quite a lot of complexity, but this complexity just reflects the actual complexity we have around our
|
|
12
|
+
# configuration today. E.g., this is just all of the complexity regarding agent settings gathered together in a
|
|
13
|
+
# single place. As we deprecate more and more of the different ways that these things can be configured,
|
|
14
|
+
# this class will reflect that simplification as well.
|
|
15
|
+
#
|
|
16
|
+
# Whenever there is a conflict (different configurations are provided in different orders), it MUST warn the users
|
|
17
|
+
# about it and pick a value based on the following priority: code > environment variable > defaults.
|
|
18
|
+
#
|
|
19
|
+
# rubocop:disable Metrics/ClassLength
|
|
20
|
+
class AgentSettingsResolver
|
|
21
|
+
AgentSettings = \
|
|
22
|
+
Struct.new(
|
|
23
|
+
:ssl,
|
|
24
|
+
:hostname,
|
|
25
|
+
:port,
|
|
26
|
+
:timeout_seconds,
|
|
27
|
+
:deprecated_for_removal_transport_configuration_proc,
|
|
28
|
+
:deprecated_for_removal_transport_configuration_options
|
|
29
|
+
) do
|
|
30
|
+
def initialize(
|
|
31
|
+
ssl:,
|
|
32
|
+
hostname:,
|
|
33
|
+
port:,
|
|
34
|
+
timeout_seconds:,
|
|
35
|
+
deprecated_for_removal_transport_configuration_proc:,
|
|
36
|
+
deprecated_for_removal_transport_configuration_options:
|
|
37
|
+
)
|
|
38
|
+
super(ssl, hostname, port, timeout_seconds, deprecated_for_removal_transport_configuration_proc, \
|
|
39
|
+
deprecated_for_removal_transport_configuration_options)
|
|
40
|
+
freeze
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.call(settings, logger: Datadog.logger)
|
|
45
|
+
new(settings, logger: logger).send(:call)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
attr_reader \
|
|
51
|
+
:logger,
|
|
52
|
+
:settings
|
|
53
|
+
|
|
54
|
+
def initialize(settings, logger: Datadog.logger)
|
|
55
|
+
@settings = settings
|
|
56
|
+
@logger = logger
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def call
|
|
60
|
+
AgentSettings.new(
|
|
61
|
+
ssl: ssl?,
|
|
62
|
+
hostname: hostname,
|
|
63
|
+
port: port,
|
|
64
|
+
timeout_seconds: timeout_seconds,
|
|
65
|
+
# NOTE: When provided, the deprecated_for_removal_transport_configuration_proc can override all
|
|
66
|
+
# values above (ssl, hostname, port, timeout), or even make them irrelevant (by using an unix socket or
|
|
67
|
+
# enabling test mode instead).
|
|
68
|
+
# That is the main reason why it is deprecated -- it's an opaque function that may set a bunch of settings
|
|
69
|
+
# that we know nothing of until we actually call it.
|
|
70
|
+
deprecated_for_removal_transport_configuration_proc: deprecated_for_removal_transport_configuration_proc,
|
|
71
|
+
deprecated_for_removal_transport_configuration_options: deprecated_for_removal_transport_configuration_options
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def hostname
|
|
76
|
+
pick_from(
|
|
77
|
+
configurations_in_priority_order: [
|
|
78
|
+
DetectedConfiguration.new(
|
|
79
|
+
friendly_name: "'c.tracer.hostname'",
|
|
80
|
+
value: settings.tracer.hostname
|
|
81
|
+
),
|
|
82
|
+
DetectedConfiguration.new(
|
|
83
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
|
|
84
|
+
value: parsed_url && parsed_url.hostname
|
|
85
|
+
),
|
|
86
|
+
DetectedConfiguration.new(
|
|
87
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST} environment variable",
|
|
88
|
+
value: ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST]
|
|
89
|
+
)
|
|
90
|
+
],
|
|
91
|
+
or_use_default: Datadog::Ext::Transport::HTTP::DEFAULT_HOST
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def port
|
|
96
|
+
port_from_env = ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT]
|
|
97
|
+
parsed_port_from_env =
|
|
98
|
+
if port_from_env
|
|
99
|
+
begin
|
|
100
|
+
Integer(port_from_env)
|
|
101
|
+
rescue ArgumentError
|
|
102
|
+
log_warning(
|
|
103
|
+
"Invalid value for #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable " \
|
|
104
|
+
"('#{port_from_env}'). Ignoring this configuration."
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
pick_from(
|
|
110
|
+
configurations_in_priority_order: [
|
|
111
|
+
DetectedConfiguration.new(
|
|
112
|
+
friendly_name: '"c.tracer.port"',
|
|
113
|
+
value: settings.tracer.port
|
|
114
|
+
),
|
|
115
|
+
DetectedConfiguration.new(
|
|
116
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
|
|
117
|
+
value: parsed_url && parsed_url.port
|
|
118
|
+
),
|
|
119
|
+
DetectedConfiguration.new(
|
|
120
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable",
|
|
121
|
+
value: parsed_port_from_env
|
|
122
|
+
)
|
|
123
|
+
],
|
|
124
|
+
or_use_default: Datadog::Ext::Transport::HTTP::DEFAULT_PORT
|
|
125
|
+
)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def ssl?
|
|
129
|
+
!parsed_url.nil? && parsed_url.scheme == 'https'
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def timeout_seconds
|
|
133
|
+
Datadog::Ext::Transport::HTTP::DEFAULT_TIMEOUT_SECONDS
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def deprecated_for_removal_transport_configuration_proc
|
|
137
|
+
settings.tracer.transport_options if settings.tracer.transport_options.is_a?(Proc)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def deprecated_for_removal_transport_configuration_options
|
|
141
|
+
options = settings.tracer.transport_options
|
|
142
|
+
|
|
143
|
+
if options.is_a?(Hash) && !options.empty?
|
|
144
|
+
log_warning(
|
|
145
|
+
'Configuring the tracer via a c.tracer.transport_options hash is deprecated for removal in a future ' \
|
|
146
|
+
"ddtrace version (c.tracer.transport_options contained '#{options.inspect}')."
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
options
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def parsed_url
|
|
154
|
+
return @parsed_url if defined?(@parsed_url)
|
|
155
|
+
|
|
156
|
+
@parsed_url =
|
|
157
|
+
if unparsed_url_from_env
|
|
158
|
+
parsed = URI.parse(unparsed_url_from_env)
|
|
159
|
+
|
|
160
|
+
if %w[http https].include?(parsed.scheme)
|
|
161
|
+
parsed
|
|
162
|
+
else
|
|
163
|
+
log_warning(
|
|
164
|
+
"Invalid URI scheme '#{parsed.scheme}' for #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} " \
|
|
165
|
+
"environment variable ('#{unparsed_url_from_env}'). " \
|
|
166
|
+
"Ignoring the contents of #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL}."
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
nil
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# NOTE: This should only be used AFTER parsing, via `#parsed_url`. The only other use-case where this can be used
|
|
175
|
+
# directly without parsing, is when displaying in warning messages, to show users what it actually contains.
|
|
176
|
+
def unparsed_url_from_env
|
|
177
|
+
@unparsed_url_from_env ||= ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def pick_from(configurations_in_priority_order:, or_use_default:)
|
|
181
|
+
detected_configurations_in_priority_order = configurations_in_priority_order.select(&:value?)
|
|
182
|
+
|
|
183
|
+
if detected_configurations_in_priority_order.any?
|
|
184
|
+
warn_if_configuration_mismatch(detected_configurations_in_priority_order)
|
|
185
|
+
|
|
186
|
+
# The configurations are listed in priority, so we only need to look at the first; if there's more than
|
|
187
|
+
# one, we emit a warning above
|
|
188
|
+
detected_configurations_in_priority_order.first.value
|
|
189
|
+
else
|
|
190
|
+
or_use_default
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def warn_if_configuration_mismatch(detected_configurations_in_priority_order)
|
|
195
|
+
return unless detected_configurations_in_priority_order.map(&:value).uniq.size > 1
|
|
196
|
+
|
|
197
|
+
log_warning(
|
|
198
|
+
'Configuration mismatch: values differ between ' \
|
|
199
|
+
"#{detected_configurations_in_priority_order
|
|
200
|
+
.map { |config| "#{config.friendly_name} ('#{config.value}')" }.join(' and ')}" \
|
|
201
|
+
". Using '#{detected_configurations_in_priority_order.first.value}'."
|
|
202
|
+
)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def log_warning(message)
|
|
206
|
+
logger.warn(message) if logger
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
DetectedConfiguration = Struct.new(:friendly_name, :value) do
|
|
210
|
+
def initialize(friendly_name:, value:)
|
|
211
|
+
super(friendly_name, value)
|
|
212
|
+
freeze
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def value?
|
|
216
|
+
!value.nil?
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
private_constant :DetectedConfiguration
|
|
220
|
+
|
|
221
|
+
# NOTE: Due to... legacy reasons... Some classes like having an `AgentSettings` instance to fall back to.
|
|
222
|
+
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
|
223
|
+
# represents only settings specified via environment variables + the usual defaults.
|
|
224
|
+
#
|
|
225
|
+
# YOU DO NOT WANT TO USE THE BELOW INSTANCE ON ANY NEWLY WRITTEN CODE, as it ignores any settings specified
|
|
226
|
+
# by users via `Datadog.configure`.
|
|
227
|
+
ENVIRONMENT_AGENT_SETTINGS = call(Settings.new, logger: nil)
|
|
228
|
+
end
|
|
229
|
+
# rubocop:enable Metrics/ClassLength
|
|
230
|
+
end
|
|
231
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: false
|
|
2
|
+
require 'datadog/core/environment/variable_helpers'
|
|
2
3
|
require 'ddtrace/configuration/options'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
@@ -6,12 +7,12 @@ module Datadog
|
|
|
6
7
|
# Basic configuration behavior
|
|
7
8
|
module Base
|
|
8
9
|
def self.included(base)
|
|
9
|
-
base.
|
|
10
|
-
base.
|
|
11
|
-
base.
|
|
10
|
+
base.extend(Datadog::Core::Environment::VariableHelpers)
|
|
11
|
+
base.include(Datadog::Core::Environment::VariableHelpers)
|
|
12
|
+
base.include(Options)
|
|
12
13
|
|
|
13
|
-
base.
|
|
14
|
-
base.
|
|
14
|
+
base.extend(ClassMethods)
|
|
15
|
+
base.include(InstanceMethods)
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# Class methods for configuration
|
|
@@ -37,7 +38,7 @@ module Datadog
|
|
|
37
38
|
|
|
38
39
|
def new_settings_class(&block)
|
|
39
40
|
Class.new { include Datadog::Configuration::Base }.tap do |klass|
|
|
40
|
-
klass.instance_eval(&block) if
|
|
41
|
+
klass.instance_eval(&block) if block
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
44
|
end
|
|
@@ -53,10 +54,7 @@ module Datadog
|
|
|
53
54
|
ordering = self.class.options.dependency_order
|
|
54
55
|
sorted_opts = opts.sort_by do |name, _value|
|
|
55
56
|
ordering.index(name) || (ordering.length + 1)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Ruby 2.0 doesn't support Array#to_h
|
|
59
|
-
sorted_opts = Hash[*sorted_opts.flatten]
|
|
57
|
+
end.to_h
|
|
60
58
|
|
|
61
59
|
# Apply options in sort order
|
|
62
60
|
sorted_opts.each do |name, value|
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/configuration/agent_settings_resolver'
|
|
1
3
|
require 'ddtrace/diagnostics/health'
|
|
2
4
|
require 'ddtrace/logger'
|
|
5
|
+
require 'ddtrace/profiling'
|
|
3
6
|
require 'ddtrace/runtime/metrics'
|
|
4
7
|
require 'ddtrace/tracer'
|
|
8
|
+
require 'ddtrace/sync_writer'
|
|
5
9
|
require 'ddtrace/workers/runtime_metrics'
|
|
6
10
|
|
|
7
11
|
module Datadog
|
|
8
12
|
module Configuration
|
|
9
13
|
# Global components for the trace library.
|
|
10
|
-
# rubocop:disable Metrics/
|
|
14
|
+
# rubocop:disable Metrics/ClassLength
|
|
15
|
+
# rubocop:disable Layout/LineLength
|
|
11
16
|
class Components
|
|
12
17
|
class << self
|
|
13
18
|
def build_health_metrics(settings)
|
|
@@ -15,11 +20,11 @@ module Datadog
|
|
|
15
20
|
options = { enabled: settings.enabled }
|
|
16
21
|
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
|
17
22
|
|
|
18
|
-
Datadog::Diagnostics::Health::Metrics.new(options)
|
|
23
|
+
Datadog::Diagnostics::Health::Metrics.new(**options)
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
def build_logger(settings)
|
|
22
|
-
logger = settings.logger.instance || Datadog::Logger.new(
|
|
27
|
+
logger = settings.logger.instance || Datadog::Logger.new($stdout)
|
|
23
28
|
logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
|
|
24
29
|
|
|
25
30
|
logger
|
|
@@ -30,7 +35,7 @@ module Datadog
|
|
|
30
35
|
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
|
31
36
|
options[:services] = [settings.service] unless settings.service.nil?
|
|
32
37
|
|
|
33
|
-
Datadog::Runtime::Metrics.new(options)
|
|
38
|
+
Datadog::Runtime::Metrics.new(**options)
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
def build_runtime_metrics_worker(settings)
|
|
@@ -43,7 +48,7 @@ module Datadog
|
|
|
43
48
|
Datadog::Workers::RuntimeMetrics.new(options)
|
|
44
49
|
end
|
|
45
50
|
|
|
46
|
-
def build_tracer(settings)
|
|
51
|
+
def build_tracer(settings, agent_settings)
|
|
47
52
|
# If a custom tracer has been provided, use it instead.
|
|
48
53
|
# Ignore all other options (they should already be configured.)
|
|
49
54
|
tracer = settings.tracer.instance
|
|
@@ -53,7 +58,14 @@ module Datadog
|
|
|
53
58
|
default_service: settings.service,
|
|
54
59
|
enabled: settings.tracer.enabled,
|
|
55
60
|
partial_flush: settings.tracer.partial_flush.enabled,
|
|
56
|
-
tags: build_tracer_tags(settings)
|
|
61
|
+
tags: build_tracer_tags(settings),
|
|
62
|
+
sampler: PrioritySampler.new(
|
|
63
|
+
base_sampler: AllSampler.new,
|
|
64
|
+
post_sampler: Sampling::RuleSampler.new(
|
|
65
|
+
rate_limit: settings.sampling.rate_limit,
|
|
66
|
+
default_sample_rate: settings.sampling.default_rate
|
|
67
|
+
)
|
|
68
|
+
)
|
|
57
69
|
)
|
|
58
70
|
|
|
59
71
|
# TODO: We reconfigure the tracer here because it has way too many
|
|
@@ -61,40 +73,143 @@ module Datadog
|
|
|
61
73
|
# tracer initialization for now. Just reconfigure using the
|
|
62
74
|
# existing mutable #configure function. Remove when these components
|
|
63
75
|
# are extracted.
|
|
64
|
-
tracer.configure(build_tracer_options(settings))
|
|
76
|
+
tracer.configure(agent_settings: agent_settings, **build_tracer_options(settings, agent_settings))
|
|
65
77
|
|
|
66
78
|
tracer
|
|
67
79
|
end
|
|
68
80
|
|
|
81
|
+
def build_profiler(settings, agent_settings, tracer)
|
|
82
|
+
return unless Datadog::Profiling.supported? && settings.profiling.enabled
|
|
83
|
+
|
|
84
|
+
unless defined?(Datadog::Profiling::Tasks::Setup)
|
|
85
|
+
# In #1545 a user reported a NameError due to this constant being uninitialized
|
|
86
|
+
# I've documented my suspicion on why that happened in
|
|
87
|
+
# https://github.com/DataDog/dd-trace-rb/issues/1545#issuecomment-856049025
|
|
88
|
+
#
|
|
89
|
+
# > Thanks for the info! It seems to feed into my theory: there's two moments in the code where we check if
|
|
90
|
+
# > profiler is "supported": 1) when loading ddtrace (inside preload) and 2) when starting the profile
|
|
91
|
+
# > after Datadog.configure gets run.
|
|
92
|
+
# > The problem is that the code assumes that both checks 1) and 2) will always reach the same conclusion:
|
|
93
|
+
# > either profiler is supported, or profiler is not supported.
|
|
94
|
+
# > In the problematic case, it looks like in your case check 1 decides that profiler is not
|
|
95
|
+
# > supported => doesn't load it, and then check 2 decides that it is => assumes it is loaded and tries to
|
|
96
|
+
# > start it.
|
|
97
|
+
#
|
|
98
|
+
# I was never able to validate if this was the issue or why exactly .supported? would change its mind BUT
|
|
99
|
+
# just in case it happens again, I've left this check which avoids breaking the user's application AND
|
|
100
|
+
# would instead direct them to report it to us instead, so that we can investigate what's wrong.
|
|
101
|
+
#
|
|
102
|
+
# TODO: As of June 2021, most checks in .supported? are related to the google-protobuf gem; so it's
|
|
103
|
+
# very likely that it was the origin of the issue we saw. Thus, if, as planned we end up moving away from
|
|
104
|
+
# protobuf OR enough time has passed and no users saw the issue again, we can remove this check altogether.
|
|
105
|
+
Datadog.logger.error(
|
|
106
|
+
'Profiling was marked as supported and enabled, but setup task was not loaded properly. ' \
|
|
107
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug'
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Load extensions needed to support some of the Profiling features
|
|
114
|
+
Datadog::Profiling::Tasks::Setup.new.run
|
|
115
|
+
|
|
116
|
+
# NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
|
|
117
|
+
|
|
118
|
+
trace_identifiers_helper = Datadog::Profiling::TraceIdentifiers::Helper.new(
|
|
119
|
+
tracer: tracer,
|
|
120
|
+
extract_trace_resource: settings.profiling.advanced.extract_trace_resource
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
recorder = build_profiler_recorder(settings)
|
|
124
|
+
collectors = build_profiler_collectors(settings, recorder, trace_identifiers_helper)
|
|
125
|
+
exporters = build_profiler_exporters(settings, agent_settings)
|
|
126
|
+
scheduler = build_profiler_scheduler(settings, recorder, exporters)
|
|
127
|
+
|
|
128
|
+
Datadog::Profiler.new(collectors, scheduler)
|
|
129
|
+
end
|
|
130
|
+
|
|
69
131
|
private
|
|
70
132
|
|
|
71
133
|
def build_tracer_tags(settings)
|
|
72
134
|
settings.tags.dup.tap do |tags|
|
|
73
|
-
tags[
|
|
74
|
-
tags[
|
|
135
|
+
tags[Ext::Environment::TAG_ENV] = settings.env unless settings.env.nil?
|
|
136
|
+
tags[Ext::Environment::TAG_VERSION] = settings.version unless settings.version.nil?
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def build_tracer_options(settings, agent_settings)
|
|
141
|
+
tracer_options = {}.tap do |opts|
|
|
142
|
+
tset = settings.tracer
|
|
143
|
+
opts[:min_spans_before_partial_flush] = tset.partial_flush.min_spans_threshold unless tset.partial_flush.min_spans_threshold.nil?
|
|
144
|
+
opts[:partial_flush] = tset.partial_flush.enabled unless tset.partial_flush.enabled.nil?
|
|
145
|
+
opts[:priority_sampling] = tset.priority_sampling unless tset.priority_sampling.nil?
|
|
146
|
+
opts[:sampler] = tset.sampler unless tset.sampler.nil?
|
|
147
|
+
opts[:writer] = tset.writer unless tset.writer.nil?
|
|
148
|
+
opts[:writer_options] = tset.writer_options if tset.writer.nil?
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Apply test mode settings if test mode is activated
|
|
152
|
+
if settings.test_mode.enabled
|
|
153
|
+
build_tracer_test_mode_options(tracer_options, settings, agent_settings)
|
|
154
|
+
else
|
|
155
|
+
tracer_options
|
|
75
156
|
end
|
|
76
157
|
end
|
|
77
158
|
|
|
78
|
-
def
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
opts[:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
opts[:writer] =
|
|
90
|
-
opts[:writer_options] = settings.writer_options if settings.writer.nil?
|
|
159
|
+
def build_tracer_test_mode_options(tracer_options, settings, agent_settings)
|
|
160
|
+
tracer_options.tap do |opts|
|
|
161
|
+
# Do not sample any spans for tests; all must be preserved.
|
|
162
|
+
opts[:sampler] = Datadog::AllSampler.new
|
|
163
|
+
|
|
164
|
+
# If context flush behavior is provided, use it instead.
|
|
165
|
+
opts[:context_flush] = settings.test_mode.context_flush if settings.test_mode.context_flush
|
|
166
|
+
|
|
167
|
+
# Flush traces synchronously, to guarantee they are written.
|
|
168
|
+
writer_options = settings.test_mode.writer_options || {}
|
|
169
|
+
writer_options[:agent_settings] = agent_settings if agent_settings
|
|
170
|
+
opts[:writer] = Datadog::SyncWriter.new(writer_options)
|
|
91
171
|
end
|
|
92
172
|
end
|
|
173
|
+
|
|
174
|
+
def build_profiler_recorder(settings)
|
|
175
|
+
event_classes = [Datadog::Profiling::Events::StackSample]
|
|
176
|
+
|
|
177
|
+
Datadog::Profiling::Recorder.new(event_classes, settings.profiling.advanced.max_events)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def build_profiler_collectors(settings, recorder, trace_identifiers_helper)
|
|
181
|
+
[
|
|
182
|
+
Datadog::Profiling::Collectors::Stack.new(
|
|
183
|
+
recorder,
|
|
184
|
+
trace_identifiers_helper: trace_identifiers_helper,
|
|
185
|
+
max_frames: settings.profiling.advanced.max_frames
|
|
186
|
+
# TODO: Provide proc that identifies Datadog worker threads?
|
|
187
|
+
# ignore_thread: settings.profiling.ignore_profiler
|
|
188
|
+
)
|
|
189
|
+
]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def build_profiler_exporters(settings, agent_settings)
|
|
193
|
+
transport =
|
|
194
|
+
settings.profiling.exporter.transport || Datadog::Profiling::Transport::HTTP.default(
|
|
195
|
+
agent_settings: agent_settings,
|
|
196
|
+
site: settings.site,
|
|
197
|
+
api_key: settings.api_key,
|
|
198
|
+
profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
[Datadog::Profiling::Exporter.new(transport)]
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def build_profiler_scheduler(settings, recorder, exporters)
|
|
205
|
+
Datadog::Profiling::Scheduler.new(recorder, exporters)
|
|
206
|
+
end
|
|
93
207
|
end
|
|
94
208
|
|
|
95
209
|
attr_reader \
|
|
96
210
|
:health_metrics,
|
|
97
211
|
:logger,
|
|
212
|
+
:profiler,
|
|
98
213
|
:runtime_metrics,
|
|
99
214
|
:tracer
|
|
100
215
|
|
|
@@ -102,8 +217,13 @@ module Datadog
|
|
|
102
217
|
# Logger
|
|
103
218
|
@logger = self.class.build_logger(settings)
|
|
104
219
|
|
|
220
|
+
agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
|
|
221
|
+
|
|
105
222
|
# Tracer
|
|
106
|
-
@tracer = self.class.build_tracer(settings)
|
|
223
|
+
@tracer = self.class.build_tracer(settings, agent_settings)
|
|
224
|
+
|
|
225
|
+
# Profiler
|
|
226
|
+
@profiler = self.class.build_profiler(settings, agent_settings, @tracer)
|
|
107
227
|
|
|
108
228
|
# Runtime metrics
|
|
109
229
|
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
@@ -113,7 +233,20 @@ module Datadog
|
|
|
113
233
|
end
|
|
114
234
|
|
|
115
235
|
# Starts up components
|
|
116
|
-
def startup!(settings)
|
|
236
|
+
def startup!(settings)
|
|
237
|
+
if settings.profiling.enabled
|
|
238
|
+
if profiler
|
|
239
|
+
@logger.debug('Profiling started')
|
|
240
|
+
profiler.start
|
|
241
|
+
else
|
|
242
|
+
# Display a warning for users who expected profiling to be enabled
|
|
243
|
+
unsupported_reason = Datadog::Profiling.unsupported_reason
|
|
244
|
+
logger.warn("Profiling was requested but is not supported, profiling disabled: #{unsupported_reason}")
|
|
245
|
+
end
|
|
246
|
+
else
|
|
247
|
+
@logger.debug('Profiling is disabled')
|
|
248
|
+
end
|
|
249
|
+
end
|
|
117
250
|
|
|
118
251
|
# Shuts down all the components in use.
|
|
119
252
|
# If it has another instance to compare to, it will compare
|
|
@@ -123,12 +256,20 @@ module Datadog
|
|
|
123
256
|
# (e.g. a custom tracer instance passed in.)
|
|
124
257
|
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
|
125
258
|
|
|
259
|
+
# Shutdown old profiler
|
|
260
|
+
profiler.shutdown! unless profiler.nil?
|
|
261
|
+
|
|
126
262
|
# Shutdown workers
|
|
127
|
-
runtime_metrics.
|
|
128
|
-
runtime_metrics.stop(true)
|
|
263
|
+
runtime_metrics.stop(true, close_metrics: false)
|
|
129
264
|
|
|
130
265
|
# Shutdown the old metrics, unless they are still being used.
|
|
131
266
|
# (e.g. custom Statsd instances.)
|
|
267
|
+
#
|
|
268
|
+
# TODO: This violates the encapsulation created by Runtime::Metrics and
|
|
269
|
+
# Health::Metrics, by directly manipulating `statsd` and changing
|
|
270
|
+
# it's lifecycle management.
|
|
271
|
+
# If we need to directly have ownership of `statsd` lifecycle, we should
|
|
272
|
+
# have direct ownership of it.
|
|
132
273
|
old_statsd = [
|
|
133
274
|
runtime_metrics.metrics.statsd,
|
|
134
275
|
health_metrics.statsd
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/configuration/option'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
@@ -60,7 +61,7 @@ module Datadog
|
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
def default(value = nil, &block)
|
|
63
|
-
@default =
|
|
64
|
+
@default = block || value
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
def delegate_to(&block)
|
|
@@ -71,8 +72,6 @@ module Datadog
|
|
|
71
72
|
@helpers[name] = block
|
|
72
73
|
end
|
|
73
74
|
|
|
74
|
-
# rubocop:disable Style/TrivialAccessors
|
|
75
|
-
# (Rubocop erroneously thinks #lazy == #lazy= )
|
|
76
75
|
def lazy(value = true)
|
|
77
76
|
@lazy = value
|
|
78
77
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/configuration/option_set'
|
|
2
3
|
require 'ddtrace/configuration/option_definition'
|
|
3
4
|
require 'ddtrace/configuration/option_definition_set'
|
|
@@ -7,17 +8,15 @@ module Datadog
|
|
|
7
8
|
# Behavior for a configuration object that has options
|
|
8
9
|
module Options
|
|
9
10
|
def self.included(base)
|
|
10
|
-
base.
|
|
11
|
-
base.
|
|
11
|
+
base.extend(ClassMethods)
|
|
12
|
+
base.include(InstanceMethods)
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Class behavior for a configuration object with options
|
|
15
16
|
module ClassMethods
|
|
16
17
|
def options
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
20
|
-
end
|
|
18
|
+
# Allows for class inheritance of option definitions
|
|
19
|
+
@options ||= superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
protected
|
|
@@ -51,6 +50,7 @@ module Datadog
|
|
|
51
50
|
def define_helpers(helpers)
|
|
52
51
|
helpers.each do |name, block|
|
|
53
52
|
next unless block.is_a?(Proc)
|
|
53
|
+
|
|
54
54
|
define_method(name, &block)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
@@ -102,9 +102,7 @@ module Datadog
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
def assert_valid_option!(name)
|
|
105
|
-
unless option_defined?(name)
|
|
106
|
-
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
107
|
-
end
|
|
105
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
108
106
|
end
|
|
109
107
|
end
|
|
110
108
|
|