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/context.rb
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'ddtrace/diagnostics/health'
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/context_flush'
|
|
4
|
+
require 'ddtrace/context_provider'
|
|
5
|
+
require 'ddtrace/utils/forking'
|
|
2
6
|
|
|
3
7
|
module Datadog
|
|
4
8
|
# \Context is used to keep track of a hierarchy of spans for the current
|
|
@@ -15,6 +19,8 @@ module Datadog
|
|
|
15
19
|
# This data structure is thread-safe.
|
|
16
20
|
# rubocop:disable Metrics/ClassLength
|
|
17
21
|
class Context
|
|
22
|
+
include Datadog::Utils::Forking
|
|
23
|
+
|
|
18
24
|
# 100k spans is about a 100Mb footprint
|
|
19
25
|
DEFAULT_MAX_LENGTH = 100_000
|
|
20
26
|
|
|
@@ -53,6 +59,18 @@ module Datadog
|
|
|
53
59
|
end
|
|
54
60
|
end
|
|
55
61
|
|
|
62
|
+
def origin
|
|
63
|
+
@mutex.synchronize do
|
|
64
|
+
@origin
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def origin=(origin)
|
|
69
|
+
@mutex.synchronize do
|
|
70
|
+
@origin = origin
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
56
74
|
# Return the last active span that corresponds to the last inserted
|
|
57
75
|
# item in the trace list. This cannot be considered as the current active
|
|
58
76
|
# span in asynchronous environments, because some spans can be closed
|
|
@@ -63,6 +81,12 @@ module Datadog
|
|
|
63
81
|
end
|
|
64
82
|
end
|
|
65
83
|
|
|
84
|
+
def current_root_span
|
|
85
|
+
@mutex.synchronize do
|
|
86
|
+
return @current_root_span
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
66
90
|
# Add a span to the context trace list, keeping it as the last active span.
|
|
67
91
|
def add_span(span)
|
|
68
92
|
@mutex.synchronize do
|
|
@@ -71,12 +95,21 @@ module Datadog
|
|
|
71
95
|
# by default has 10000 spans, all of which belong to unfinished parts of a
|
|
72
96
|
# larger trace. This is a catch-all to reduce global memory usage.
|
|
73
97
|
if @max_length > 0 && @trace.length >= @max_length
|
|
74
|
-
Datadog::Tracer.log.debug("context full, ignoring span #{span.name}")
|
|
75
98
|
# Detach the span from any context, it's being dropped and ignored.
|
|
76
99
|
span.context = nil
|
|
100
|
+
Datadog.logger.debug("context full, ignoring span #{span.name}")
|
|
101
|
+
|
|
102
|
+
# If overflow has already occurred, don't send this metric.
|
|
103
|
+
# Prevents metrics spam if buffer repeatedly overflows for the same trace.
|
|
104
|
+
unless @overflow
|
|
105
|
+
Datadog.health_metrics.error_context_overflow(1, tags: ["max_length:#{@max_length}"])
|
|
106
|
+
@overflow = true
|
|
107
|
+
end
|
|
108
|
+
|
|
77
109
|
return
|
|
78
110
|
end
|
|
79
111
|
set_current_span(span)
|
|
112
|
+
@current_root_span = span if @trace.empty?
|
|
80
113
|
@trace << span
|
|
81
114
|
span.context = self
|
|
82
115
|
end
|
|
@@ -92,12 +125,19 @@ module Datadog
|
|
|
92
125
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
93
126
|
set_current_span(span.parent)
|
|
94
127
|
return if span.tracer.nil?
|
|
95
|
-
|
|
96
|
-
if span.parent.nil? && !
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
128
|
+
|
|
129
|
+
if span.parent.nil? && !all_spans_finished?
|
|
130
|
+
if Datadog.configuration.diagnostics.debug
|
|
131
|
+
opened_spans = @trace.length - @finished_spans
|
|
132
|
+
Datadog.logger.debug("root span #{span.name} closed but has #{opened_spans} unfinished spans:")
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
@trace.reject(&:finished?).group_by(&:name).each do |unfinished_span_name, unfinished_spans|
|
|
136
|
+
Datadog.logger.debug("unfinished span: #{unfinished_spans.first}") if Datadog.configuration.diagnostics.debug
|
|
137
|
+
Datadog.health_metrics.error_unfinished_spans(
|
|
138
|
+
unfinished_spans.length,
|
|
139
|
+
tags: ["name:#{unfinished_span_name}"]
|
|
140
|
+
)
|
|
101
141
|
end
|
|
102
142
|
end
|
|
103
143
|
end
|
|
@@ -107,7 +147,14 @@ module Datadog
|
|
|
107
147
|
# is considered finished if all spans in this context are finished.
|
|
108
148
|
def finished?
|
|
109
149
|
@mutex.synchronize do
|
|
110
|
-
return
|
|
150
|
+
return all_spans_finished?
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# @@return [Numeric] numbers of finished spans
|
|
155
|
+
def finished_span_count
|
|
156
|
+
@mutex.synchronize do
|
|
157
|
+
@finished_spans
|
|
111
158
|
end
|
|
112
159
|
end
|
|
113
160
|
|
|
@@ -120,34 +167,89 @@ module Datadog
|
|
|
120
167
|
end
|
|
121
168
|
|
|
122
169
|
# Returns both the trace list generated in the current context and
|
|
123
|
-
# if the context is sampled or not.
|
|
124
|
-
#
|
|
170
|
+
# if the context is sampled or not.
|
|
171
|
+
#
|
|
172
|
+
# It returns +[nil,@sampled]+ if the \Context is
|
|
173
|
+
# not finished.
|
|
174
|
+
#
|
|
175
|
+
# If a trace is returned, the \Context will be reset so that it
|
|
125
176
|
# can be re-used immediately.
|
|
126
177
|
#
|
|
127
178
|
# This operation is thread-safe.
|
|
179
|
+
#
|
|
180
|
+
# @return [Array<Array<Span>, Boolean>] finished trace and sampled flag
|
|
128
181
|
def get
|
|
129
182
|
@mutex.synchronize do
|
|
130
183
|
trace = @trace
|
|
131
184
|
sampled = @sampled
|
|
132
185
|
|
|
133
|
-
attach_sampling_priority if sampled && @sampling_priority
|
|
134
|
-
|
|
135
186
|
# still return sampled attribute, even if context is not finished
|
|
136
|
-
return nil, sampled unless
|
|
187
|
+
return nil, sampled unless all_spans_finished?
|
|
188
|
+
|
|
189
|
+
# Root span is finished at this point, we can configure it
|
|
190
|
+
annotate_for_flush!(@current_root_span)
|
|
137
191
|
|
|
138
192
|
reset
|
|
139
193
|
[trace, sampled]
|
|
140
194
|
end
|
|
141
195
|
end
|
|
142
196
|
|
|
197
|
+
# Delete any span matching the condition. This is thread safe.
|
|
198
|
+
#
|
|
199
|
+
# @return [Array<Span>] deleted spans
|
|
200
|
+
def delete_span_if
|
|
201
|
+
@mutex.synchronize do
|
|
202
|
+
[].tap do |deleted_spans|
|
|
203
|
+
@trace.delete_if do |span|
|
|
204
|
+
finished = span.finished?
|
|
205
|
+
|
|
206
|
+
next unless yield span
|
|
207
|
+
|
|
208
|
+
deleted_spans << span
|
|
209
|
+
|
|
210
|
+
# We need to detach the span from the context, else, some code
|
|
211
|
+
# finishing it afterwards would mess up with the number of
|
|
212
|
+
# finished_spans and possibly cause other side effects.
|
|
213
|
+
span.context = nil
|
|
214
|
+
# Acknowledge there's one span less to finish, if needed.
|
|
215
|
+
# It's very important to keep this balanced.
|
|
216
|
+
@finished_spans -= 1 if finished
|
|
217
|
+
|
|
218
|
+
true
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Set tags to root span required for flush
|
|
225
|
+
def annotate_for_flush!(span)
|
|
226
|
+
attach_sampling_priority(span) if @sampled && @sampling_priority
|
|
227
|
+
attach_origin(span) if @origin
|
|
228
|
+
end
|
|
229
|
+
|
|
143
230
|
# Return a string representation of the context.
|
|
144
231
|
def to_s
|
|
145
232
|
@mutex.synchronize do
|
|
146
|
-
# rubocop:disable
|
|
233
|
+
# rubocop:disable Layout/LineLength
|
|
147
234
|
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
|
148
235
|
end
|
|
149
236
|
end
|
|
150
237
|
|
|
238
|
+
# Generates equivalent context for forked processes.
|
|
239
|
+
#
|
|
240
|
+
# When Context from parent process is forked, child process
|
|
241
|
+
# should have a Context belonging to the same trace but not
|
|
242
|
+
# have the parent process spans.
|
|
243
|
+
def fork_clone
|
|
244
|
+
self.class.new(
|
|
245
|
+
trace_id: trace_id,
|
|
246
|
+
span_id: span_id,
|
|
247
|
+
sampled: sampled?,
|
|
248
|
+
sampling_priority: sampling_priority,
|
|
249
|
+
origin: origin
|
|
250
|
+
)
|
|
251
|
+
end
|
|
252
|
+
|
|
151
253
|
private
|
|
152
254
|
|
|
153
255
|
def reset(options = {})
|
|
@@ -156,8 +258,11 @@ module Datadog
|
|
|
156
258
|
@parent_span_id = options.fetch(:span_id, nil)
|
|
157
259
|
@sampled = options.fetch(:sampled, false)
|
|
158
260
|
@sampling_priority = options.fetch(:sampling_priority, nil)
|
|
261
|
+
@origin = options.fetch(:origin, nil)
|
|
159
262
|
@finished_spans = 0
|
|
160
263
|
@current_span = nil
|
|
264
|
+
@current_root_span = nil
|
|
265
|
+
@overflow = false
|
|
161
266
|
end
|
|
162
267
|
|
|
163
268
|
def set_current_span(span)
|
|
@@ -173,21 +278,29 @@ module Datadog
|
|
|
173
278
|
|
|
174
279
|
# Returns if the trace for the current Context is finished or not.
|
|
175
280
|
# Low-level internal function, not thread-safe.
|
|
176
|
-
def
|
|
281
|
+
def all_spans_finished?
|
|
177
282
|
@finished_spans > 0 && @trace.length == @finished_spans
|
|
178
283
|
end
|
|
179
284
|
|
|
180
|
-
def attach_sampling_priority
|
|
181
|
-
|
|
285
|
+
def attach_sampling_priority(span)
|
|
286
|
+
span.set_metric(
|
|
182
287
|
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
183
288
|
@sampling_priority
|
|
184
289
|
)
|
|
185
290
|
end
|
|
186
291
|
|
|
292
|
+
def attach_origin(span)
|
|
293
|
+
span.set_tag(
|
|
294
|
+
Ext::DistributedTracing::ORIGIN_KEY,
|
|
295
|
+
@origin
|
|
296
|
+
)
|
|
297
|
+
end
|
|
298
|
+
|
|
187
299
|
# Return the start time of the root span, or nil if there are no spans or this is undefined.
|
|
188
300
|
def start_time
|
|
189
301
|
@mutex.synchronize do
|
|
190
302
|
return nil if @trace.empty?
|
|
303
|
+
|
|
191
304
|
@trace[0].start_time
|
|
192
305
|
end
|
|
193
306
|
end
|
|
@@ -200,56 +313,10 @@ module Datadog
|
|
|
200
313
|
end
|
|
201
314
|
|
|
202
315
|
# Iterate on each span within the trace. This is thread safe.
|
|
203
|
-
def each_span
|
|
316
|
+
def each_span(&block)
|
|
204
317
|
@mutex.synchronize do
|
|
205
|
-
@trace.each
|
|
206
|
-
yield span
|
|
207
|
-
end
|
|
318
|
+
@trace.each(&block)
|
|
208
319
|
end
|
|
209
320
|
end
|
|
210
|
-
|
|
211
|
-
# Delete any span matching the condition. This is thread safe.
|
|
212
|
-
def delete_span_if
|
|
213
|
-
@mutex.synchronize do
|
|
214
|
-
@trace.delete_if do |span|
|
|
215
|
-
finished = span.finished?
|
|
216
|
-
delete_span = yield span
|
|
217
|
-
if delete_span
|
|
218
|
-
# We need to detach the span from the context, else, some code
|
|
219
|
-
# finishing it afterwards would mess up with the number of
|
|
220
|
-
# finished_spans and possibly cause other side effects.
|
|
221
|
-
span.context = nil
|
|
222
|
-
# Acknowledge there's one span less to finish, if needed.
|
|
223
|
-
# It's very important to keep this balanced.
|
|
224
|
-
@finished_spans -= 1 if finished
|
|
225
|
-
end
|
|
226
|
-
delete_span
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
# ThreadLocalContext can be used as a tracer global reference to create
|
|
233
|
-
# a different \Context for each thread. In synchronous tracer, this
|
|
234
|
-
# is required to prevent multiple threads sharing the same \Context
|
|
235
|
-
# in different executions.
|
|
236
|
-
class ThreadLocalContext
|
|
237
|
-
# ThreadLocalContext can be used as a tracer global reference to create
|
|
238
|
-
# a different \Context for each thread. In synchronous tracer, this
|
|
239
|
-
# is required to prevent multiple threads sharing the same \Context
|
|
240
|
-
# in different executions.
|
|
241
|
-
def initialize
|
|
242
|
-
self.local = Datadog::Context.new
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
# Override the thread-local context with a new context.
|
|
246
|
-
def local=(ctx)
|
|
247
|
-
Thread.current[:datadog_context] = ctx
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
# Return the thread-local context.
|
|
251
|
-
def local
|
|
252
|
-
Thread.current[:datadog_context] ||= Datadog::Context.new
|
|
253
|
-
end
|
|
254
321
|
end
|
|
255
322
|
end
|
|
@@ -1,132 +1,69 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
|
|
3
|
-
require 'ddtrace/context'
|
|
4
|
-
|
|
5
1
|
module Datadog
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def initialize(options = {})
|
|
21
|
-
# max_spans_before_partial_flush is the amount of spans collected before
|
|
22
|
-
# the context starts to partially flush parts of traces. With a setting of 10k,
|
|
23
|
-
# the memory overhead is about 10Mb per thread/context (depends on spans metadata,
|
|
24
|
-
# this is just an order of magnitude).
|
|
25
|
-
@max_spans_before_partial_flush = options.fetch(:max_spans_before_partial_flush,
|
|
26
|
-
DEFAULT_MAX_SPANS_BEFORE_PARTIAL_FLUSH)
|
|
27
|
-
# min_spans_before_partial_flush is the minimum number of spans required
|
|
28
|
-
# for a partial flush to happen on a timeout. This is to prevent partial flush
|
|
29
|
-
# of traces which last a very long time but yet have few spans.
|
|
30
|
-
@min_spans_before_partial_flush = options.fetch(:min_spans_before_partial_flush,
|
|
31
|
-
DEFAULT_MIN_SPANS_BEFORE_PARTIAL_FLUSH)
|
|
32
|
-
# partial_flush_timeout is the limit (in seconds) above which the context
|
|
33
|
-
# considers flushing parts of the trace. Partial flushes should not be done too
|
|
34
|
-
# late else the agent rejects them with a "too far in the past" error.
|
|
35
|
-
@partial_flush_timeout = options.fetch(:partial_flush_timeout,
|
|
36
|
-
DEFAULT_PARTIAL_FLUSH_TIMEOUT)
|
|
37
|
-
@partial_traces = []
|
|
2
|
+
module ContextFlush
|
|
3
|
+
# Consumes only completed traces (where all spans have finished)
|
|
4
|
+
class Finished
|
|
5
|
+
# Consumes and returns completed traces (where all spans have finished)
|
|
6
|
+
# from the provided +context+, if any.
|
|
7
|
+
#
|
|
8
|
+
# Any traces consumed are removed from +context+ as a side effect.
|
|
9
|
+
#
|
|
10
|
+
# @return [Array<Span>] trace to be flushed, or +nil+ if the trace is not finished
|
|
11
|
+
def consume!(context)
|
|
12
|
+
trace, sampled = context.get
|
|
13
|
+
trace if sampled
|
|
14
|
+
end
|
|
38
15
|
end
|
|
39
16
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
17
|
+
# Performs partial trace flushing to avoid large traces residing in memory for too long
|
|
18
|
+
class Partial
|
|
19
|
+
# Start flushing partial trace after this many active spans in one trace
|
|
20
|
+
DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH = 500
|
|
43
21
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
add_children(m, spans, ids, sub)
|
|
47
|
-
end
|
|
22
|
+
def initialize(options = {})
|
|
23
|
+
@min_spans_for_partial = options.fetch(:min_spans_before_partial_flush, DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH)
|
|
48
24
|
end
|
|
49
|
-
end
|
|
50
25
|
|
|
51
|
-
|
|
52
|
-
#
|
|
53
|
-
|
|
26
|
+
# Consumes and returns completed or partially completed
|
|
27
|
+
# traces from the provided +context+, if any.
|
|
28
|
+
#
|
|
29
|
+
# Partially completed traces, where not all spans have finished,
|
|
30
|
+
# will only be returned if there are at least
|
|
31
|
+
# +@min_spans_for_partial+ finished spans.
|
|
32
|
+
#
|
|
33
|
+
# Any spans consumed are removed from +context+ as a side effect.
|
|
34
|
+
#
|
|
35
|
+
# @return [Array<Span>] partial or complete trace to be flushed, or +nil+ if no spans are finished
|
|
36
|
+
def consume!(context)
|
|
37
|
+
trace, sampled = context.get
|
|
54
38
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
unflushable_ids.add span.span_id
|
|
58
|
-
while span.parent
|
|
59
|
-
span = span.parent
|
|
60
|
-
unflushable_ids.add span.span_id
|
|
61
|
-
end
|
|
62
|
-
end
|
|
39
|
+
return nil unless sampled
|
|
40
|
+
return trace if trace && !trace.empty?
|
|
63
41
|
|
|
64
|
-
|
|
65
|
-
# Along the road, collect a reverse-tree which allows direct walking from parents to
|
|
66
|
-
# children but only for the ones we're interested it.
|
|
67
|
-
roots = []
|
|
68
|
-
children_map = {}
|
|
69
|
-
context.send(:each_span) do |span|
|
|
70
|
-
# There's no point in trying to put the real root in those partial roots, if
|
|
71
|
-
# it's flushable, the default algorithm would figure way more quickly.
|
|
72
|
-
if span.parent && !unflushable_ids.include?(span.span_id)
|
|
73
|
-
if unflushable_ids.include?(span.parent.span_id)
|
|
74
|
-
# span is flushable but is parent is not
|
|
75
|
-
roots << span
|
|
76
|
-
else
|
|
77
|
-
# span is flushable and its parent is too, build the reverse
|
|
78
|
-
# parent to child map for this one, it will be useful
|
|
79
|
-
children_map[span.parent.span_id] ||= []
|
|
80
|
-
children_map[span.parent.span_id] << span
|
|
81
|
-
end
|
|
82
|
-
end
|
|
42
|
+
partial_trace(context)
|
|
83
43
|
end
|
|
84
44
|
|
|
85
|
-
|
|
86
|
-
partial_traces = []
|
|
87
|
-
all_ids = Set.new
|
|
88
|
-
roots.each do |root|
|
|
89
|
-
spans = []
|
|
90
|
-
add_children(children_map, spans, all_ids, root)
|
|
91
|
-
partial_traces << spans
|
|
92
|
-
end
|
|
45
|
+
private
|
|
93
46
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
47
|
+
def partial_trace(context)
|
|
48
|
+
return nil if context.finished_span_count < @min_spans_for_partial
|
|
49
|
+
|
|
50
|
+
finished_spans(context)
|
|
51
|
+
end
|
|
97
52
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return nil unless traces && flushed_ids
|
|
53
|
+
def finished_spans(context)
|
|
54
|
+
trace = context.delete_span_if(&:finished?)
|
|
101
55
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
56
|
+
# Ensure that the first span in a partial trace has
|
|
57
|
+
# sampling and origin information.
|
|
58
|
+
if trace[0]
|
|
59
|
+
context.annotate_for_flush!(trace[0])
|
|
60
|
+
else
|
|
61
|
+
Datadog.logger.debug('Tried to retrieve trace from context, but got nothing. ' \
|
|
62
|
+
"Is there another consumer for this context? #{context.trace_id}")
|
|
63
|
+
end
|
|
108
64
|
|
|
109
|
-
|
|
110
|
-
def each_partial_trace(context)
|
|
111
|
-
start_time = context.send(:start_time)
|
|
112
|
-
length = context.send(:length)
|
|
113
|
-
# Stop and do not flush anything if there are not enough spans.
|
|
114
|
-
return if length <= @min_spans_before_partial_flush
|
|
115
|
-
# If there are enough spans, but not too many, check for start time.
|
|
116
|
-
# If timeout is not given or 0, then wait
|
|
117
|
-
return if length <= @max_spans_before_partial_flush &&
|
|
118
|
-
(@partial_flush_timeout.nil? || @partial_flush_timeout <= 0 ||
|
|
119
|
-
(start_time && start_time > Time.now.utc - @partial_flush_timeout))
|
|
120
|
-
# Here, either the trace is old or we have too many spans, flush it.
|
|
121
|
-
traces = partial_flush(context)
|
|
122
|
-
return unless traces
|
|
123
|
-
traces.each do |trace|
|
|
124
|
-
yield trace
|
|
65
|
+
trace unless trace.empty?
|
|
125
66
|
end
|
|
126
67
|
end
|
|
127
|
-
|
|
128
|
-
private :add_children
|
|
129
|
-
private :partial_traces
|
|
130
|
-
private :partial_flush
|
|
131
68
|
end
|
|
132
69
|
end
|