ddtrace 0.13.0 → 0.47.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/.circleci/config.yml +598 -381
- data/.circleci/images/primary/Dockerfile-2.0.0 +6 -2
- data/.circleci/images/primary/Dockerfile-2.1.10 +6 -2
- data/.circleci/images/primary/Dockerfile-2.2.10 +6 -2
- data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
- data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
- data/.circleci/images/primary/{Dockerfile-2.3.7 → Dockerfile-2.5.6} +2 -2
- data/.circleci/images/primary/{Dockerfile-2.4.4 → Dockerfile-2.6.4} +2 -2
- data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +78 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
- data/.circleci/images/primary/{Dockerfile-1.9.3 → Dockerfile-truffleruby-21.0.0} +6 -2
- data/.env +5 -2
- data/.github/CODEOWNERS +1 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.rubocop.yml +270 -6
- data/.rubocop_todo.yml +397 -0
- data/.simplecov +47 -0
- data/Appraisals +933 -127
- data/CHANGELOG.md +2106 -97
- data/CONTRIBUTING.md +85 -0
- data/Gemfile +55 -2
- data/LICENSE +4 -22
- data/LICENSE-3rdparty.csv +2 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +5 -34
- data/Rakefile +825 -351
- data/benchmarks/postgres_database.yml +9 -0
- data/benchmarks/sidekiq_test.rb +154 -0
- data/ddtrace.gemspec +8 -17
- data/docker-compose.yml +260 -47
- data/docs/DevelopmentGuide.md +249 -0
- data/docs/GettingStarted.md +1435 -290
- data/integration/README.md +68 -0
- data/integration/apps/rack/.dockerignore +1 -0
- data/integration/apps/rack/.envrc.sample +1 -0
- data/integration/apps/rack/.gitignore +4 -0
- data/integration/apps/rack/.rspec +1 -0
- data/integration/apps/rack/Dockerfile +25 -0
- data/integration/apps/rack/Dockerfile-ci +11 -0
- data/integration/apps/rack/Gemfile +24 -0
- data/integration/apps/rack/README.md +93 -0
- data/integration/apps/rack/app/acme.rb +80 -0
- data/integration/apps/rack/app/datadog.rb +17 -0
- data/integration/apps/rack/bin/run +22 -0
- data/integration/apps/rack/bin/setup +17 -0
- data/integration/apps/rack/bin/test +24 -0
- data/integration/apps/rack/config.ru +6 -0
- data/integration/apps/rack/config/puma.rb +14 -0
- data/integration/apps/rack/config/unicorn.rb +23 -0
- data/integration/apps/rack/docker-compose.ci.yml +62 -0
- data/integration/apps/rack/docker-compose.yml +78 -0
- data/integration/apps/rack/script/build-images +38 -0
- data/integration/apps/rack/script/ci +50 -0
- data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rack/spec/spec_helper.rb +16 -0
- data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/.dockerignore +1 -0
- data/integration/apps/rails-five/.env +3 -0
- data/integration/apps/rails-five/.envrc.sample +1 -0
- data/integration/apps/rails-five/.gitignore +30 -0
- data/integration/apps/rails-five/Dockerfile +25 -0
- data/integration/apps/rails-five/Dockerfile-ci +11 -0
- data/integration/apps/rails-five/Gemfile +104 -0
- data/integration/apps/rails-five/README.md +94 -0
- data/integration/apps/rails-five/Rakefile +6 -0
- data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
- data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
- data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
- data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
- data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
- data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
- data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
- data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
- data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
- data/integration/apps/rails-five/app/models/application_record.rb +3 -0
- data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/models/test.rb +2 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
- data/integration/apps/rails-five/bin/bundle +3 -0
- data/integration/apps/rails-five/bin/rails +9 -0
- data/integration/apps/rails-five/bin/rake +9 -0
- data/integration/apps/rails-five/bin/run +24 -0
- data/integration/apps/rails-five/bin/setup +27 -0
- data/integration/apps/rails-five/bin/spring +17 -0
- data/integration/apps/rails-five/bin/test +21 -0
- data/integration/apps/rails-five/bin/update +28 -0
- data/integration/apps/rails-five/config.ru +5 -0
- data/integration/apps/rails-five/config/application.rb +97 -0
- data/integration/apps/rails-five/config/boot.rb +4 -0
- data/integration/apps/rails-five/config/cable.yml +10 -0
- data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
- data/integration/apps/rails-five/config/database.yml +28 -0
- data/integration/apps/rails-five/config/environment.rb +5 -0
- data/integration/apps/rails-five/config/environments/development.rb +51 -0
- data/integration/apps/rails-five/config/environments/production.rb +82 -0
- data/integration/apps/rails-five/config/environments/test.rb +43 -0
- data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
- data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
- data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
- data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
- data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
- data/integration/apps/rails-five/config/locales/en.yml +33 -0
- data/integration/apps/rails-five/config/puma.rb +24 -0
- data/integration/apps/rails-five/config/routes.rb +11 -0
- data/integration/apps/rails-five/config/spring.rb +6 -0
- data/integration/apps/rails-five/config/unicorn.rb +29 -0
- data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
- data/integration/apps/rails-five/db/schema.rb +23 -0
- data/integration/apps/rails-five/db/seeds.rb +7 -0
- data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
- data/integration/apps/rails-five/docker-compose.yml +100 -0
- data/integration/apps/rails-five/lib/tasks/.keep +0 -0
- data/integration/apps/rails-five/log/.keep +0 -0
- data/integration/apps/rails-five/public/robots.txt +1 -0
- data/integration/apps/rails-five/script/build-images +35 -0
- data/integration/apps/rails-five/script/ci +50 -0
- data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
- data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/storage/.keep +0 -0
- data/integration/apps/rails-five/tmp/.keep +0 -0
- data/integration/apps/rails-five/vendor/.keep +0 -0
- data/integration/apps/ruby/.dockerignore +1 -0
- data/integration/apps/ruby/.envrc.sample +1 -0
- data/integration/apps/ruby/.gitignore +2 -0
- data/integration/apps/ruby/Dockerfile +25 -0
- data/integration/apps/ruby/Dockerfile-ci +11 -0
- data/integration/apps/ruby/Gemfile +11 -0
- data/integration/apps/ruby/README.md +70 -0
- data/integration/apps/ruby/agent.yaml +3 -0
- data/integration/apps/ruby/app/datadog.rb +13 -0
- data/integration/apps/ruby/app/fibonacci.rb +58 -0
- data/integration/apps/ruby/bin/run +20 -0
- data/integration/apps/ruby/bin/setup +17 -0
- data/integration/apps/ruby/bin/test +21 -0
- data/integration/apps/ruby/docker-compose.ci.yml +51 -0
- data/integration/apps/ruby/docker-compose.yml +63 -0
- data/integration/apps/ruby/script/build-images +38 -0
- data/integration/apps/ruby/script/ci +50 -0
- data/integration/images/agent/Dockerfile +2 -0
- data/integration/images/agent/agent.yaml +3 -0
- data/integration/images/include/datadog/analyzer.rb +71 -0
- data/integration/images/include/datadog/demo_env.rb +101 -0
- data/integration/images/include/http-health-check +33 -0
- data/integration/images/ruby/2.0/Dockerfile +54 -0
- data/integration/images/ruby/2.1/Dockerfile +54 -0
- data/integration/images/ruby/2.2/Dockerfile +54 -0
- data/integration/images/ruby/2.3/Dockerfile +70 -0
- data/integration/images/ruby/2.4/Dockerfile +54 -0
- data/integration/images/ruby/2.5/Dockerfile +54 -0
- data/integration/images/ruby/2.6/Dockerfile +54 -0
- data/integration/images/ruby/2.7/Dockerfile +54 -0
- data/integration/images/ruby/3.0/Dockerfile +54 -0
- data/integration/images/wrk/Dockerfile +33 -0
- data/integration/images/wrk/scripts/entrypoint.sh +17 -0
- data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
- data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
- data/integration/script/build-images +43 -0
- data/lib/ddtrace.rb +65 -62
- data/lib/ddtrace/analytics.rb +38 -0
- data/lib/ddtrace/auto_instrument.rb +3 -0
- data/lib/ddtrace/auto_instrument_base.rb +6 -0
- data/lib/ddtrace/buffer.rb +298 -32
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +151 -26
- data/lib/ddtrace/configuration/base.rb +84 -0
- data/lib/ddtrace/configuration/components.rb +151 -0
- data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
- data/lib/ddtrace/configuration/option.rb +64 -0
- data/lib/ddtrace/configuration/option_definition.rb +121 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +111 -0
- data/lib/ddtrace/configuration/pin_setup.rb +4 -3
- data/lib/ddtrace/configuration/settings.rb +299 -0
- data/lib/ddtrace/context.rb +133 -66
- data/lib/ddtrace/context_flush.rb +51 -114
- data/lib/ddtrace/context_provider.rb +61 -0
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +66 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +26 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +146 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +25 -0
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +19 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +23 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/action_view/event.rb +35 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +46 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +49 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +20 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +74 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +52 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +47 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +14 -3
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +20 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +40 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +12 -45
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +128 -0
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/active_record/event.rb +1 -1
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +17 -8
- data/lib/ddtrace/contrib/active_record/events/sql.rb +32 -12
- data/lib/ddtrace/contrib/active_record/ext.rb +24 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +53 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +5 -35
- data/lib/ddtrace/contrib/active_record/utils.rb +85 -31
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +258 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +69 -0
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +27 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +46 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -2
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -2
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +20 -12
- data/lib/ddtrace/contrib/active_support/patcher.rb +23 -0
- data/lib/ddtrace/contrib/analytics.rb +24 -0
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/aws/ext.rb +23 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +37 -19
- data/lib/ddtrace/contrib/aws/integration.rb +42 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +30 -40
- data/lib/ddtrace/contrib/aws/services.rb +3 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +20 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +41 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +12 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +38 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +28 -0
- data/lib/ddtrace/contrib/configurable.rb +102 -0
- data/lib/ddtrace/contrib/configuration/resolver.rb +81 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +55 -0
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +20 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +36 -17
- data/lib/ddtrace/contrib/dalli/integration.rb +38 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +13 -41
- data/lib/ddtrace/contrib/dalli/quantize.rb +4 -4
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +23 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +38 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +28 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +84 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +22 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +39 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +49 -50
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +151 -0
- data/lib/ddtrace/contrib/ethon/ext.rb +19 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +43 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +84 -0
- data/lib/ddtrace/contrib/ethon/patcher.rb +25 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/excon/ext.rb +17 -0
- data/lib/ddtrace/contrib/excon/integration.rb +43 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +47 -23
- data/lib/ddtrace/contrib/excon/patcher.rb +7 -30
- data/lib/ddtrace/contrib/extensions.rb +143 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +17 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +43 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +46 -29
- data/lib/ddtrace/contrib/faraday/patcher.rb +36 -56
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +192 -120
- data/lib/ddtrace/contrib/grape/ext.rb +23 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
- data/lib/ddtrace/contrib/grape/integration.rb +39 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +15 -59
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +16 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +39 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +37 -34
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +36 -27
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +17 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +20 -5
- data/lib/ddtrace/contrib/grpc/ext.rb +18 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +8 -38
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +37 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/http/ext.rb +17 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +179 -0
- data/lib/ddtrace/contrib/http/integration.rb +45 -0
- data/lib/ddtrace/contrib/http/patcher.rb +9 -144
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +157 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +38 -0
- data/lib/ddtrace/contrib/integration.rb +16 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +23 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +69 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +38 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +11 -74
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +57 -18
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +18 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +64 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +38 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +9 -25
- data/lib/ddtrace/contrib/patchable.rb +70 -0
- data/lib/ddtrace/contrib/patcher.rb +65 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/presto/ext.rb +28 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +110 -0
- data/lib/ddtrace/contrib/presto/integration.rb +38 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +33 -0
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +43 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +57 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/racecar/event.rb +22 -7
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
- data/lib/ddtrace/contrib/racecar/ext.rb +25 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +39 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +11 -42
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +46 -0
- data/lib/ddtrace/contrib/rack/ext.rb +21 -0
- data/lib/ddtrace/contrib/rack/integration.rb +45 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +105 -54
- data/lib/ddtrace/contrib/rack/patcher.rb +65 -49
- data/lib/ddtrace/contrib/rack/request_queue.rb +17 -7
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +93 -0
- data/lib/ddtrace/contrib/rails/ext.rb +17 -0
- data/lib/ddtrace/contrib/rails/framework.rb +82 -33
- data/lib/ddtrace/contrib/rails/integration.rb +44 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +8 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +88 -34
- data/lib/ddtrace/contrib/rails/railtie.rb +5 -9
- data/lib/ddtrace/contrib/rails/utils.rb +7 -31
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/rake/ext.rb +21 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +33 -13
- data/lib/ddtrace/contrib/rake/integration.rb +38 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +10 -33
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +45 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/redis/ext.rb +22 -0
- data/lib/ddtrace/contrib/redis/integration.rb +42 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +58 -53
- data/lib/ddtrace/contrib/redis/quantize.rb +47 -1
- data/lib/ddtrace/contrib/redis/tags.rb +33 -7
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +158 -0
- data/lib/ddtrace/contrib/registerable.rb +33 -0
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/resque/ext.rb +17 -0
- data/lib/ddtrace/contrib/resque/integration.rb +47 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +16 -38
- data/lib/ddtrace/contrib/resque/resque_job.rb +61 -20
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +17 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +38 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +23 -0
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +91 -0
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/rspec/example.rb +75 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/sequel/database.rb +9 -4
- data/lib/ddtrace/contrib/sequel/dataset.rb +7 -3
- data/lib/ddtrace/contrib/sequel/ext.rb +19 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +38 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +6 -29
- data/lib/ddtrace/contrib/sequel/utils.rb +60 -14
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +21 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +39 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +51 -0
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +37 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +27 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +38 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +22 -14
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +65 -0
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +44 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +39 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +27 -9
- data/lib/ddtrace/contrib/sinatra/ext.rb +27 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/integration.rb +38 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +28 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +79 -65
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +60 -16
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +53 -0
- data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +21 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +29 -5
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +38 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +21 -33
- data/lib/ddtrace/correlation.rb +39 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +279 -0
- data/lib/ddtrace/diagnostics/health.rb +33 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +71 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +43 -0
- data/lib/ddtrace/encoding.rb +36 -32
- data/lib/ddtrace/environment.rb +41 -0
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +12 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +297 -0
- data/lib/ddtrace/ext/correlation.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +36 -0
- data/lib/ddtrace/ext/distributed.rb +22 -0
- data/lib/ddtrace/ext/environment.rb +16 -0
- data/lib/ddtrace/ext/forced_tracing.rb +25 -0
- data/lib/ddtrace/ext/git.rb +11 -0
- data/lib/ddtrace/ext/http.rb +4 -2
- data/lib/ddtrace/ext/integration.rb +8 -0
- data/lib/ddtrace/ext/manual_tracing.rb +9 -0
- data/lib/ddtrace/ext/metrics.rb +15 -0
- data/lib/ddtrace/ext/net.rb +2 -0
- data/lib/ddtrace/ext/runtime.rb +30 -0
- data/lib/ddtrace/ext/sampling.rb +16 -0
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/ext/transport.rb +18 -0
- data/lib/ddtrace/forced_tracing.rb +38 -0
- data/lib/ddtrace/logger.rb +5 -4
- data/lib/ddtrace/metrics.rb +226 -0
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/opentracer.rb +40 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
- data/lib/ddtrace/opentracer/carrier.rb +6 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +55 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
- data/lib/ddtrace/opentracer/propagator.rb +22 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
- data/lib/ddtrace/opentracer/scope.rb +15 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
- data/lib/ddtrace/opentracer/span.rb +94 -0
- data/lib/ddtrace/opentracer/span_context.rb +14 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +31 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
- data/lib/ddtrace/opentracer/tracer.rb +208 -0
- data/lib/ddtrace/patcher.rb +33 -5
- data/lib/ddtrace/pin.rb +35 -20
- data/lib/ddtrace/pipeline.rb +1 -1
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/propagation/grpc_propagator.rb +26 -6
- data/lib/ddtrace/propagation/http_propagator.rb +72 -10
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +44 -0
- data/lib/ddtrace/runtime/class_count.rb +17 -0
- data/lib/ddtrace/runtime/container.rb +71 -0
- data/lib/ddtrace/runtime/gc.rb +16 -0
- data/lib/ddtrace/runtime/identity.rb +48 -0
- data/lib/ddtrace/runtime/metrics.rb +114 -0
- data/lib/ddtrace/runtime/object_space.rb +19 -0
- data/lib/ddtrace/runtime/socket.rb +14 -0
- data/lib/ddtrace/runtime/thread_count.rb +16 -0
- data/lib/ddtrace/sampler.rb +218 -37
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +176 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +126 -0
- data/lib/ddtrace/span.rb +244 -34
- data/lib/ddtrace/sync_writer.rb +47 -16
- data/lib/ddtrace/tracer.rb +215 -117
- data/lib/ddtrace/transport/http.rb +113 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +145 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +25 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +83 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +66 -0
- data/lib/ddtrace/transport/http/api.rb +46 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
- data/lib/ddtrace/transport/http/api/instance.rb +33 -0
- data/lib/ddtrace/transport/http/api/map.rb +14 -0
- data/lib/ddtrace/transport/http/api/spec.rb +15 -0
- data/lib/ddtrace/transport/http/builder.rb +169 -0
- data/lib/ddtrace/transport/http/client.rb +50 -0
- data/lib/ddtrace/transport/http/env.rb +56 -0
- data/lib/ddtrace/transport/http/response.rb +26 -0
- data/lib/ddtrace/transport/http/statistics.rb +43 -0
- data/lib/ddtrace/transport/http/traces.rb +142 -0
- data/lib/ddtrace/transport/io.rb +26 -0
- data/lib/ddtrace/transport/io/client.rb +76 -0
- data/lib/ddtrace/transport/io/response.rb +23 -0
- data/lib/ddtrace/transport/io/traces.rb +97 -0
- data/lib/ddtrace/transport/parcel.rb +13 -0
- data/lib/ddtrace/transport/request.rb +13 -0
- data/lib/ddtrace/transport/response.rb +60 -0
- data/lib/ddtrace/transport/statistics.rb +72 -0
- data/lib/ddtrace/transport/traces.rb +205 -0
- data/lib/ddtrace/utils.rb +17 -14
- data/lib/ddtrace/utils/compression.rb +27 -0
- data/lib/ddtrace/utils/database.rb +7 -3
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/utils/object_set.rb +41 -0
- data/lib/ddtrace/utils/only_once.rb +40 -0
- data/lib/ddtrace/utils/sequence.rb +17 -0
- data/lib/ddtrace/utils/string_table.rb +45 -0
- data/lib/ddtrace/utils/time.rb +45 -0
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
- data/lib/ddtrace/version.rb +3 -1
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers.rb +39 -40
- data/lib/ddtrace/workers/async.rb +173 -0
- data/lib/ddtrace/workers/loop.rb +119 -0
- data/lib/ddtrace/workers/polling.rb +49 -0
- data/lib/ddtrace/workers/queue.rb +40 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +51 -0
- data/lib/ddtrace/workers/trace_writer.rb +202 -0
- data/lib/ddtrace/writer.rb +121 -57
- data/tasks/release_gem.rake +28 -0
- metadata +501 -211
- data/lib/ddtrace/configurable.rb +0 -83
- data/lib/ddtrace/configuration/proxy.rb +0 -25
- data/lib/ddtrace/contrib/base.rb +0 -15
- data/lib/ddtrace/contrib/mysql2/client.rb +0 -60
- data/lib/ddtrace/contrib/rails/action_controller.rb +0 -91
- data/lib/ddtrace/contrib/rails/action_controller_patch.rb +0 -77
- data/lib/ddtrace/contrib/rails/action_view.rb +0 -19
- data/lib/ddtrace/contrib/rails/active_support.rb +0 -65
- data/lib/ddtrace/contrib/rails/core_extensions.rb +0 -356
- data/lib/ddtrace/contrib/sidekiq/tracer.rb +0 -72
- data/lib/ddtrace/ext/cache.rb +0 -8
- data/lib/ddtrace/ext/grpc.rb +0 -7
- data/lib/ddtrace/ext/mongo.rb +0 -12
- data/lib/ddtrace/ext/redis.rb +0 -17
- data/lib/ddtrace/monkey.rb +0 -65
- data/lib/ddtrace/propagation/distributed_headers.rb +0 -48
- data/lib/ddtrace/provider.rb +0 -21
- data/lib/ddtrace/registry.rb +0 -42
- data/lib/ddtrace/registry/registerable.rb +0 -20
- data/lib/ddtrace/transport.rb +0 -212
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -1,36 +1,67 @@
|
|
|
1
|
+
require 'ddtrace/ext/net'
|
|
2
|
+
require 'ddtrace/runtime/socket'
|
|
3
|
+
require 'ddtrace/runtime/metrics'
|
|
4
|
+
require 'ddtrace/utils/only_once'
|
|
5
|
+
|
|
1
6
|
module Datadog
|
|
2
7
|
# SyncWriter flushes both services and traces synchronously
|
|
8
|
+
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
9
|
+
#
|
|
10
|
+
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
11
|
+
# the separate `datadog-lambda` uses it as of February 2021:
|
|
12
|
+
# <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
|
|
3
13
|
class SyncWriter
|
|
4
|
-
|
|
14
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
15
|
+
|
|
16
|
+
attr_reader \
|
|
17
|
+
:priority_sampler,
|
|
18
|
+
:transport
|
|
5
19
|
|
|
6
20
|
def initialize(options = {})
|
|
7
21
|
@transport = options.fetch(:transport) do
|
|
8
|
-
|
|
22
|
+
transport_options = options.fetch(:transport_options, {})
|
|
23
|
+
Transport::HTTP.default(transport_options)
|
|
9
24
|
end
|
|
10
|
-
end
|
|
11
25
|
|
|
12
|
-
|
|
13
|
-
perform_concurrently(
|
|
14
|
-
proc { flush_services(services) },
|
|
15
|
-
proc { flush_trace(trace) }
|
|
16
|
-
)
|
|
17
|
-
rescue => e
|
|
18
|
-
Tracer.log.debug(e)
|
|
26
|
+
@priority_sampler = options.fetch(:priority_sampler, nil)
|
|
19
27
|
end
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
def write(trace, services = nil)
|
|
30
|
+
unless services.nil?
|
|
31
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
32
|
+
Datadog.logger.warn(%(
|
|
33
|
+
write: Writing services has been deprecated and no longer need to be provided.
|
|
34
|
+
write(traces, services) can be updated to write(traces)
|
|
35
|
+
))
|
|
36
|
+
end
|
|
37
|
+
end
|
|
22
38
|
|
|
23
|
-
|
|
24
|
-
|
|
39
|
+
flush_trace(trace)
|
|
40
|
+
rescue => e
|
|
41
|
+
Datadog.logger.debug(e)
|
|
25
42
|
end
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
44
|
+
# Added for interface completeness
|
|
45
|
+
def stop
|
|
46
|
+
# No cleanup to do for the SyncWriter
|
|
47
|
+
true
|
|
29
48
|
end
|
|
30
49
|
|
|
50
|
+
private
|
|
51
|
+
|
|
31
52
|
def flush_trace(trace)
|
|
32
53
|
processed_traces = Pipeline.process!([trace])
|
|
33
|
-
|
|
54
|
+
return if processed_traces.empty?
|
|
55
|
+
|
|
56
|
+
inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
|
|
57
|
+
transport.send_traces(processed_traces)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def inject_hostname!(trace)
|
|
61
|
+
unless trace.first.nil?
|
|
62
|
+
hostname = Datadog::Runtime::Socket.hostname
|
|
63
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
64
|
+
end
|
|
34
65
|
end
|
|
35
66
|
end
|
|
36
67
|
end
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
require 'pp'
|
|
2
|
-
require 'thread'
|
|
3
1
|
require 'logger'
|
|
4
2
|
require 'pathname'
|
|
5
3
|
|
|
4
|
+
require 'ddtrace/environment'
|
|
6
5
|
require 'ddtrace/span'
|
|
7
6
|
require 'ddtrace/context'
|
|
8
|
-
require 'ddtrace/context_flush'
|
|
9
|
-
require 'ddtrace/provider'
|
|
10
7
|
require 'ddtrace/logger'
|
|
11
8
|
require 'ddtrace/writer'
|
|
9
|
+
require 'ddtrace/runtime/identity'
|
|
12
10
|
require 'ddtrace/sampler'
|
|
11
|
+
require 'ddtrace/sampling'
|
|
12
|
+
require 'ddtrace/correlation'
|
|
13
|
+
require 'ddtrace/utils/only_once'
|
|
13
14
|
|
|
14
15
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
15
16
|
module Datadog
|
|
@@ -19,45 +20,22 @@ module Datadog
|
|
|
19
20
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
|
20
21
|
# rubocop:disable Metrics/ClassLength
|
|
21
22
|
class Tracer
|
|
22
|
-
|
|
23
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
24
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
25
|
+
|
|
26
|
+
attr_reader :sampler, :tags, :provider, :context_flush
|
|
23
27
|
attr_accessor :enabled, :writer
|
|
24
28
|
attr_writer :default_service
|
|
25
29
|
|
|
26
30
|
ALLOWED_SPAN_OPTIONS = [:service, :resource, :span_type].freeze
|
|
31
|
+
DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
unless defined? @logger
|
|
32
|
-
@logger = Datadog::Logger.new(STDOUT)
|
|
33
|
-
@logger.level = Logger::WARN
|
|
33
|
+
def services
|
|
34
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
35
|
+
Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
|
|
34
36
|
end
|
|
35
|
-
@logger
|
|
36
|
-
end
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
def self.log=(logger)
|
|
40
|
-
return unless logger
|
|
41
|
-
return unless logger.respond_to? :methods
|
|
42
|
-
return unless logger.respond_to? :error
|
|
43
|
-
if logger.respond_to? :methods
|
|
44
|
-
unimplemented = Logger.new(STDOUT).methods - logger.methods
|
|
45
|
-
unless unimplemented.empty?
|
|
46
|
-
logger.error("logger #{logger} does not implement #{unimplemented}")
|
|
47
|
-
return
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
@logger = logger
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Activate the debug mode providing more information related to tracer usage
|
|
54
|
-
def self.debug_logging=(value)
|
|
55
|
-
log.level = value ? Logger::DEBUG : Logger::WARN
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Return if the debug mode is activated or not
|
|
59
|
-
def self.debug_logging
|
|
60
|
-
log.level == Logger::DEBUG
|
|
38
|
+
{}
|
|
61
39
|
end
|
|
62
40
|
|
|
63
41
|
# Shorthand that calls the `shutdown!` method of a registered worker.
|
|
@@ -73,8 +51,9 @@ module Datadog
|
|
|
73
51
|
# tracer.shutdown!
|
|
74
52
|
#
|
|
75
53
|
def shutdown!
|
|
76
|
-
return
|
|
77
|
-
|
|
54
|
+
return unless @enabled
|
|
55
|
+
|
|
56
|
+
@writer.stop unless @writer.nil?
|
|
78
57
|
end
|
|
79
58
|
|
|
80
59
|
# Return the current active \Context for this traced execution. This method is
|
|
@@ -83,8 +62,8 @@ module Datadog
|
|
|
83
62
|
#
|
|
84
63
|
# This method makes use of a \ContextProvider that is automatically set during the tracer
|
|
85
64
|
# initialization, or while using a library instrumentation.
|
|
86
|
-
def call_context
|
|
87
|
-
@provider.context
|
|
65
|
+
def call_context(key = nil)
|
|
66
|
+
@provider.context(key)
|
|
88
67
|
end
|
|
89
68
|
|
|
90
69
|
# Initialize a new \Tracer used to create, sample and submit spans that measure the
|
|
@@ -93,18 +72,26 @@ module Datadog
|
|
|
93
72
|
# * +enabled+: set if the tracer submits or not spans to the local agent. It's enabled
|
|
94
73
|
# by default.
|
|
95
74
|
def initialize(options = {})
|
|
75
|
+
# Configurable options
|
|
76
|
+
@context_flush = if options[:partial_flush]
|
|
77
|
+
Datadog::ContextFlush::Partial.new(options)
|
|
78
|
+
else
|
|
79
|
+
Datadog::ContextFlush::Finished.new
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
@default_service = options[:default_service]
|
|
96
83
|
@enabled = options.fetch(:enabled, true)
|
|
97
|
-
@
|
|
84
|
+
@provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
|
|
98
85
|
@sampler = options.fetch(:sampler, Datadog::AllSampler.new)
|
|
86
|
+
@tags = options.fetch(:tags, {})
|
|
87
|
+
@writer = options.fetch(:writer, Datadog::Writer.new)
|
|
99
88
|
|
|
100
|
-
|
|
89
|
+
# Instance variables
|
|
90
|
+
@mutex = Mutex.new
|
|
101
91
|
@provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
|
|
102
92
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
@mutex = Mutex.new
|
|
106
|
-
@services = {}
|
|
107
|
-
@tags = {}
|
|
93
|
+
# Enable priority sampling by default
|
|
94
|
+
activate_priority_sampling!(@sampler)
|
|
108
95
|
end
|
|
109
96
|
|
|
110
97
|
# Updates the current \Tracer instance, so that the tracer can be configured after the
|
|
@@ -113,6 +100,7 @@ module Datadog
|
|
|
113
100
|
# * +enabled+: set if the tracer submits or not spans to the trace agent
|
|
114
101
|
# * +hostname+: change the location of the trace agent
|
|
115
102
|
# * +port+: change the port of the trace agent
|
|
103
|
+
# * +partial_flush+: enable partial trace flushing
|
|
116
104
|
#
|
|
117
105
|
# For instance, if the trace agent runs in a different location, just:
|
|
118
106
|
#
|
|
@@ -120,43 +108,36 @@ module Datadog
|
|
|
120
108
|
#
|
|
121
109
|
def configure(options = {})
|
|
122
110
|
enabled = options.fetch(:enabled, nil)
|
|
123
|
-
hostname = options.fetch(:hostname, nil)
|
|
124
|
-
port = options.fetch(:port, nil)
|
|
125
111
|
|
|
126
112
|
# Those are rare "power-user" options.
|
|
127
113
|
sampler = options.fetch(:sampler, nil)
|
|
128
|
-
priority_sampling = options[:priority_sampling]
|
|
129
|
-
max_spans_before_partial_flush = options.fetch(:max_spans_before_partial_flush, nil)
|
|
130
|
-
min_spans_before_partial_flush = options.fetch(:min_spans_before_partial_flush, nil)
|
|
131
|
-
partial_flush_timeout = options.fetch(:partial_flush_timeout, nil)
|
|
132
114
|
|
|
133
115
|
@enabled = enabled unless enabled.nil?
|
|
134
116
|
@sampler = sampler unless sampler.nil?
|
|
135
117
|
|
|
136
|
-
|
|
137
|
-
@sampler = PrioritySampler.new(base_sampler: @sampler)
|
|
138
|
-
@writer = Writer.new(priority_sampler: @sampler)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
@writer.transport.hostname = hostname unless hostname.nil?
|
|
142
|
-
@writer.transport.port = port unless port.nil?
|
|
118
|
+
configure_writer(options)
|
|
143
119
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
120
|
+
if options.key?(:partial_flush)
|
|
121
|
+
@context_flush = if options[:partial_flush]
|
|
122
|
+
Datadog::ContextFlush::Partial.new(options)
|
|
123
|
+
else
|
|
124
|
+
Datadog::ContextFlush::Finished.new
|
|
125
|
+
end
|
|
126
|
+
end
|
|
147
127
|
end
|
|
148
128
|
|
|
149
129
|
# Set the information about the given service. A valid example is:
|
|
150
130
|
#
|
|
151
131
|
# tracer.set_service_info('web-application', 'rails', 'web')
|
|
132
|
+
#
|
|
133
|
+
# set_service_info is deprecated, no service information needs to be tracked
|
|
152
134
|
def set_service_info(service, app, app_type)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
Datadog::Tracer.log.debug("set_service_info: service: #{service} app: #{app} type: #{app_type}")
|
|
135
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
136
|
+
Datadog.logger.warn(%(
|
|
137
|
+
set_service_info: Usage of set_service_info has been deprecated,
|
|
138
|
+
service information no longer needs to be reported to the trace agent.
|
|
139
|
+
))
|
|
140
|
+
end
|
|
160
141
|
end
|
|
161
142
|
|
|
162
143
|
# A default value for service. One should really override this one
|
|
@@ -164,10 +145,11 @@ module Datadog
|
|
|
164
145
|
# a service would be invalid and rejected.
|
|
165
146
|
def default_service
|
|
166
147
|
return @default_service if instance_variable_defined?(:@default_service) && @default_service
|
|
148
|
+
|
|
167
149
|
begin
|
|
168
150
|
@default_service = File.basename($PROGRAM_NAME, '.*')
|
|
169
151
|
rescue StandardError => e
|
|
170
|
-
Datadog
|
|
152
|
+
Datadog.logger.error("unable to guess default service: #{e}")
|
|
171
153
|
@default_service = 'ruby'.freeze
|
|
172
154
|
end
|
|
173
155
|
@default_service
|
|
@@ -179,7 +161,8 @@ module Datadog
|
|
|
179
161
|
#
|
|
180
162
|
# tracer.set_tags('env' => 'prod', 'component' => 'core')
|
|
181
163
|
def set_tags(tags)
|
|
182
|
-
|
|
164
|
+
string_tags = Hash[tags.collect { |k, v| [k.to_s, v] }]
|
|
165
|
+
@tags = @tags.merge(string_tags)
|
|
183
166
|
end
|
|
184
167
|
|
|
185
168
|
# Guess context and parent from child_of entry.
|
|
@@ -205,35 +188,36 @@ module Datadog
|
|
|
205
188
|
# * +start_time+: when the span actually starts (defaults to \now)
|
|
206
189
|
# * +tags+: extra tags which should be added to the span.
|
|
207
190
|
def start_span(name, options = {})
|
|
208
|
-
start_time = options
|
|
209
|
-
|
|
191
|
+
start_time = options[:start_time]
|
|
210
192
|
tags = options.fetch(:tags, {})
|
|
211
193
|
|
|
212
|
-
|
|
194
|
+
span_options = options.select do |k, _v|
|
|
213
195
|
# Filter options, we want no side effects with unexpected args.
|
|
214
|
-
# Plus, this documents the code (Ruby 2 named args would be better but we're Ruby 1.9 compatible)
|
|
215
196
|
ALLOWED_SPAN_OPTIONS.include?(k)
|
|
216
197
|
end
|
|
217
198
|
|
|
218
199
|
ctx, parent = guess_context_and_parent(options[:child_of])
|
|
219
|
-
|
|
200
|
+
span_options[:context] = ctx unless ctx.nil?
|
|
220
201
|
|
|
221
|
-
span = Span.new(self, name,
|
|
202
|
+
span = Span.new(self, name, span_options)
|
|
222
203
|
if parent.nil?
|
|
223
204
|
# root span
|
|
224
|
-
@sampler.sample(span)
|
|
205
|
+
@sampler.sample!(span)
|
|
225
206
|
span.set_tag('system.pid', Process.pid)
|
|
226
|
-
|
|
207
|
+
span.set_tag(Datadog::Ext::Runtime::TAG_ID, Datadog::Runtime::Identity.id)
|
|
208
|
+
|
|
209
|
+
if ctx && ctx.trace_id
|
|
227
210
|
span.trace_id = ctx.trace_id
|
|
228
|
-
span.parent_id = ctx.span_id
|
|
211
|
+
span.parent_id = ctx.span_id unless ctx.span_id.nil?
|
|
229
212
|
end
|
|
230
213
|
else
|
|
231
214
|
# child span
|
|
232
215
|
span.parent = parent # sets service, trace_id, parent_id, sampled
|
|
233
216
|
end
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
span.
|
|
217
|
+
|
|
218
|
+
span.set_tags(@tags) unless @tags.empty?
|
|
219
|
+
span.set_tags(tags) unless tags.empty?
|
|
220
|
+
span.start(start_time)
|
|
237
221
|
|
|
238
222
|
# this could at some point be optional (start_active_span vs start_manual_span)
|
|
239
223
|
ctx.add_span(span) unless ctx.nil?
|
|
@@ -274,31 +258,60 @@ module Datadog
|
|
|
274
258
|
# * +service+: the service name for this span
|
|
275
259
|
# * +resource+: the resource this span refers, or \name if it's missing
|
|
276
260
|
# * +span_type+: the type of the span (such as \http, \db and so on)
|
|
261
|
+
# * +child_of+: a \Span or a \Context instance representing the parent for this span.
|
|
262
|
+
# If not set, defaults to Tracer.call_context
|
|
277
263
|
# * +tags+: extra tags which should be added to the span.
|
|
278
264
|
def trace(name, options = {})
|
|
279
|
-
options[:child_of]
|
|
280
|
-
span = start_span(name, options)
|
|
265
|
+
options[:child_of] ||= call_context
|
|
281
266
|
|
|
282
267
|
# call the finish only if a block is given; this ensures
|
|
283
268
|
# that a call to tracer.trace() without a block, returns
|
|
284
269
|
# a span that should be manually finished.
|
|
285
270
|
if block_given?
|
|
271
|
+
span = nil
|
|
272
|
+
return_value = nil
|
|
273
|
+
|
|
286
274
|
begin
|
|
287
|
-
|
|
275
|
+
begin
|
|
276
|
+
span = start_span(name, options)
|
|
277
|
+
rescue StandardError => e
|
|
278
|
+
Datadog.logger.debug("Failed to start span: #{e}")
|
|
279
|
+
ensure
|
|
280
|
+
# We should yield to the provided block when possible, as this
|
|
281
|
+
# block is application code that we don't want to hinder. We call:
|
|
282
|
+
# * `yield(span)` during normal execution.
|
|
283
|
+
# * `yield(nil)` if `start_span` fails with a runtime error.
|
|
284
|
+
# * We don't yield during a fatal error, as the application is likely trying to
|
|
285
|
+
# end its execution (either due to a system error or graceful shutdown).
|
|
286
|
+
return_value = yield(span) if span || e.is_a?(StandardError)
|
|
287
|
+
end
|
|
288
288
|
# rubocop:disable Lint/RescueException
|
|
289
289
|
# Here we really want to catch *any* exception, not only StandardError,
|
|
290
290
|
# as we really have no clue of what is in the block,
|
|
291
291
|
# and it is user code which should be executed no matter what.
|
|
292
292
|
# It's not a problem since we re-raise it afterwards so for example a
|
|
293
293
|
# SignalException::Interrupt would still bubble up.
|
|
294
|
+
# rubocop:disable Metrics/BlockNesting
|
|
294
295
|
rescue Exception => e
|
|
295
|
-
|
|
296
|
+
if (on_error_handler = options[:on_error]) && on_error_handler.respond_to?(:call)
|
|
297
|
+
begin
|
|
298
|
+
on_error_handler.call(span, e)
|
|
299
|
+
rescue
|
|
300
|
+
Datadog.logger.debug('Custom on_error handler failed, falling back to default')
|
|
301
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
302
|
+
end
|
|
303
|
+
else
|
|
304
|
+
Datadog.logger.debug('Custom on_error handler must be a callable, falling back to default') if on_error_handler
|
|
305
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
306
|
+
end
|
|
296
307
|
raise e
|
|
297
308
|
ensure
|
|
298
|
-
span.finish
|
|
309
|
+
span.finish unless span.nil?
|
|
299
310
|
end
|
|
311
|
+
|
|
312
|
+
return_value
|
|
300
313
|
else
|
|
301
|
-
|
|
314
|
+
start_span(name, options)
|
|
302
315
|
end
|
|
303
316
|
end
|
|
304
317
|
|
|
@@ -309,47 +322,132 @@ module Datadog
|
|
|
309
322
|
def record(context)
|
|
310
323
|
context = context.context if context.is_a?(Datadog::Span)
|
|
311
324
|
return if context.nil?
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
else
|
|
327
|
-
ready = !trace.nil? && !trace.empty? && sampled
|
|
328
|
-
write(trace) if ready
|
|
329
|
-
end
|
|
325
|
+
|
|
326
|
+
record_context(context)
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
# Consume trace from +context+, according to +@context_flush+
|
|
330
|
+
# criteria.
|
|
331
|
+
#
|
|
332
|
+
# \ContextFlush#consume! can return nil or an empty list if the
|
|
333
|
+
# trace is not available to flush or if the trace has not been
|
|
334
|
+
# chosen to be sampled.
|
|
335
|
+
def record_context(context)
|
|
336
|
+
trace = @context_flush.consume!(context)
|
|
337
|
+
|
|
338
|
+
write(trace) if @enabled && trace && !trace.empty?
|
|
330
339
|
end
|
|
331
340
|
|
|
332
341
|
# Return the current active span or +nil+.
|
|
333
|
-
def active_span
|
|
334
|
-
call_context.current_span
|
|
342
|
+
def active_span(key = nil)
|
|
343
|
+
call_context(key).current_span
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
# Return the current active root span or +nil+.
|
|
347
|
+
def active_root_span(key = nil)
|
|
348
|
+
call_context(key).current_root_span
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Return a CorrelationIdentifier for active span
|
|
352
|
+
def active_correlation(key = nil)
|
|
353
|
+
Datadog::Correlation.identifier_from_context(call_context(key))
|
|
335
354
|
end
|
|
336
355
|
|
|
337
356
|
# Send the trace to the writer to enqueue the spans list in the agent
|
|
338
357
|
# sending queue.
|
|
339
358
|
def write(trace)
|
|
340
|
-
return if @writer.nil?
|
|
359
|
+
return if @writer.nil?
|
|
341
360
|
|
|
342
|
-
if Datadog
|
|
343
|
-
Datadog
|
|
361
|
+
if Datadog.configuration.diagnostics.debug
|
|
362
|
+
Datadog.logger.debug("Writing #{trace.length} spans (enabled: #{@enabled})")
|
|
344
363
|
str = String.new('')
|
|
345
364
|
PP.pp(trace, str)
|
|
346
|
-
Datadog
|
|
365
|
+
Datadog.logger.debug(str)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
@writer.write(trace)
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
# TODO: Move this kind of configuration building out of the tracer.
|
|
372
|
+
# Tracer should not have this kind of knowledge of writer.
|
|
373
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
374
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
375
|
+
# rubocop:disable Metrics/MethodLength
|
|
376
|
+
def configure_writer(options = {})
|
|
377
|
+
hostname = options.fetch(:hostname, nil)
|
|
378
|
+
port = options.fetch(:port, nil)
|
|
379
|
+
sampler = options.fetch(:sampler, nil)
|
|
380
|
+
priority_sampling = options.fetch(:priority_sampling, nil)
|
|
381
|
+
writer = options.fetch(:writer, nil)
|
|
382
|
+
transport_options = options.fetch(:transport_options, {}).dup
|
|
383
|
+
|
|
384
|
+
# Compile writer options
|
|
385
|
+
writer_options = options.fetch(:writer_options, {}).dup
|
|
386
|
+
rebuild_writer = !writer_options.empty?
|
|
387
|
+
|
|
388
|
+
# Re-build the sampler and writer if priority sampling is enabled,
|
|
389
|
+
# but neither are configured. Verify the sampler isn't already a
|
|
390
|
+
# priority sampler too, so we don't wrap one with another.
|
|
391
|
+
if options.key?(:writer)
|
|
392
|
+
if writer.priority_sampler.nil?
|
|
393
|
+
deactivate_priority_sampling!(sampler)
|
|
394
|
+
else
|
|
395
|
+
activate_priority_sampling!(writer.priority_sampler)
|
|
396
|
+
end
|
|
397
|
+
elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
|
|
398
|
+
writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
|
|
399
|
+
rebuild_writer = true
|
|
400
|
+
elsif priority_sampling == false
|
|
401
|
+
deactivate_priority_sampling!(sampler)
|
|
402
|
+
rebuild_writer = true
|
|
403
|
+
elsif @sampler.is_a?(PrioritySampler)
|
|
404
|
+
# Make sure to add sampler to options if transport is rebuilt.
|
|
405
|
+
writer_options[:priority_sampler] = @sampler
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
# Apply options to transport
|
|
409
|
+
if transport_options.is_a?(Proc)
|
|
410
|
+
transport_options = { on_build: transport_options }
|
|
411
|
+
rebuild_writer = true
|
|
347
412
|
end
|
|
348
413
|
|
|
349
|
-
|
|
350
|
-
|
|
414
|
+
if hostname || port
|
|
415
|
+
transport_options[:hostname] = hostname unless hostname.nil?
|
|
416
|
+
transport_options[:port] = port unless port.nil?
|
|
417
|
+
rebuild_writer = true
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
writer_options[:transport_options] = transport_options
|
|
421
|
+
|
|
422
|
+
if rebuild_writer || writer
|
|
423
|
+
# Make sure old writer is shut down before throwing away.
|
|
424
|
+
# Don't want additional threads running...
|
|
425
|
+
@writer.stop unless writer.nil?
|
|
426
|
+
@writer = writer || Writer.new(writer_options)
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
def activate_priority_sampling!(base_sampler = nil)
|
|
431
|
+
@sampler = if base_sampler.is_a?(PrioritySampler)
|
|
432
|
+
base_sampler
|
|
433
|
+
else
|
|
434
|
+
PrioritySampler.new(
|
|
435
|
+
base_sampler: base_sampler,
|
|
436
|
+
post_sampler: Sampling::RuleSampler.new
|
|
437
|
+
)
|
|
438
|
+
end
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
def deactivate_priority_sampling!(base_sampler = nil)
|
|
442
|
+
@sampler = base_sampler || Datadog::AllSampler.new if @sampler.is_a?(PrioritySampler)
|
|
351
443
|
end
|
|
352
444
|
|
|
353
|
-
private
|
|
445
|
+
private \
|
|
446
|
+
:activate_priority_sampling!,
|
|
447
|
+
:configure_writer,
|
|
448
|
+
:deactivate_priority_sampling!,
|
|
449
|
+
:guess_context_and_parent,
|
|
450
|
+
:record_context,
|
|
451
|
+
:write
|
|
354
452
|
end
|
|
355
453
|
end
|