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,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/sampling/matcher'
|
|
@@ -28,7 +29,7 @@ module Datadog
|
|
|
28
29
|
def match?(span)
|
|
29
30
|
@matcher.match?(span)
|
|
30
31
|
rescue => e
|
|
31
|
-
Datadog.logger.error("Matcher failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
32
|
+
Datadog.logger.error("Matcher failed. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
32
33
|
nil
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/ext/priority'
|
|
@@ -5,6 +6,7 @@ require 'ddtrace/ext/priority'
|
|
|
5
6
|
require 'ddtrace/ext/sampling'
|
|
6
7
|
require 'ddtrace/sampler'
|
|
7
8
|
require 'ddtrace/sampling/rate_limiter'
|
|
9
|
+
require 'ddtrace/sampling/rule'
|
|
8
10
|
|
|
9
11
|
module Datadog
|
|
10
12
|
module Sampling
|
|
@@ -45,15 +47,8 @@ module Datadog
|
|
|
45
47
|
@default_sampler = if default_sampler
|
|
46
48
|
default_sampler
|
|
47
49
|
elsif default_sample_rate
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# We address that here by not setting the rate in the constructor,
|
|
52
|
-
# but using the setter method.
|
|
53
|
-
#
|
|
54
|
-
# We don't want to make this change directly to \RateSampler
|
|
55
|
-
# because it breaks its current contract to existing users.
|
|
56
|
-
Datadog::RateSampler.new.tap { |s| s.sample_rate = default_sample_rate }
|
|
50
|
+
# Add to the end of the rule list a rule always matches any span
|
|
51
|
+
@rules << SimpleRule.new(sample_rate: default_sample_rate)
|
|
57
52
|
else
|
|
58
53
|
RateByServiceSampler.new(1.0, env: -> { Datadog.tracer.tags[:env] })
|
|
59
54
|
end
|
|
@@ -88,6 +83,7 @@ module Datadog
|
|
|
88
83
|
|
|
89
84
|
def update(*args)
|
|
90
85
|
return false unless @default_sampler.respond_to?(:update)
|
|
86
|
+
|
|
91
87
|
@default_sampler.update(*args)
|
|
92
88
|
end
|
|
93
89
|
|
|
@@ -109,7 +105,7 @@ module Datadog
|
|
|
109
105
|
set_limiter_metrics(span, rate_limiter.effective_rate)
|
|
110
106
|
end
|
|
111
107
|
rescue StandardError => e
|
|
112
|
-
Datadog.logger.error("Rule sampling failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
108
|
+
Datadog.logger.error("Rule sampling failed. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
113
109
|
yield(span)
|
|
114
110
|
end
|
|
115
111
|
|
data/lib/ddtrace/span.rb
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'time'
|
|
4
|
-
require 'thread'
|
|
5
|
-
|
|
6
5
|
require 'ddtrace/utils'
|
|
6
|
+
require 'ddtrace/ext/distributed'
|
|
7
|
+
require 'ddtrace/ext/environment'
|
|
7
8
|
require 'ddtrace/ext/errors'
|
|
9
|
+
require 'ddtrace/ext/http'
|
|
10
|
+
require 'ddtrace/ext/net'
|
|
8
11
|
require 'ddtrace/ext/priority'
|
|
9
|
-
require 'ddtrace/environment'
|
|
10
12
|
require 'ddtrace/analytics'
|
|
11
13
|
require 'ddtrace/forced_tracing'
|
|
12
14
|
require 'ddtrace/diagnostics/health'
|
|
@@ -38,14 +40,32 @@ module Datadog
|
|
|
38
40
|
EXTERNAL_MAX_ID = 1 << 64
|
|
39
41
|
|
|
40
42
|
# This limit is for numeric tags because uint64 could end up rounded.
|
|
41
|
-
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53)
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53).freeze
|
|
44
|
+
|
|
45
|
+
# Some associated values should always be sent as Tags, never as Metrics, regardless
|
|
46
|
+
# if their value is numeric or not.
|
|
47
|
+
# The Datadog agent will look for these values only as Tags, not Metrics.
|
|
48
|
+
# @see https://github.com/DataDog/datadog-agent/blob/2ae2cdd315bcda53166dd8fa0dedcfc448087b9d/pkg/trace/stats/aggregation.go#L13-L17
|
|
49
|
+
ENSURE_AGENT_TAGS = {
|
|
50
|
+
Ext::DistributedTracing::ORIGIN_KEY => true,
|
|
51
|
+
Ext::Environment::TAG_VERSION => true,
|
|
52
|
+
Ext::HTTP::STATUS_CODE => true,
|
|
53
|
+
Ext::NET::TAG_HOSTNAME => true
|
|
54
|
+
}.freeze
|
|
55
|
+
|
|
56
|
+
# Simple indirection used to contain the latest resource name for a span.
|
|
57
|
+
# The profiler keeps a reference to these objects while sampling so it can extract the latest resource after the
|
|
58
|
+
# fact, as some integrations only set the correct name at the end of the span.
|
|
59
|
+
ResourceContainer = Struct.new(:latest)
|
|
60
|
+
|
|
61
|
+
attr_accessor :name, :service, :span_type,
|
|
44
62
|
:span_id, :trace_id, :parent_id,
|
|
45
63
|
:status, :sampled,
|
|
46
|
-
:tracer, :context
|
|
64
|
+
:tracer, :context
|
|
47
65
|
|
|
48
|
-
attr_reader :parent
|
|
66
|
+
attr_reader :parent, :start_time, :end_time, :resource_container
|
|
67
|
+
|
|
68
|
+
attr_writer :duration
|
|
49
69
|
|
|
50
70
|
# Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
|
|
51
71
|
# and then <tt>finish()</tt> once the tracer operation is over.
|
|
@@ -61,7 +81,7 @@ module Datadog
|
|
|
61
81
|
|
|
62
82
|
@name = name
|
|
63
83
|
@service = options.fetch(:service, nil)
|
|
64
|
-
@
|
|
84
|
+
@resource_container = ResourceContainer.new(options.fetch(:resource, name))
|
|
65
85
|
@span_type = options.fetch(:span_type, nil)
|
|
66
86
|
|
|
67
87
|
@span_id = Datadog::Utils.next_id
|
|
@@ -101,11 +121,8 @@ module Datadog
|
|
|
101
121
|
# Keys must be unique between tags and metrics
|
|
102
122
|
@metrics.delete(key)
|
|
103
123
|
|
|
104
|
-
#
|
|
105
|
-
|
|
106
|
-
# DEV: This is necessary because the agent looks to `meta['http.status_code']` for
|
|
107
|
-
# tagging necessary metrics
|
|
108
|
-
value = value.to_s if key == Ext::HTTP::STATUS_CODE
|
|
124
|
+
# DEV: This is necessary because the agent looks at `meta[key]`, not `metrics[key]`.
|
|
125
|
+
value = value.to_s if ENSURE_AGENT_TAGS[key]
|
|
109
126
|
|
|
110
127
|
# NOTE: Adding numeric tags as metrics is stop-gap support
|
|
111
128
|
# for numeric typed tags. Eventually they will become
|
|
@@ -180,7 +197,7 @@ module Datadog
|
|
|
180
197
|
# behavior and so we maintain it for backward compatibility for those
|
|
181
198
|
# who are using async manual instrumentation that may rely on this
|
|
182
199
|
|
|
183
|
-
@start_time = start_time || Time.now.utc
|
|
200
|
+
@start_time = start_time || Utils::Time.now.utc
|
|
184
201
|
@duration_start = start_time.nil? ? duration_marker : nil
|
|
185
202
|
|
|
186
203
|
self
|
|
@@ -206,7 +223,7 @@ module Datadog
|
|
|
206
223
|
|
|
207
224
|
@allocation_count_finish = now_allocations
|
|
208
225
|
|
|
209
|
-
now = Time.now.utc
|
|
226
|
+
now = Utils::Time.now.utc
|
|
210
227
|
|
|
211
228
|
# Provide a default start_time if unset.
|
|
212
229
|
# Using `now` here causes duration to be 0; this is expected
|
|
@@ -272,7 +289,7 @@ module Datadog
|
|
|
272
289
|
trace_id: @trace_id,
|
|
273
290
|
name: @name,
|
|
274
291
|
service: @service,
|
|
275
|
-
resource:
|
|
292
|
+
resource: resource,
|
|
276
293
|
type: @span_type,
|
|
277
294
|
meta: @meta,
|
|
278
295
|
metrics: @metrics,
|
|
@@ -326,7 +343,7 @@ module Datadog
|
|
|
326
343
|
packer.write('service')
|
|
327
344
|
packer.write(@service)
|
|
328
345
|
packer.write('resource')
|
|
329
|
-
packer.write(
|
|
346
|
+
packer.write(resource)
|
|
330
347
|
packer.write('type')
|
|
331
348
|
packer.write(@span_type)
|
|
332
349
|
packer.write('meta')
|
|
@@ -358,7 +375,7 @@ module Datadog
|
|
|
358
375
|
q.text "Trace ID: #{@trace_id}\n"
|
|
359
376
|
q.text "Type: #{@span_type}\n"
|
|
360
377
|
q.text "Service: #{@service}\n"
|
|
361
|
-
q.text "Resource: #{
|
|
378
|
+
q.text "Resource: #{resource}\n"
|
|
362
379
|
q.text "Error: #{@status}\n"
|
|
363
380
|
q.text "Start: #{start_time}\n"
|
|
364
381
|
q.text "End: #{end_time}\n"
|
|
@@ -397,6 +414,14 @@ module Datadog
|
|
|
397
414
|
end
|
|
398
415
|
end
|
|
399
416
|
|
|
417
|
+
def resource
|
|
418
|
+
@resource_container.latest
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
def resource=(resource)
|
|
422
|
+
@resource_container.latest = resource
|
|
423
|
+
end
|
|
424
|
+
|
|
400
425
|
private
|
|
401
426
|
|
|
402
427
|
def duration_marker
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/ext/net'
|
|
2
|
-
require '
|
|
3
|
+
require 'datadog/core/environment/socket'
|
|
3
4
|
require 'ddtrace/runtime/metrics'
|
|
5
|
+
require 'ddtrace/utils/only_once'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
6
8
|
# SyncWriter flushes both services and traces synchronously
|
|
7
9
|
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
10
|
+
#
|
|
11
|
+
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
12
|
+
# the separate `datadog-lambda` uses it as of February 2021:
|
|
13
|
+
# <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
|
|
8
14
|
class SyncWriter
|
|
15
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
16
|
+
|
|
9
17
|
attr_reader \
|
|
10
18
|
:priority_sampler,
|
|
11
19
|
:transport
|
|
@@ -13,7 +21,8 @@ module Datadog
|
|
|
13
21
|
def initialize(options = {})
|
|
14
22
|
@transport = options.fetch(:transport) do
|
|
15
23
|
transport_options = options.fetch(:transport_options, {})
|
|
16
|
-
|
|
24
|
+
transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
|
|
25
|
+
Transport::HTTP.default(**transport_options)
|
|
17
26
|
end
|
|
18
27
|
|
|
19
28
|
@priority_sampler = options.fetch(:priority_sampler, nil)
|
|
@@ -21,17 +30,15 @@ module Datadog
|
|
|
21
30
|
|
|
22
31
|
def write(trace, services = nil)
|
|
23
32
|
unless services.nil?
|
|
24
|
-
|
|
33
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
25
34
|
Datadog.logger.warn(%(
|
|
26
35
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
27
|
-
write(traces, services) can be
|
|
36
|
+
write(traces, services) can be updated to write(traces)
|
|
28
37
|
))
|
|
29
38
|
end
|
|
30
39
|
end
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
proc { flush_trace(trace) }
|
|
34
|
-
)
|
|
41
|
+
flush_trace(trace)
|
|
35
42
|
rescue => e
|
|
36
43
|
Datadog.logger.debug(e)
|
|
37
44
|
end
|
|
@@ -44,23 +51,18 @@ module Datadog
|
|
|
44
51
|
|
|
45
52
|
private
|
|
46
53
|
|
|
47
|
-
def perform_concurrently(*tasks)
|
|
48
|
-
tasks.map { |task| Thread.new(&task) }.each(&:join)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
54
|
def flush_trace(trace)
|
|
52
55
|
processed_traces = Pipeline.process!([trace])
|
|
53
56
|
return if processed_traces.empty?
|
|
57
|
+
|
|
54
58
|
inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
|
|
55
59
|
transport.send_traces(processed_traces)
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def inject_hostname!(trace)
|
|
59
63
|
unless trace.first.nil?
|
|
60
|
-
hostname = Datadog::
|
|
61
|
-
unless hostname.nil? || hostname.empty?
|
|
62
|
-
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
63
|
-
end
|
|
64
|
+
hostname = Datadog::Core::Environment::Socket.hostname
|
|
65
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
64
66
|
end
|
|
65
67
|
end
|
|
66
68
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Wraps command with Datadog tracing
|
|
5
|
+
class Exec
|
|
6
|
+
attr_reader :args
|
|
7
|
+
|
|
8
|
+
def initialize(args)
|
|
9
|
+
@args = args
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
set_rubyopt!
|
|
14
|
+
exec_with_error_handling(args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def rubyopts
|
|
18
|
+
[
|
|
19
|
+
'-rddtrace/profiling/preload'
|
|
20
|
+
]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def set_rubyopt!
|
|
26
|
+
existing_rubyopt = ENV['RUBYOPT']
|
|
27
|
+
|
|
28
|
+
ENV['RUBYOPT'] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(' ')}" : rubyopts.join(' ')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
|
32
|
+
# follow the same status codes as the shell uses
|
|
33
|
+
# See also:
|
|
34
|
+
# * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
|
|
35
|
+
# * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
|
|
36
|
+
def exec_with_error_handling(args)
|
|
37
|
+
Kernel.exec(*args)
|
|
38
|
+
rescue Errno::ENOENT => e
|
|
39
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
40
|
+
Kernel.exit 127
|
|
41
|
+
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
42
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
43
|
+
Kernel.exit 126
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Prints help message for usage of `ddtrace`
|
|
5
|
+
class Help
|
|
6
|
+
def run
|
|
7
|
+
puts %(
|
|
8
|
+
Usage: ddtrace [command] [arguments]
|
|
9
|
+
exec [command]: Executes command with tracing & profiling preloaded.
|
|
10
|
+
help: Prints this help message.
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: true
|
|
2
2
|
require 'logger'
|
|
3
3
|
require 'pathname'
|
|
4
4
|
|
|
5
|
-
require 'ddtrace/environment'
|
|
5
|
+
require 'ddtrace/ext/environment'
|
|
6
6
|
require 'ddtrace/span'
|
|
7
7
|
require 'ddtrace/context'
|
|
8
8
|
require 'ddtrace/logger'
|
|
9
9
|
require 'ddtrace/writer'
|
|
10
|
+
require 'datadog/core/environment/identity'
|
|
10
11
|
require 'ddtrace/sampler'
|
|
11
12
|
require 'ddtrace/sampling'
|
|
12
13
|
require 'ddtrace/correlation'
|
|
14
|
+
require 'ddtrace/event'
|
|
15
|
+
require 'ddtrace/utils/only_once'
|
|
13
16
|
|
|
14
17
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
15
18
|
module Datadog
|
|
@@ -19,6 +22,9 @@ module Datadog
|
|
|
19
22
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
|
20
23
|
# rubocop:disable Metrics/ClassLength
|
|
21
24
|
class Tracer
|
|
25
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
26
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
27
|
+
|
|
22
28
|
attr_reader :sampler, :tags, :provider, :context_flush
|
|
23
29
|
attr_accessor :enabled, :writer
|
|
24
30
|
attr_writer :default_service
|
|
@@ -27,8 +33,7 @@ module Datadog
|
|
|
27
33
|
DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
|
|
28
34
|
|
|
29
35
|
def services
|
|
30
|
-
|
|
31
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
36
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
32
37
|
Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
|
|
33
38
|
end
|
|
34
39
|
|
|
@@ -59,8 +64,8 @@ module Datadog
|
|
|
59
64
|
#
|
|
60
65
|
# This method makes use of a \ContextProvider that is automatically set during the tracer
|
|
61
66
|
# initialization, or while using a library instrumentation.
|
|
62
|
-
def call_context
|
|
63
|
-
@provider.context
|
|
67
|
+
def call_context(key = nil)
|
|
68
|
+
@provider.context(key)
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
# Initialize a new \Tracer used to create, sample and submit spans that measure the
|
|
@@ -70,7 +75,9 @@ module Datadog
|
|
|
70
75
|
# by default.
|
|
71
76
|
def initialize(options = {})
|
|
72
77
|
# Configurable options
|
|
73
|
-
@context_flush = if options[:
|
|
78
|
+
@context_flush = if options[:context_flush]
|
|
79
|
+
options[:context_flush]
|
|
80
|
+
elsif options[:partial_flush]
|
|
74
81
|
Datadog::ContextFlush::Partial.new(options)
|
|
75
82
|
else
|
|
76
83
|
Datadog::ContextFlush::Finished.new
|
|
@@ -78,14 +85,13 @@ module Datadog
|
|
|
78
85
|
|
|
79
86
|
@default_service = options[:default_service]
|
|
80
87
|
@enabled = options.fetch(:enabled, true)
|
|
81
|
-
@provider = options
|
|
88
|
+
@provider = options[:context_provider] || Datadog::DefaultContextProvider.new
|
|
82
89
|
@sampler = options.fetch(:sampler, Datadog::AllSampler.new)
|
|
83
90
|
@tags = options.fetch(:tags, {})
|
|
84
|
-
@writer = options.fetch(:writer
|
|
91
|
+
@writer = options.fetch(:writer) { Datadog::Writer.new }
|
|
85
92
|
|
|
86
93
|
# Instance variables
|
|
87
94
|
@mutex = Mutex.new
|
|
88
|
-
@provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
|
|
89
95
|
|
|
90
96
|
# Enable priority sampling by default
|
|
91
97
|
activate_priority_sampling!(@sampler)
|
|
@@ -114,8 +120,10 @@ module Datadog
|
|
|
114
120
|
|
|
115
121
|
configure_writer(options)
|
|
116
122
|
|
|
117
|
-
if options.key?(:partial_flush)
|
|
118
|
-
@context_flush = if options[:
|
|
123
|
+
if options.key?(:context_flush) || options.key?(:partial_flush)
|
|
124
|
+
@context_flush = if options[:context_flush]
|
|
125
|
+
options[:context_flush]
|
|
126
|
+
elsif options[:partial_flush]
|
|
119
127
|
Datadog::ContextFlush::Partial.new(options)
|
|
120
128
|
else
|
|
121
129
|
Datadog::ContextFlush::Finished.new
|
|
@@ -129,8 +137,7 @@ module Datadog
|
|
|
129
137
|
#
|
|
130
138
|
# set_service_info is deprecated, no service information needs to be tracked
|
|
131
139
|
def set_service_info(service, app, app_type)
|
|
132
|
-
|
|
133
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
140
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
134
141
|
Datadog.logger.warn(%(
|
|
135
142
|
set_service_info: Usage of set_service_info has been deprecated,
|
|
136
143
|
service information no longer needs to be reported to the trace agent.
|
|
@@ -142,14 +149,7 @@ module Datadog
|
|
|
142
149
|
# for non-root spans which have a parent. However, root spans without
|
|
143
150
|
# a service would be invalid and rejected.
|
|
144
151
|
def default_service
|
|
145
|
-
|
|
146
|
-
begin
|
|
147
|
-
@default_service = File.basename($PROGRAM_NAME, '.*')
|
|
148
|
-
rescue StandardError => e
|
|
149
|
-
Datadog.logger.error("unable to guess default service: #{e}")
|
|
150
|
-
@default_service = 'ruby'.freeze
|
|
151
|
-
end
|
|
152
|
-
@default_service
|
|
152
|
+
@default_service ||= Datadog::Ext::Environment::FALLBACK_SERVICE_NAME
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
|
@@ -158,7 +158,7 @@ module Datadog
|
|
|
158
158
|
#
|
|
159
159
|
# tracer.set_tags('env' => 'prod', 'component' => 'core')
|
|
160
160
|
def set_tags(tags)
|
|
161
|
-
string_tags =
|
|
161
|
+
string_tags = tags.collect { |k, v| [k.to_s, v] }.to_h
|
|
162
162
|
@tags = @tags.merge(string_tags)
|
|
163
163
|
end
|
|
164
164
|
|
|
@@ -201,6 +201,7 @@ module Datadog
|
|
|
201
201
|
# root span
|
|
202
202
|
@sampler.sample!(span)
|
|
203
203
|
span.set_tag('system.pid', Process.pid)
|
|
204
|
+
span.set_tag(Datadog::Ext::Runtime::TAG_ID, Datadog::Core::Environment::Identity.id)
|
|
204
205
|
|
|
205
206
|
if ctx && ctx.trace_id
|
|
206
207
|
span.trace_id = ctx.trace_id
|
|
@@ -287,8 +288,19 @@ module Datadog
|
|
|
287
288
|
# and it is user code which should be executed no matter what.
|
|
288
289
|
# It's not a problem since we re-raise it afterwards so for example a
|
|
289
290
|
# SignalException::Interrupt would still bubble up.
|
|
291
|
+
# rubocop:disable Metrics/BlockNesting
|
|
290
292
|
rescue Exception => e
|
|
291
|
-
(options[:on_error]
|
|
293
|
+
if (on_error_handler = options[:on_error]) && on_error_handler.respond_to?(:call)
|
|
294
|
+
begin
|
|
295
|
+
on_error_handler.call(span, e)
|
|
296
|
+
rescue
|
|
297
|
+
Datadog.logger.debug('Custom on_error handler failed, falling back to default')
|
|
298
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
299
|
+
end
|
|
300
|
+
else
|
|
301
|
+
Datadog.logger.debug('Custom on_error handler must be a callable, falling back to default') if on_error_handler
|
|
302
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
303
|
+
end
|
|
292
304
|
raise e
|
|
293
305
|
ensure
|
|
294
306
|
span.finish unless span.nil?
|
|
@@ -300,6 +312,10 @@ module Datadog
|
|
|
300
312
|
end
|
|
301
313
|
end
|
|
302
314
|
|
|
315
|
+
def trace_completed
|
|
316
|
+
@trace_completed ||= TraceCompleted.new
|
|
317
|
+
end
|
|
318
|
+
|
|
303
319
|
# Record the given +context+. For compatibility with previous versions,
|
|
304
320
|
# +context+ can also be a span. It is similar to the +child_of+ argument,
|
|
305
321
|
# method will figure out what to do, submitting a +span+ for recording
|
|
@@ -324,18 +340,18 @@ module Datadog
|
|
|
324
340
|
end
|
|
325
341
|
|
|
326
342
|
# Return the current active span or +nil+.
|
|
327
|
-
def active_span
|
|
328
|
-
call_context.current_span
|
|
343
|
+
def active_span(key = nil)
|
|
344
|
+
call_context(key).current_span
|
|
329
345
|
end
|
|
330
346
|
|
|
331
347
|
# Return the current active root span or +nil+.
|
|
332
|
-
def active_root_span
|
|
333
|
-
call_context.current_root_span
|
|
348
|
+
def active_root_span(key = nil)
|
|
349
|
+
call_context(key).current_root_span
|
|
334
350
|
end
|
|
335
351
|
|
|
336
352
|
# Return a CorrelationIdentifier for active span
|
|
337
|
-
def active_correlation
|
|
338
|
-
Datadog::Correlation.identifier_from_context(call_context)
|
|
353
|
+
def active_correlation(key = nil)
|
|
354
|
+
Datadog::Correlation.identifier_from_context(call_context(key))
|
|
339
355
|
end
|
|
340
356
|
|
|
341
357
|
# Send the trace to the writer to enqueue the spans list in the agent
|
|
@@ -351,24 +367,34 @@ module Datadog
|
|
|
351
367
|
end
|
|
352
368
|
|
|
353
369
|
@writer.write(trace)
|
|
370
|
+
trace_completed.publish(trace)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Triggered whenever a trace is completed
|
|
374
|
+
class TraceCompleted < Datadog::Event
|
|
375
|
+
def initialize
|
|
376
|
+
super(:trace_completed)
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
# NOTE: Ignore Rubocop rule. This definition allows for
|
|
380
|
+
# description of and constraints on arguments.
|
|
381
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
|
382
|
+
def publish(trace)
|
|
383
|
+
super(trace)
|
|
384
|
+
end
|
|
385
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
|
354
386
|
end
|
|
355
387
|
|
|
356
388
|
# TODO: Move this kind of configuration building out of the tracer.
|
|
357
389
|
# Tracer should not have this kind of knowledge of writer.
|
|
358
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
|
359
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
360
|
-
# rubocop:disable Metrics/MethodLength
|
|
361
390
|
def configure_writer(options = {})
|
|
362
|
-
hostname = options.fetch(:hostname, nil)
|
|
363
|
-
port = options.fetch(:port, nil)
|
|
364
391
|
sampler = options.fetch(:sampler, nil)
|
|
365
392
|
priority_sampling = options.fetch(:priority_sampling, nil)
|
|
366
393
|
writer = options.fetch(:writer, nil)
|
|
367
|
-
|
|
394
|
+
agent_settings = options.fetch(:agent_settings, nil)
|
|
368
395
|
|
|
369
396
|
# Compile writer options
|
|
370
397
|
writer_options = options.fetch(:writer_options, {}).dup
|
|
371
|
-
rebuild_writer = !writer_options.empty?
|
|
372
398
|
|
|
373
399
|
# Re-build the sampler and writer if priority sampling is enabled,
|
|
374
400
|
# but neither are configured. Verify the sampler isn't already a
|
|
@@ -381,35 +407,20 @@ module Datadog
|
|
|
381
407
|
end
|
|
382
408
|
elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
|
|
383
409
|
writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
|
|
384
|
-
rebuild_writer = true
|
|
385
410
|
elsif priority_sampling == false
|
|
386
411
|
deactivate_priority_sampling!(sampler)
|
|
387
|
-
rebuild_writer = true
|
|
388
412
|
elsif @sampler.is_a?(PrioritySampler)
|
|
389
413
|
# Make sure to add sampler to options if transport is rebuilt.
|
|
390
414
|
writer_options[:priority_sampler] = @sampler
|
|
391
415
|
end
|
|
392
416
|
|
|
393
|
-
|
|
394
|
-
if transport_options.is_a?(Proc)
|
|
395
|
-
transport_options = { on_build: transport_options }
|
|
396
|
-
rebuild_writer = true
|
|
397
|
-
end
|
|
417
|
+
writer_options[:agent_settings] = agent_settings if agent_settings
|
|
398
418
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
rebuild_writer = true
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
writer_options[:transport_options] = transport_options
|
|
419
|
+
# Make sure old writer is shut down before throwing away.
|
|
420
|
+
# Don't want additional threads running...
|
|
421
|
+
@writer.stop unless writer.nil?
|
|
406
422
|
|
|
407
|
-
|
|
408
|
-
# Make sure old writer is shut down before throwing away.
|
|
409
|
-
# Don't want additional threads running...
|
|
410
|
-
@writer.stop unless writer.nil?
|
|
411
|
-
@writer = writer || Writer.new(writer_options)
|
|
412
|
-
end
|
|
423
|
+
@writer = writer || Writer.new(writer_options)
|
|
413
424
|
end
|
|
414
425
|
|
|
415
426
|
def activate_priority_sampling!(base_sampler = nil)
|