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
|
@@ -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) }
|
|
@@ -92,6 +118,7 @@ module Datadog
|
|
|
92
118
|
end
|
|
93
119
|
|
|
94
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.
|
|
95
122
|
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
|
96
123
|
o.lazy
|
|
97
124
|
end
|
|
@@ -108,6 +135,55 @@ module Datadog
|
|
|
108
135
|
get_option(:logger).instance = logger
|
|
109
136
|
end
|
|
110
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
|
+
|
|
111
187
|
option :report_hostname do |o|
|
|
112
188
|
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
113
189
|
o.lazy
|
|
@@ -156,8 +232,17 @@ module Datadog
|
|
|
156
232
|
end
|
|
157
233
|
|
|
158
234
|
option :service do |o|
|
|
159
|
-
|
|
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) }
|
|
160
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
|
|
161
246
|
end
|
|
162
247
|
|
|
163
248
|
option :site do |o|
|
|
@@ -184,18 +269,17 @@ module Datadog
|
|
|
184
269
|
|
|
185
270
|
o.setter do |new_value, old_value|
|
|
186
271
|
# Coerce keys to strings
|
|
187
|
-
string_tags =
|
|
272
|
+
string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h
|
|
188
273
|
|
|
189
274
|
# Cross-populate tag values with other settings
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
end
|
|
275
|
+
|
|
276
|
+
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
193
277
|
|
|
194
278
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
195
279
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
196
280
|
end
|
|
197
281
|
|
|
198
|
-
if
|
|
282
|
+
if service_without_fallback.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
|
199
283
|
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
|
200
284
|
end
|
|
201
285
|
|
|
@@ -206,6 +290,39 @@ module Datadog
|
|
|
206
290
|
o.lazy
|
|
207
291
|
end
|
|
208
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
|
+
|
|
209
326
|
settings :tracer do
|
|
210
327
|
option :enabled do |o|
|
|
211
328
|
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
|
@@ -277,6 +394,7 @@ module Datadog
|
|
|
277
394
|
end
|
|
278
395
|
|
|
279
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.
|
|
280
398
|
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
|
281
399
|
o.lazy
|
|
282
400
|
end
|
|
@@ -1,14 +1,42 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
|
-
|
|
3
3
|
require 'ddtrace/configuration/pin_setup'
|
|
4
4
|
require 'ddtrace/configuration/settings'
|
|
5
5
|
require 'ddtrace/configuration/components'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Configuration provides a unique access point for configurations
|
|
9
|
-
module Configuration
|
|
9
|
+
module Configuration # rubocop:disable Metrics/ModuleLength
|
|
10
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
10
11
|
extend Forwardable
|
|
11
12
|
|
|
13
|
+
# Used to ensure that @components initialization/reconfiguration is performed one-at-a-time, by a single thread.
|
|
14
|
+
#
|
|
15
|
+
# This is important because components can end up being accessed from multiple application threads (for instance on
|
|
16
|
+
# a threaded webserver), and we don't want their initialization to clash (for instance, starting two profilers...).
|
|
17
|
+
#
|
|
18
|
+
# Note that a Mutex **IS NOT** reentrant: the same thread cannot grab the same Mutex more than once.
|
|
19
|
+
# This means below we are careful not to nest calls to methods that would trigger initialization and grab the lock.
|
|
20
|
+
#
|
|
21
|
+
# Every method that directly or indirectly mutates @components should be holding the lock (through
|
|
22
|
+
# #safely_synchronize) while doing so.
|
|
23
|
+
COMPONENTS_WRITE_LOCK = Mutex.new
|
|
24
|
+
private_constant :COMPONENTS_WRITE_LOCK
|
|
25
|
+
|
|
26
|
+
# We use a separate lock when reading the @components, so that they continue to be accessible during reconfiguration.
|
|
27
|
+
# This was needed because we ran into several issues where we still needed to read the old
|
|
28
|
+
# components while the COMPONENTS_WRITE_LOCK was being held (see https://github.com/DataDog/dd-trace-rb/pull/1387
|
|
29
|
+
# and https://github.com/DataDog/dd-trace-rb/pull/1373#issuecomment-799593022 ).
|
|
30
|
+
#
|
|
31
|
+
# Technically on MRI we could get away without this lock, but on non-MRI Rubies, we may run into issues because
|
|
32
|
+
# we fall into the "UnsafeDCLFactory" case of https://shipilev.net/blog/2014/safe-public-construction/ .
|
|
33
|
+
# Specifically, on JRuby reads from the @components do NOT have volatile semantics, and on TruffleRuby they do
|
|
34
|
+
# BUT just as an implementation detail, see https://github.com/jruby/jruby/wiki/Concurrency-in-jruby#volatility and
|
|
35
|
+
# https://github.com/DataDog/dd-trace-rb/pull/1329#issuecomment-776750377 .
|
|
36
|
+
# Concurrency is hard.
|
|
37
|
+
COMPONENTS_READ_LOCK = Mutex.new
|
|
38
|
+
private_constant :COMPONENTS_READ_LOCK
|
|
39
|
+
|
|
12
40
|
attr_writer :configuration
|
|
13
41
|
|
|
14
42
|
def configuration
|
|
@@ -19,13 +47,15 @@ module Datadog
|
|
|
19
47
|
if target.is_a?(Settings)
|
|
20
48
|
yield(target) if block_given?
|
|
21
49
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
50
|
+
safely_synchronize do |write_components|
|
|
51
|
+
write_components.call(
|
|
52
|
+
if components?
|
|
53
|
+
replace_components!(target, @components)
|
|
54
|
+
else
|
|
55
|
+
build_components(target)
|
|
56
|
+
end
|
|
57
|
+
)
|
|
58
|
+
end
|
|
29
59
|
|
|
30
60
|
target
|
|
31
61
|
else
|
|
@@ -36,22 +66,19 @@ module Datadog
|
|
|
36
66
|
def_delegators \
|
|
37
67
|
:components,
|
|
38
68
|
:health_metrics,
|
|
69
|
+
:profiler,
|
|
39
70
|
:runtime_metrics,
|
|
40
71
|
:tracer
|
|
41
72
|
|
|
42
73
|
def logger
|
|
43
|
-
|
|
74
|
+
# avoid initializing components if they didn't already exist
|
|
75
|
+
current_components = components(allow_initialization: false)
|
|
76
|
+
|
|
77
|
+
if current_components
|
|
44
78
|
@temp_logger = nil
|
|
45
|
-
|
|
79
|
+
current_components.logger
|
|
46
80
|
else
|
|
47
|
-
|
|
48
|
-
# This prevents recursive loops while initializing.
|
|
49
|
-
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
|
50
|
-
@temp_logger ||= begin
|
|
51
|
-
logger = configuration.logger.instance || Datadog::Logger.new(STDOUT)
|
|
52
|
-
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
53
|
-
logger
|
|
54
|
-
end
|
|
81
|
+
logger_without_components
|
|
55
82
|
end
|
|
56
83
|
end
|
|
57
84
|
|
|
@@ -65,26 +92,64 @@ module Datadog
|
|
|
65
92
|
#
|
|
66
93
|
# Components won't be automatically reinitialized after a shutdown.
|
|
67
94
|
def shutdown!
|
|
68
|
-
|
|
95
|
+
safely_synchronize do
|
|
96
|
+
@components.shutdown! if components?
|
|
97
|
+
end
|
|
69
98
|
end
|
|
70
99
|
|
|
100
|
+
protected
|
|
101
|
+
|
|
102
|
+
def components(allow_initialization: true)
|
|
103
|
+
current_components = COMPONENTS_READ_LOCK.synchronize { defined?(@components) && @components }
|
|
104
|
+
return current_components if current_components || !allow_initialization
|
|
105
|
+
|
|
106
|
+
safely_synchronize do |write_components|
|
|
107
|
+
(defined?(@components) && @components) || write_components.call(build_components(configuration))
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
71
113
|
# Gracefully shuts down the tracer and disposes of component references,
|
|
72
114
|
# allowing execution to start anew.
|
|
73
115
|
#
|
|
74
116
|
# In contrast with +#shutdown!+, components will be automatically
|
|
75
117
|
# reinitialized after a reset.
|
|
118
|
+
#
|
|
119
|
+
# Used internally to ensure a clean environment between test runs.
|
|
76
120
|
def reset!
|
|
77
|
-
|
|
78
|
-
|
|
121
|
+
safely_synchronize do |write_components|
|
|
122
|
+
@components.shutdown! if components?
|
|
123
|
+
write_components.call(nil)
|
|
124
|
+
configuration.reset!
|
|
125
|
+
end
|
|
79
126
|
end
|
|
80
127
|
|
|
81
|
-
|
|
128
|
+
def safely_synchronize
|
|
129
|
+
# Writes to @components should only happen through this proc. Because this proc is only accessible to callers of
|
|
130
|
+
# safely_synchronize, this forces all writers to go through this method.
|
|
131
|
+
write_components = proc do |new_value|
|
|
132
|
+
COMPONENTS_READ_LOCK.synchronize { @components = new_value }
|
|
133
|
+
end
|
|
82
134
|
|
|
83
|
-
|
|
84
|
-
|
|
135
|
+
COMPONENTS_WRITE_LOCK.synchronize do
|
|
136
|
+
begin
|
|
137
|
+
yield write_components
|
|
138
|
+
rescue ThreadError => e
|
|
139
|
+
logger_without_components.error(
|
|
140
|
+
'Detected deadlock during ddtrace initialization. ' \
|
|
141
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
|
142
|
+
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
|
143
|
+
)
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
end
|
|
85
147
|
end
|
|
86
148
|
|
|
87
|
-
|
|
149
|
+
def components?
|
|
150
|
+
# This does not need to grab the COMPONENTS_READ_LOCK because it's not returning the components
|
|
151
|
+
(defined?(@components) && @components) != nil
|
|
152
|
+
end
|
|
88
153
|
|
|
89
154
|
def build_components(settings)
|
|
90
155
|
components = Components.new(settings)
|
|
@@ -99,5 +164,32 @@ module Datadog
|
|
|
99
164
|
components.startup!(settings)
|
|
100
165
|
components
|
|
101
166
|
end
|
|
167
|
+
|
|
168
|
+
def logger_without_components
|
|
169
|
+
# Use default logger without initializing components.
|
|
170
|
+
# This enables logging during initialization, otherwise we'd run into deadlocks.
|
|
171
|
+
@temp_logger ||= begin
|
|
172
|
+
logger = configuration.logger.instance || Datadog::Logger.new($stdout)
|
|
173
|
+
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
174
|
+
logger
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Called from our at_exit hook whenever there was a pending Interrupt exception (e.g. typically due to ctrl+c)
|
|
179
|
+
# to print a nice message whenever we're taking a bit longer than usual to finish the process.
|
|
180
|
+
def handle_interrupt_shutdown!
|
|
181
|
+
logger = Datadog.logger
|
|
182
|
+
shutdown_thread = Thread.new { shutdown! }
|
|
183
|
+
print_message_treshold_seconds = 0.2
|
|
184
|
+
|
|
185
|
+
slow_shutdown = shutdown_thread.join(print_message_treshold_seconds).nil?
|
|
186
|
+
|
|
187
|
+
if slow_shutdown
|
|
188
|
+
logger.info 'Reporting remaining data... Press ctrl+c to exit immediately.'
|
|
189
|
+
shutdown_thread.join
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
nil
|
|
193
|
+
end
|
|
102
194
|
end
|
|
103
195
|
end
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: true
|
|
2
2
|
require 'ddtrace/diagnostics/health'
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/context_flush'
|
|
@@ -126,6 +126,7 @@ module Datadog
|
|
|
126
126
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
127
127
|
set_current_span(span.parent)
|
|
128
128
|
return if span.tracer.nil?
|
|
129
|
+
|
|
129
130
|
if span.parent.nil? && !all_spans_finished?
|
|
130
131
|
if Datadog.configuration.diagnostics.debug
|
|
131
132
|
opened_spans = @trace.length - @finished_spans
|
|
@@ -189,6 +190,9 @@ module Datadog
|
|
|
189
190
|
# Root span is finished at this point, we can configure it
|
|
190
191
|
annotate_for_flush!(@current_root_span)
|
|
191
192
|
|
|
193
|
+
# Allow caller to modify trace before context is reset
|
|
194
|
+
yield(trace) if block_given?
|
|
195
|
+
|
|
192
196
|
reset
|
|
193
197
|
[trace, sampled]
|
|
194
198
|
end
|
|
@@ -227,10 +231,24 @@ module Datadog
|
|
|
227
231
|
attach_origin(span) if @origin
|
|
228
232
|
end
|
|
229
233
|
|
|
234
|
+
def attach_sampling_priority(span)
|
|
235
|
+
span.set_metric(
|
|
236
|
+
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
237
|
+
@sampling_priority
|
|
238
|
+
)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def attach_origin(span)
|
|
242
|
+
span.set_tag(
|
|
243
|
+
Ext::DistributedTracing::ORIGIN_KEY,
|
|
244
|
+
@origin
|
|
245
|
+
)
|
|
246
|
+
end
|
|
247
|
+
|
|
230
248
|
# Return a string representation of the context.
|
|
231
249
|
def to_s
|
|
232
250
|
@mutex.synchronize do
|
|
233
|
-
# rubocop:disable
|
|
251
|
+
# rubocop:disable Layout/LineLength
|
|
234
252
|
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
|
235
253
|
end
|
|
236
254
|
end
|
|
@@ -282,24 +300,11 @@ module Datadog
|
|
|
282
300
|
@finished_spans > 0 && @trace.length == @finished_spans
|
|
283
301
|
end
|
|
284
302
|
|
|
285
|
-
def attach_sampling_priority(span)
|
|
286
|
-
span.set_metric(
|
|
287
|
-
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
288
|
-
@sampling_priority
|
|
289
|
-
)
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
def attach_origin(span)
|
|
293
|
-
span.set_tag(
|
|
294
|
-
Ext::DistributedTracing::ORIGIN_KEY,
|
|
295
|
-
@origin
|
|
296
|
-
)
|
|
297
|
-
end
|
|
298
|
-
|
|
299
303
|
# Return the start time of the root span, or nil if there are no spans or this is undefined.
|
|
300
304
|
def start_time
|
|
301
305
|
@mutex.synchronize do
|
|
302
306
|
return nil if @trace.empty?
|
|
307
|
+
|
|
303
308
|
@trace[0].start_time
|
|
304
309
|
end
|
|
305
310
|
end
|
|
@@ -312,11 +317,9 @@ module Datadog
|
|
|
312
317
|
end
|
|
313
318
|
|
|
314
319
|
# Iterate on each span within the trace. This is thread safe.
|
|
315
|
-
def each_span
|
|
320
|
+
def each_span(&block)
|
|
316
321
|
@mutex.synchronize do
|
|
317
|
-
@trace.each
|
|
318
|
-
yield span
|
|
319
|
-
end
|
|
322
|
+
@trace.each(&block)
|
|
320
323
|
end
|
|
321
324
|
end
|
|
322
325
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module ContextFlush
|
|
3
4
|
# Consumes only completed traces (where all spans have finished)
|
|
@@ -9,9 +10,15 @@ module Datadog
|
|
|
9
10
|
#
|
|
10
11
|
# @return [Array<Span>] trace to be flushed, or +nil+ if the trace is not finished
|
|
11
12
|
def consume!(context)
|
|
12
|
-
trace, sampled = context
|
|
13
|
+
trace, sampled = get_trace(context)
|
|
13
14
|
trace if sampled
|
|
14
15
|
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def get_trace(context)
|
|
20
|
+
context.get
|
|
21
|
+
end
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
# Performs partial trace flushing to avoid large traces residing in memory for too long
|
|
@@ -34,7 +41,7 @@ module Datadog
|
|
|
34
41
|
#
|
|
35
42
|
# @return [Array<Span>] partial or complete trace to be flushed, or +nil+ if no spans are finished
|
|
36
43
|
def consume!(context)
|
|
37
|
-
trace, sampled = context
|
|
44
|
+
trace, sampled = get_trace(context)
|
|
38
45
|
|
|
39
46
|
return nil unless sampled
|
|
40
47
|
return trace if trace && !trace.empty?
|
|
@@ -42,6 +49,12 @@ module Datadog
|
|
|
42
49
|
partial_trace(context)
|
|
43
50
|
end
|
|
44
51
|
|
|
52
|
+
protected
|
|
53
|
+
|
|
54
|
+
def get_trace(context)
|
|
55
|
+
context.get
|
|
56
|
+
end
|
|
57
|
+
|
|
45
58
|
private
|
|
46
59
|
|
|
47
60
|
def partial_trace(context)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
# DefaultContextProvider is a default context provider that retrieves
|
|
3
4
|
# all contexts from the current thread-local storage. It is suitable for
|
|
@@ -55,7 +56,6 @@ module Datadog
|
|
|
55
56
|
|
|
56
57
|
# Return the thread-local context.
|
|
57
58
|
def local(thread = Thread.current)
|
|
58
|
-
raise ArgumentError, '\'thread\' must be a Thread.' unless thread.is_a?(Thread)
|
|
59
59
|
thread[@key] ||= Datadog::Context.new
|
|
60
60
|
end
|
|
61
61
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/contrib/analytics'
|
|
2
3
|
require 'ddtrace/contrib/active_support/notifications/event'
|
|
3
4
|
require 'ddtrace/contrib/action_cable/ext'
|
|
@@ -8,8 +9,8 @@ module Datadog
|
|
|
8
9
|
# Defines basic behaviors for an event.
|
|
9
10
|
module Event
|
|
10
11
|
def self.included(base)
|
|
11
|
-
base.
|
|
12
|
-
base.
|
|
12
|
+
base.include(ActiveSupport::Notifications::Event)
|
|
13
|
+
base.extend(ClassMethods)
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
# Class methods for events.
|
|
@@ -34,8 +35,8 @@ module Datadog
|
|
|
34
35
|
# but to start a fresh tracing context.
|
|
35
36
|
module RootContextEvent
|
|
36
37
|
def self.included(base)
|
|
37
|
-
base.
|
|
38
|
-
base.
|
|
38
|
+
base.include(ActiveSupport::Notifications::Event)
|
|
39
|
+
base.extend(ClassMethods)
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
# Class methods for events.
|
|
@@ -56,6 +57,7 @@ module Datadog
|
|
|
56
57
|
# preventing such a leak.
|
|
57
58
|
def ensure_clean_context!
|
|
58
59
|
return unless configuration[:tracer].call_context.current_span
|
|
60
|
+
|
|
59
61
|
configuration[:tracer].provider.context = Context.new
|
|
60
62
|
end
|
|
61
63
|
end
|