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
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
require 'ddtrace/ext/app_types'
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
3
|
require 'ddtrace/propagation/http_propagator'
|
|
4
|
+
require 'ddtrace/contrib/analytics'
|
|
5
|
+
require 'ddtrace/contrib/rack/ext'
|
|
4
6
|
require 'ddtrace/contrib/rack/request_queue'
|
|
7
|
+
require 'ddtrace/environment'
|
|
8
|
+
require 'date'
|
|
5
9
|
|
|
6
10
|
module Datadog
|
|
7
11
|
module Contrib
|
|
@@ -13,7 +17,10 @@ module Datadog
|
|
|
13
17
|
# in the Rack environment so that it can be retrieved by the underlying
|
|
14
18
|
# application. If request tags are not set by the app, they will be set using
|
|
15
19
|
# information available at the Rack level.
|
|
20
|
+
# rubocop:disable Metrics/ClassLength
|
|
16
21
|
class TraceMiddleware
|
|
22
|
+
# DEPRECATED: Remove in 1.0 in favor of Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN
|
|
23
|
+
# This constant will remain here until then, for backwards compatibility.
|
|
17
24
|
RACK_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
|
|
18
25
|
|
|
19
26
|
def initialize(app)
|
|
@@ -21,49 +28,57 @@ module Datadog
|
|
|
21
28
|
end
|
|
22
29
|
|
|
23
30
|
def compute_queue_time(env, tracer)
|
|
24
|
-
return unless
|
|
31
|
+
return unless configuration[:request_queuing]
|
|
25
32
|
|
|
26
33
|
# parse the request queue time
|
|
27
34
|
request_start = Datadog::Contrib::Rack::QueueTime.get_request_start(env)
|
|
28
35
|
return if request_start.nil?
|
|
29
36
|
|
|
30
37
|
tracer.trace(
|
|
31
|
-
|
|
38
|
+
Ext::SPAN_HTTP_SERVER_QUEUE,
|
|
39
|
+
span_type: Datadog::Ext::HTTP::TYPE_PROXY,
|
|
32
40
|
start_time: request_start,
|
|
33
|
-
service:
|
|
41
|
+
service: configuration[:web_service_name]
|
|
34
42
|
)
|
|
35
43
|
end
|
|
36
44
|
|
|
37
45
|
def call(env)
|
|
38
46
|
# retrieve integration settings
|
|
39
|
-
tracer =
|
|
47
|
+
tracer = configuration[:tracer]
|
|
40
48
|
|
|
41
|
-
#
|
|
49
|
+
# Extract distributed tracing context before creating any spans,
|
|
50
|
+
# so that all spans will be added to the distributed trace.
|
|
51
|
+
if configuration[:distributed_tracing]
|
|
52
|
+
context = HTTPPropagator.extract(env)
|
|
53
|
+
tracer.provider.context = context if context.trace_id
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Create a root Span to keep track of frontend web servers
|
|
42
57
|
# (i.e. Apache, nginx) if the header is properly set
|
|
43
58
|
frontend_span = compute_queue_time(env, tracer)
|
|
44
59
|
|
|
45
60
|
trace_options = {
|
|
46
|
-
service:
|
|
61
|
+
service: configuration[:service_name],
|
|
47
62
|
resource: nil,
|
|
48
|
-
span_type: Datadog::Ext::HTTP::
|
|
63
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
49
64
|
}
|
|
50
65
|
|
|
51
|
-
if Datadog.configuration[:rack][:distributed_tracing]
|
|
52
|
-
context = HTTPPropagator.extract(env)
|
|
53
|
-
tracer.provider.context = context if context.trace_id
|
|
54
|
-
end
|
|
55
|
-
|
|
56
66
|
# start a new request span and attach it to the current Rack environment;
|
|
57
67
|
# we must ensure that the span `resource` is set later
|
|
58
|
-
request_span = tracer.trace(
|
|
68
|
+
request_span = tracer.trace(Ext::SPAN_REQUEST, trace_options)
|
|
59
69
|
env[RACK_REQUEST_SPAN] = request_span
|
|
60
70
|
|
|
61
|
-
# TODO:
|
|
71
|
+
# TODO: Add deprecation warnings back in
|
|
72
|
+
# DEV: Some third party Gems will loop over the rack env causing our deprecation
|
|
73
|
+
# warnings to be shown even when the user is not accessing them directly
|
|
74
|
+
#
|
|
75
|
+
# add_deprecation_warnings(env)
|
|
76
|
+
# env.without_datadog_warnings do
|
|
77
|
+
# # TODO: For backwards compatibility; this attribute is deprecated.
|
|
78
|
+
# env[:datadog_rack_request_span] = env[RACK_REQUEST_SPAN]
|
|
79
|
+
# end
|
|
62
80
|
env[:datadog_rack_request_span] = env[RACK_REQUEST_SPAN]
|
|
63
81
|
|
|
64
|
-
# Add deprecation warnings
|
|
65
|
-
add_deprecation_warnings(env)
|
|
66
|
-
|
|
67
82
|
# Copy the original env, before the rest of the stack executes.
|
|
68
83
|
# Values may change; we want values before that happens.
|
|
69
84
|
original_env = env.dup
|
|
@@ -85,33 +100,39 @@ module Datadog
|
|
|
85
100
|
request_span.set_error(e) unless request_span.nil?
|
|
86
101
|
raise e
|
|
87
102
|
ensure
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
103
|
+
if request_span
|
|
104
|
+
# Rack is a really low level interface and it doesn't provide any
|
|
105
|
+
# advanced functionality like routers. Because of that, we assume that
|
|
106
|
+
# the underlying framework or application has more knowledge about
|
|
107
|
+
# the result for this request; `resource` and `tags` are expected to
|
|
108
|
+
# be set in another level but if they're missing, reasonable defaults
|
|
109
|
+
# are used.
|
|
110
|
+
set_request_tags!(request_span, env, status, headers, response, original_env || env)
|
|
111
|
+
|
|
112
|
+
# ensure the request_span is finished and the context reset;
|
|
113
|
+
# this assumes that the Rack middleware creates a root span
|
|
114
|
+
request_span.finish
|
|
115
|
+
end
|
|
116
|
+
|
|
99
117
|
frontend_span.finish unless frontend_span.nil?
|
|
100
118
|
|
|
101
119
|
# TODO: Remove this once we change how context propagation works. This
|
|
102
120
|
# ensures we clean thread-local variables on each HTTP request avoiding
|
|
103
121
|
# memory leaks.
|
|
104
|
-
tracer.provider.context = Datadog::Context.new
|
|
122
|
+
tracer.provider.context = Datadog::Context.new if tracer
|
|
105
123
|
end
|
|
106
124
|
|
|
107
125
|
def resource_name_for(env, status)
|
|
108
|
-
if
|
|
126
|
+
if configuration[:middleware_names] && env['RESPONSE_MIDDLEWARE']
|
|
109
127
|
"#{env['RESPONSE_MIDDLEWARE']}##{env['REQUEST_METHOD']}"
|
|
110
128
|
else
|
|
111
129
|
"#{env['REQUEST_METHOD']} #{status}".strip
|
|
112
130
|
end
|
|
113
131
|
end
|
|
114
132
|
|
|
133
|
+
# rubocop:disable Metrics/AbcSize
|
|
134
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
135
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
115
136
|
def set_request_tags!(request_span, env, status, headers, response, original_env)
|
|
116
137
|
# http://www.rubydoc.info/github/rack/rack/file/SPEC
|
|
117
138
|
# The source of truth in Rack is the PATH_INFO key that holds the
|
|
@@ -129,13 +150,27 @@ module Datadog
|
|
|
129
150
|
response_headers = parse_response_headers(headers || {})
|
|
130
151
|
|
|
131
152
|
request_span.resource ||= resource_name_for(env, status)
|
|
153
|
+
|
|
154
|
+
# Associate with runtime metrics
|
|
155
|
+
Datadog.runtime_metrics.associate_with_span(request_span)
|
|
156
|
+
|
|
157
|
+
# Set analytics sample rate
|
|
158
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
159
|
+
Contrib::Analytics.set_sample_rate(request_span, configuration[:analytics_sample_rate])
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Measure service stats
|
|
163
|
+
Contrib::Analytics.set_measured(request_span)
|
|
164
|
+
|
|
132
165
|
if request_span.get_tag(Datadog::Ext::HTTP::METHOD).nil?
|
|
133
166
|
request_span.set_tag(Datadog::Ext::HTTP::METHOD, env['REQUEST_METHOD'])
|
|
134
167
|
end
|
|
168
|
+
|
|
135
169
|
if request_span.get_tag(Datadog::Ext::HTTP::URL).nil?
|
|
136
|
-
options =
|
|
170
|
+
options = configuration[:quantize]
|
|
137
171
|
request_span.set_tag(Datadog::Ext::HTTP::URL, Datadog::Quantization::HTTP.url(url, options))
|
|
138
172
|
end
|
|
173
|
+
|
|
139
174
|
if request_span.get_tag(Datadog::Ext::HTTP::BASE_URL).nil?
|
|
140
175
|
request_obj = ::Rack::Request.new(env)
|
|
141
176
|
|
|
@@ -148,6 +183,7 @@ module Datadog
|
|
|
148
183
|
|
|
149
184
|
request_span.set_tag(Datadog::Ext::HTTP::BASE_URL, base_url)
|
|
150
185
|
end
|
|
186
|
+
|
|
151
187
|
if request_span.get_tag(Datadog::Ext::HTTP::STATUS_CODE).nil? && status
|
|
152
188
|
request_span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, status)
|
|
153
189
|
end
|
|
@@ -164,9 +200,7 @@ module Datadog
|
|
|
164
200
|
|
|
165
201
|
# detect if the status code is a 5xx and flag the request span as an error
|
|
166
202
|
# unless it has been already set by the underlying framework
|
|
167
|
-
if status.to_s.start_with?('5') && request_span.status.zero?
|
|
168
|
-
request_span.status = 1
|
|
169
|
-
end
|
|
203
|
+
request_span.status = 1 if status.to_s.start_with?('5') && request_span.status.zero?
|
|
170
204
|
end
|
|
171
205
|
|
|
172
206
|
private
|
|
@@ -175,43 +209,62 @@ module Datadog
|
|
|
175
209
|
:datadog_rack_request_span is considered an internal symbol in the Rack env,
|
|
176
210
|
and has been been DEPRECATED. Public support for its usage is discontinued.
|
|
177
211
|
If you need the Rack request span, try using `Datadog.tracer.active_span`.
|
|
178
|
-
This key will be removed in version
|
|
212
|
+
This key will be removed in version 1.0).freeze
|
|
213
|
+
|
|
214
|
+
def configuration
|
|
215
|
+
Datadog.configuration[:rack]
|
|
216
|
+
end
|
|
179
217
|
|
|
180
218
|
def add_deprecation_warnings(env)
|
|
181
219
|
env.instance_eval do
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
220
|
+
unless instance_variable_defined?(:@patched_with_datadog_warnings)
|
|
221
|
+
@patched_with_datadog_warnings = true
|
|
222
|
+
@datadog_deprecation_warnings = true
|
|
223
|
+
@datadog_span_warning = true
|
|
224
|
+
|
|
225
|
+
def [](key)
|
|
226
|
+
if key == :datadog_rack_request_span \
|
|
227
|
+
&& @datadog_span_warning \
|
|
228
|
+
&& @datadog_deprecation_warnings
|
|
229
|
+
Datadog.logger.warn(REQUEST_SPAN_DEPRECATION_WARNING)
|
|
230
|
+
@datadog_span_warning = true
|
|
231
|
+
end
|
|
232
|
+
super
|
|
186
233
|
end
|
|
187
|
-
super
|
|
188
|
-
end
|
|
189
234
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
235
|
+
def []=(key, value)
|
|
236
|
+
if key == :datadog_rack_request_span \
|
|
237
|
+
&& @datadog_span_warning \
|
|
238
|
+
&& @datadog_deprecation_warnings
|
|
239
|
+
Datadog.logger.warn(REQUEST_SPAN_DEPRECATION_WARNING)
|
|
240
|
+
@datadog_span_warning = true
|
|
241
|
+
end
|
|
242
|
+
super
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def without_datadog_warnings
|
|
246
|
+
@datadog_deprecation_warnings = false
|
|
247
|
+
yield
|
|
248
|
+
ensure
|
|
249
|
+
@datadog_deprecation_warnings = true
|
|
194
250
|
end
|
|
195
|
-
super
|
|
196
251
|
end
|
|
197
252
|
end
|
|
198
253
|
end
|
|
199
254
|
|
|
200
255
|
def parse_request_headers(env)
|
|
201
256
|
{}.tap do |result|
|
|
202
|
-
whitelist =
|
|
257
|
+
whitelist = configuration[:headers][:request] || []
|
|
203
258
|
whitelist.each do |header|
|
|
204
259
|
rack_header = header_to_rack_header(header)
|
|
205
|
-
if env.key?(rack_header)
|
|
206
|
-
result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header]
|
|
207
|
-
end
|
|
260
|
+
result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header] if env.key?(rack_header)
|
|
208
261
|
end
|
|
209
262
|
end
|
|
210
263
|
end
|
|
211
264
|
|
|
212
265
|
def parse_response_headers(headers)
|
|
213
266
|
{}.tap do |result|
|
|
214
|
-
whitelist =
|
|
267
|
+
whitelist = configuration[:headers][:response] || []
|
|
215
268
|
whitelist.each do |header|
|
|
216
269
|
if headers.key?(header)
|
|
217
270
|
result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[header]
|
|
@@ -219,9 +272,7 @@ module Datadog
|
|
|
219
272
|
# Try a case-insensitive lookup
|
|
220
273
|
uppercased_header = header.to_s.upcase
|
|
221
274
|
matching_header = headers.keys.find { |h| h.upcase == uppercased_header }
|
|
222
|
-
if matching_header
|
|
223
|
-
result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header]
|
|
224
|
-
end
|
|
275
|
+
result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header] if matching_header
|
|
225
276
|
end
|
|
226
277
|
end
|
|
227
278
|
end
|
|
@@ -2,70 +2,43 @@ module Datadog
|
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
4
|
# Provides instrumentation for `rack`
|
|
5
|
-
module
|
|
6
|
-
include
|
|
7
|
-
|
|
8
|
-
DEFAULT_HEADERS = {
|
|
9
|
-
response: [
|
|
10
|
-
'Content-Type',
|
|
11
|
-
'X-Request-ID'
|
|
12
|
-
]
|
|
13
|
-
}.freeze
|
|
14
|
-
|
|
15
|
-
register_as :rack
|
|
16
|
-
option :tracer, default: Datadog.tracer
|
|
17
|
-
option :distributed_tracing, default: false
|
|
18
|
-
option :middleware_names, default: false
|
|
19
|
-
option :quantize, default: {}
|
|
20
|
-
option :application
|
|
21
|
-
option :service_name, default: 'rack', depends_on: [:tracer] do |value|
|
|
22
|
-
get_option(:tracer).set_service_info(value, 'rack', Ext::AppTypes::WEB)
|
|
23
|
-
value
|
|
24
|
-
end
|
|
25
|
-
option :request_queuing, default: false
|
|
26
|
-
option :web_service_name, default: 'web-server', depends_on: [:tracer, :request_queuing] do |value|
|
|
27
|
-
if get_option(:request_queuing)
|
|
28
|
-
get_option(:tracer).set_service_info(value, 'webserver', Ext::AppTypes::WEB)
|
|
29
|
-
end
|
|
30
|
-
value
|
|
31
|
-
end
|
|
32
|
-
option :headers, default: DEFAULT_HEADERS
|
|
5
|
+
module MiddlewarePatcher
|
|
6
|
+
include Contrib::Patcher
|
|
33
7
|
|
|
34
8
|
module_function
|
|
35
9
|
|
|
10
|
+
def target_version
|
|
11
|
+
Integration.version
|
|
12
|
+
end
|
|
13
|
+
|
|
36
14
|
def patch
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
15
|
+
# Patch middleware
|
|
16
|
+
require_relative 'middlewares'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
41
19
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
Datadog::Tracer.log.warn(%(
|
|
48
|
-
Rack :middleware_names requires you to also pass :application.
|
|
49
|
-
Middleware names have NOT been patched; please provide :application.
|
|
50
|
-
e.g. use: :rack, middleware_names: true, application: my_rack_app).freeze)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
20
|
+
# Provides instrumentation for Rack middleware names
|
|
21
|
+
module MiddlewareNamePatcher
|
|
22
|
+
include Contrib::Patcher
|
|
23
|
+
|
|
24
|
+
module_function
|
|
53
25
|
|
|
54
|
-
|
|
26
|
+
def target_version
|
|
27
|
+
Integration.version
|
|
55
28
|
end
|
|
56
29
|
|
|
57
|
-
def
|
|
58
|
-
|
|
30
|
+
def patch
|
|
31
|
+
patch_middleware_names
|
|
59
32
|
end
|
|
60
33
|
|
|
61
|
-
def
|
|
34
|
+
def patch_middleware_names
|
|
62
35
|
retain_middleware_name(get_option(:application))
|
|
63
36
|
rescue => e
|
|
64
37
|
# We can safely ignore these exceptions since they happen only in the
|
|
65
38
|
# context of middleware patching outside a Rails server process (eg. a
|
|
66
39
|
# process that doesn't serve HTTP requests but has Rails environment
|
|
67
40
|
# loaded such as a Resque master process)
|
|
68
|
-
|
|
41
|
+
Datadog.logger.debug("Error patching middleware stack: #{e}")
|
|
69
42
|
end
|
|
70
43
|
|
|
71
44
|
def retain_middleware_name(middleware)
|
|
@@ -80,9 +53,52 @@ module Datadog
|
|
|
80
53
|
end
|
|
81
54
|
end
|
|
82
55
|
|
|
83
|
-
following = middleware.instance_variable_get('@app')
|
|
56
|
+
following = (middleware.instance_variable_get('@app') if middleware.instance_variable_defined?('@app'))
|
|
57
|
+
|
|
84
58
|
retain_middleware_name(following)
|
|
85
59
|
end
|
|
60
|
+
|
|
61
|
+
def get_option(option)
|
|
62
|
+
Datadog.configuration[:rack].get_option(option)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Applies multiple patches
|
|
67
|
+
module Patcher
|
|
68
|
+
PATCHERS = [
|
|
69
|
+
MiddlewarePatcher,
|
|
70
|
+
MiddlewareNamePatcher
|
|
71
|
+
].freeze
|
|
72
|
+
|
|
73
|
+
module_function
|
|
74
|
+
|
|
75
|
+
def patched?
|
|
76
|
+
PATCHERS.all?(&:patched?)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def target_version
|
|
80
|
+
Integration.version
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def patch
|
|
84
|
+
MiddlewarePatcher.patch unless MiddlewarePatcher.patched?
|
|
85
|
+
|
|
86
|
+
# Patch middleware names
|
|
87
|
+
if !MiddlewareNamePatcher.patched? && get_option(:middleware_names)
|
|
88
|
+
if get_option(:application)
|
|
89
|
+
MiddlewareNamePatcher.patch
|
|
90
|
+
else
|
|
91
|
+
Datadog.logger.warn(%(
|
|
92
|
+
Rack :middleware_names requires you to also pass :application.
|
|
93
|
+
Middleware names have NOT been patched; please provide :application.
|
|
94
|
+
e.g. use: :rack, middleware_names: true, application: my_rack_app).freeze)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def get_option(option)
|
|
100
|
+
Datadog.configuration[:rack].get_option(option)
|
|
101
|
+
end
|
|
86
102
|
end
|
|
87
103
|
end
|
|
88
104
|
end
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
|
-
#
|
|
4
|
+
# Retrieves the time spent in an upstream proxy
|
|
5
|
+
# for the current Rack request.
|
|
6
|
+
#
|
|
7
|
+
# This time captures the request delay introduced but
|
|
8
|
+
# such proxy before the request made it to the Ruby
|
|
9
|
+
# process.
|
|
5
10
|
module QueueTime
|
|
6
11
|
REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
|
|
7
12
|
QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
|
|
13
|
+
MINIMUM_ACCEPTABLE_TIME_VALUE = 1_000_000_000
|
|
8
14
|
|
|
9
15
|
module_function
|
|
10
16
|
|
|
@@ -12,20 +18,24 @@ module Datadog
|
|
|
12
18
|
header = env[REQUEST_START] || env[QUEUE_START]
|
|
13
19
|
return unless header
|
|
14
20
|
|
|
15
|
-
# nginx header is in the format "t=1512379167.574"
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
time_string = header.
|
|
21
|
+
# nginx header is seconds in the format "t=1512379167.574"
|
|
22
|
+
# apache header is microseconds in the format "t=1570633834463123"
|
|
23
|
+
# heroku header is milliseconds in the format "1570634024294"
|
|
24
|
+
time_string = header.to_s.delete('^0-9')
|
|
19
25
|
return if time_string.nil?
|
|
20
26
|
|
|
27
|
+
# Return nil if the time is clearly invalid
|
|
28
|
+
time_value = "#{time_string[0, 10]}.#{time_string[10, 6]}".to_f
|
|
29
|
+
return if time_value.zero? || time_value < MINIMUM_ACCEPTABLE_TIME_VALUE
|
|
30
|
+
|
|
21
31
|
# return the request_start only if it's lesser than
|
|
22
32
|
# current time, to avoid significant clock skew
|
|
23
|
-
request_start = Time.at(
|
|
33
|
+
request_start = Time.at(time_value)
|
|
24
34
|
request_start.utc > now ? nil : request_start
|
|
25
35
|
rescue StandardError => e
|
|
26
36
|
# in case of an Exception we don't create a
|
|
27
37
|
# `request.queuing` span
|
|
28
|
-
Datadog
|
|
38
|
+
Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
|
|
29
39
|
nil
|
|
30
40
|
end
|
|
31
41
|
end
|