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
|
@@ -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
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'logger'
|
|
2
3
|
require 'ddtrace/configuration/base'
|
|
3
4
|
|
|
4
5
|
require 'ddtrace/ext/analytics'
|
|
5
6
|
require 'ddtrace/ext/distributed'
|
|
6
|
-
require 'ddtrace/ext/
|
|
7
|
+
require 'ddtrace/ext/environment'
|
|
8
|
+
require 'ddtrace/ext/profiling'
|
|
7
9
|
require 'ddtrace/ext/sampling'
|
|
10
|
+
require 'ddtrace/ext/test'
|
|
8
11
|
|
|
9
12
|
module Datadog
|
|
10
13
|
module Configuration
|
|
@@ -13,9 +16,32 @@ module Datadog
|
|
|
13
16
|
class Settings
|
|
14
17
|
include Base
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
def initialize(*_)
|
|
20
|
+
super
|
|
21
|
+
|
|
22
|
+
# WORKAROUND: The values for services, version, and env can get set either directly OR as a side effect of
|
|
23
|
+
# accessing tags (reading or writing). This is of course really confusing and error-prone, e.g. in an app
|
|
24
|
+
# WITHOUT this workaround where you define `DD_TAGS=env:envenvtag,service:envservicetag,version:envversiontag`
|
|
25
|
+
# and do:
|
|
26
|
+
#
|
|
27
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
28
|
+
# Datadog.configuration.tags
|
|
29
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
30
|
+
#
|
|
31
|
+
# the output will be:
|
|
32
|
+
#
|
|
33
|
+
# [empty]
|
|
34
|
+
# envservicetag envenvtag envversiontag
|
|
35
|
+
#
|
|
36
|
+
# That is -- the proper values for service/env/version are only set AFTER something accidentally or not triggers
|
|
37
|
+
# the resolution of the tags.
|
|
38
|
+
# This is really confusing, error prone, etc, so calling tags here is a really hacky but effective way to
|
|
39
|
+
# avoid this. I could not think of a better way of fixing this issue without massive refactoring of tags parsing
|
|
40
|
+
# (so that the individual service/env/version get correctly set even from their tags values, not as a side
|
|
41
|
+
# effect). Sorry :(
|
|
42
|
+
tags
|
|
43
|
+
end
|
|
44
|
+
|
|
19
45
|
settings :analytics do
|
|
20
46
|
option :enabled do |o|
|
|
21
47
|
o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
|
|
@@ -69,7 +95,8 @@ module Datadog
|
|
|
69
95
|
option :propagation_extract_style do |o|
|
|
70
96
|
o.default do
|
|
71
97
|
# Look for all headers by default
|
|
72
|
-
env_to_list(Ext::DistributedTracing::
|
|
98
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_EXTRACT_ENV,
|
|
99
|
+
Ext::DistributedTracing::PROPAGATION_EXTRACT_STYLE_ENV_OLD],
|
|
73
100
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG,
|
|
74
101
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3,
|
|
75
102
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3_SINGLE_HEADER])
|
|
@@ -81,7 +108,8 @@ module Datadog
|
|
|
81
108
|
option :propagation_inject_style do |o|
|
|
82
109
|
o.default do
|
|
83
110
|
# Only inject Datadog headers by default
|
|
84
|
-
env_to_list(Ext::DistributedTracing::
|
|
111
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_INJECT_ENV,
|
|
112
|
+
Ext::DistributedTracing::PROPAGATION_INJECT_STYLE_ENV_OLD],
|
|
85
113
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG])
|
|
86
114
|
end
|
|
87
115
|
|
|
@@ -90,6 +118,7 @@ module Datadog
|
|
|
90
118
|
end
|
|
91
119
|
|
|
92
120
|
option :env do |o|
|
|
121
|
+
# NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
93
122
|
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
|
94
123
|
o.lazy
|
|
95
124
|
end
|
|
@@ -106,6 +135,55 @@ module Datadog
|
|
|
106
135
|
get_option(:logger).instance = logger
|
|
107
136
|
end
|
|
108
137
|
|
|
138
|
+
settings :profiling do
|
|
139
|
+
option :enabled do |o|
|
|
140
|
+
o.default { env_to_bool(Ext::Profiling::ENV_ENABLED, false) }
|
|
141
|
+
o.lazy
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
settings :exporter do
|
|
145
|
+
option :transport
|
|
146
|
+
option :transport_options do |o|
|
|
147
|
+
o.setter do
|
|
148
|
+
# NOTE: As of April 2021 there may be a few profiler private beta customers with this setting, but since I'm
|
|
149
|
+
# marking this as deprecated before public beta, we can remove this for 1.0 without concern.
|
|
150
|
+
Datadog.logger.warn(
|
|
151
|
+
'Configuring the profiler c.profiling.exporter.transport_options is no longer needed, as the profiler ' \
|
|
152
|
+
'will reuse your existing global or tracer configuration. ' \
|
|
153
|
+
'This setting is deprecated for removal in a future ddtrace version ' \
|
|
154
|
+
'(1.0 or profiling GA, whichever comes first).'
|
|
155
|
+
)
|
|
156
|
+
nil
|
|
157
|
+
end
|
|
158
|
+
o.default { nil }
|
|
159
|
+
o.lazy
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
settings :advanced do
|
|
164
|
+
option :max_events, default: 32768
|
|
165
|
+
|
|
166
|
+
# Controls the maximum number of frames for each thread sampled. Can be tuned to avoid omitted frames in the
|
|
167
|
+
# produced profiles. Increasing this may increase the overhead of profiling.
|
|
168
|
+
option :max_frames do |o|
|
|
169
|
+
o.default { env_to_int(Ext::Profiling::ENV_MAX_FRAMES, 400) }
|
|
170
|
+
o.lazy
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# When using profiling together with tracing, this controls if trace resources (usually the endpoint names)
|
|
174
|
+
# are gathered and reported together with profiles.
|
|
175
|
+
option :extract_trace_resource, default: true
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
settings :upload do
|
|
179
|
+
option :timeout_seconds do |o|
|
|
180
|
+
o.setter { |value| value.nil? ? 30.0 : value.to_f }
|
|
181
|
+
o.default { env_to_float(Ext::Profiling::ENV_UPLOAD_TIMEOUT, 30.0) }
|
|
182
|
+
o.lazy
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
109
187
|
option :report_hostname do |o|
|
|
110
188
|
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
111
189
|
o.lazy
|
|
@@ -154,8 +232,17 @@ module Datadog
|
|
|
154
232
|
end
|
|
155
233
|
|
|
156
234
|
option :service do |o|
|
|
157
|
-
|
|
235
|
+
# NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
236
|
+
o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, Ext::Environment::FALLBACK_SERVICE_NAME) }
|
|
158
237
|
o.lazy
|
|
238
|
+
|
|
239
|
+
# There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
|
|
240
|
+
# nil instead so that one can do
|
|
241
|
+
# nice_service_name = Datadog.configure.service_without_fallback || nice_service_name_default
|
|
242
|
+
o.helper(:service_without_fallback) do
|
|
243
|
+
service_name = service
|
|
244
|
+
service_name unless service_name.equal?(Ext::Environment::FALLBACK_SERVICE_NAME)
|
|
245
|
+
end
|
|
159
246
|
end
|
|
160
247
|
|
|
161
248
|
option :site do |o|
|
|
@@ -182,18 +269,17 @@ module Datadog
|
|
|
182
269
|
|
|
183
270
|
o.setter do |new_value, old_value|
|
|
184
271
|
# Coerce keys to strings
|
|
185
|
-
string_tags =
|
|
272
|
+
string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h
|
|
186
273
|
|
|
187
274
|
# Cross-populate tag values with other settings
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
end
|
|
275
|
+
|
|
276
|
+
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
191
277
|
|
|
192
278
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
193
279
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
194
280
|
end
|
|
195
281
|
|
|
196
|
-
if
|
|
282
|
+
if service_without_fallback.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
|
197
283
|
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
|
198
284
|
end
|
|
199
285
|
|
|
@@ -204,6 +290,39 @@ module Datadog
|
|
|
204
290
|
o.lazy
|
|
205
291
|
end
|
|
206
292
|
|
|
293
|
+
settings :test_mode do
|
|
294
|
+
option :enabled do |o|
|
|
295
|
+
o.default { env_to_bool(Ext::Test::ENV_MODE_ENABLED, false) }
|
|
296
|
+
o.lazy
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
option :context_flush do |o|
|
|
300
|
+
o.default { nil }
|
|
301
|
+
o.lazy
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
option :writer_options do |o|
|
|
305
|
+
o.default { {} }
|
|
306
|
+
o.lazy
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
option :time_now_provider do |o|
|
|
311
|
+
o.default { ::Time.now }
|
|
312
|
+
|
|
313
|
+
o.on_set do |time_provider|
|
|
314
|
+
Utils::Time.now_provider = time_provider
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
o.resetter do |_value|
|
|
318
|
+
# TODO: Resetter needs access to the default value
|
|
319
|
+
# TODO: to help reduce duplication.
|
|
320
|
+
-> { ::Time.now }.tap do |default|
|
|
321
|
+
Utils::Time.now_provider = default
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
207
326
|
settings :tracer do
|
|
208
327
|
option :enabled do |o|
|
|
209
328
|
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
|
@@ -275,6 +394,7 @@ module Datadog
|
|
|
275
394
|
end
|
|
276
395
|
|
|
277
396
|
option :version do |o|
|
|
397
|
+
# NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
278
398
|
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
|
279
399
|
o.lazy
|
|
280
400
|
end
|