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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module OpenTracer
|
|
3
|
+
# OpenTracing adapter for thread local scopes
|
|
4
|
+
class ThreadLocalScope < Scope
|
|
5
|
+
attr_reader \
|
|
6
|
+
:finish_on_close
|
|
7
|
+
|
|
8
|
+
def initialize(
|
|
9
|
+
manager:,
|
|
10
|
+
span:,
|
|
11
|
+
finish_on_close: true
|
|
12
|
+
)
|
|
13
|
+
super(manager: manager, span: span)
|
|
14
|
+
@finish_on_close = finish_on_close
|
|
15
|
+
@previous_scope = manager.active
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Mark the end of the active period for the current thread and Scope,
|
|
19
|
+
# updating the ScopeManager#active in the process.
|
|
20
|
+
#
|
|
21
|
+
# NOTE: Calling close more than once on a single Scope instance leads to
|
|
22
|
+
# undefined behavior.
|
|
23
|
+
def close
|
|
24
|
+
return unless equal?(manager.active)
|
|
25
|
+
|
|
26
|
+
span.finish if finish_on_close
|
|
27
|
+
manager.send(:set_scope, @previous_scope)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module OpenTracer
|
|
3
|
+
# OpenTracing adapter for thread local scope management
|
|
4
|
+
class ThreadLocalScopeManager < ScopeManager
|
|
5
|
+
# Make a span instance active.
|
|
6
|
+
#
|
|
7
|
+
# @param span [Span] the Span that should become active
|
|
8
|
+
# @param finish_on_close [Boolean] whether the Span should automatically be
|
|
9
|
+
# finished when Scope#close is called
|
|
10
|
+
# @return [Scope] instance to control the end of the active period for the
|
|
11
|
+
# Span. It is a programming error to neglect to call Scope#close on the
|
|
12
|
+
# returned instance.
|
|
13
|
+
def activate(span, finish_on_close: true)
|
|
14
|
+
ThreadLocalScope.new(
|
|
15
|
+
manager: self,
|
|
16
|
+
span: span,
|
|
17
|
+
finish_on_close: finish_on_close
|
|
18
|
+
).tap do |scope|
|
|
19
|
+
set_scope(scope)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [Scope] the currently active Scope which can be used to access the
|
|
24
|
+
# currently active Span.
|
|
25
|
+
#
|
|
26
|
+
# If there is a non-null Scope, its wrapped Span becomes an implicit parent
|
|
27
|
+
# (as Reference#CHILD_OF) of any newly-created Span at Tracer#start_active_span
|
|
28
|
+
# or Tracer#start_span time.
|
|
29
|
+
def active
|
|
30
|
+
Thread.current[object_id.to_s]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def set_scope(scope)
|
|
36
|
+
Thread.current[object_id.to_s] = scope
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
require 'ddtrace/tracer'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module OpenTracer
|
|
5
|
+
# OpenTracing adapter for Datadog::Tracer
|
|
6
|
+
class Tracer < ::OpenTracing::Tracer
|
|
7
|
+
extend Forwardable
|
|
8
|
+
|
|
9
|
+
attr_reader \
|
|
10
|
+
:datadog_tracer
|
|
11
|
+
|
|
12
|
+
def_delegators \
|
|
13
|
+
:datadog_tracer,
|
|
14
|
+
:configure
|
|
15
|
+
|
|
16
|
+
def initialize(options = {})
|
|
17
|
+
super()
|
|
18
|
+
@datadog_tracer = Datadog::Tracer.new(options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [ScopeManager] the current ScopeManager.
|
|
22
|
+
def scope_manager
|
|
23
|
+
@scope_manager ||= ThreadLocalScopeManager.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns a newly started and activated Scope.
|
|
27
|
+
#
|
|
28
|
+
# If the Tracer's ScopeManager#active is not nil, no explicit references
|
|
29
|
+
# are provided, and `ignore_active_scope` is false, then an inferred
|
|
30
|
+
# References#CHILD_OF reference is created to the ScopeManager#active's
|
|
31
|
+
# SpanContext when start_active is invoked.
|
|
32
|
+
#
|
|
33
|
+
# @param operation_name [String] The operation name for the Span
|
|
34
|
+
# @param child_of [SpanContext, Span] SpanContext that acts as a parent to
|
|
35
|
+
# the newly-started Span. If a Span instance is provided, its
|
|
36
|
+
# context is automatically substituted. See [Reference] for more
|
|
37
|
+
# information.
|
|
38
|
+
#
|
|
39
|
+
# If specified, the `references` parameter must be omitted.
|
|
40
|
+
# @param references [Array<Reference>] An array of reference
|
|
41
|
+
# objects that identify one or more parent SpanContexts.
|
|
42
|
+
# @param start_time [Time] When the Span started, if not now
|
|
43
|
+
# @param tags [Hash] Tags to assign to the Span at start time
|
|
44
|
+
# @param ignore_active_scope [Boolean] whether to create an implicit
|
|
45
|
+
# References#CHILD_OF reference to the ScopeManager#active.
|
|
46
|
+
# @param finish_on_close [Boolean] whether span should automatically be
|
|
47
|
+
# finished when Scope#close is called
|
|
48
|
+
# @yield [Scope] If an optional block is passed to start_active it will
|
|
49
|
+
# yield the newly-started Scope. If `finish_on_close` is true then the
|
|
50
|
+
# Span will be finished automatically after the block is executed.
|
|
51
|
+
# @return [Scope] The newly-started and activated Scope
|
|
52
|
+
def start_active_span(operation_name,
|
|
53
|
+
child_of: nil,
|
|
54
|
+
references: nil,
|
|
55
|
+
start_time: Time.now,
|
|
56
|
+
tags: nil,
|
|
57
|
+
ignore_active_scope: false,
|
|
58
|
+
finish_on_close: true)
|
|
59
|
+
|
|
60
|
+
# When meant to automatically determine the parent,
|
|
61
|
+
# Use the active scope first, otherwise fall back to any
|
|
62
|
+
# context generated by Datadog, so as to append to it and gain
|
|
63
|
+
# the benefit of any out-of-the-box tracing from Datadog preceding
|
|
64
|
+
# the OpenTracer::Tracer.
|
|
65
|
+
#
|
|
66
|
+
# We do this here instead of in #start_span because #start_span generates
|
|
67
|
+
# spans that are not assigned to a scope, a.k.a not supposed to be used by
|
|
68
|
+
# subsequent spans implicitly. By using the existing Datadog context, the span
|
|
69
|
+
# effectively ends up "assigned to a scope", by virtue of being added to the
|
|
70
|
+
# Context. Hence, it would behave more like an active span, which is why it
|
|
71
|
+
# should only be here.
|
|
72
|
+
unless child_of || ignore_active_scope
|
|
73
|
+
child_of = if scope_manager.active
|
|
74
|
+
scope_manager.active.span.context
|
|
75
|
+
else
|
|
76
|
+
SpanContextFactory.build(datadog_context: datadog_tracer.call_context)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Create the span, and auto-add it to the Datadog context.
|
|
81
|
+
span = start_span(
|
|
82
|
+
operation_name,
|
|
83
|
+
child_of: child_of,
|
|
84
|
+
references: references,
|
|
85
|
+
start_time: start_time,
|
|
86
|
+
tags: tags,
|
|
87
|
+
ignore_active_scope: ignore_active_scope
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Overwrite the tracer context with the OpenTracing managed context.
|
|
91
|
+
# This is mostly for the benefit of any out-of-the-box tracing from Datadog,
|
|
92
|
+
# such that spans generated by that tracing will be attached to the OpenTracer
|
|
93
|
+
# parent span.
|
|
94
|
+
datadog_tracer.provider.context = span.datadog_span.context
|
|
95
|
+
|
|
96
|
+
scope_manager.activate(span, finish_on_close: finish_on_close).tap do |scope|
|
|
97
|
+
if block_given?
|
|
98
|
+
begin
|
|
99
|
+
yield(scope)
|
|
100
|
+
ensure
|
|
101
|
+
scope.close
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Like #start_active_span, but the returned Span has not been registered via the
|
|
108
|
+
# ScopeManager.
|
|
109
|
+
#
|
|
110
|
+
# @param operation_name [String] The operation name for the Span
|
|
111
|
+
# @param child_of [SpanContext, Span] SpanContext that acts as a parent to
|
|
112
|
+
# the newly-started Span. If a Span instance is provided, its
|
|
113
|
+
# context is automatically substituted. See [Reference] for more
|
|
114
|
+
# information.
|
|
115
|
+
#
|
|
116
|
+
# If specified, the `references` parameter must be omitted.
|
|
117
|
+
# @param references [Array<Reference>] An array of reference
|
|
118
|
+
# objects that identify one or more parent SpanContexts.
|
|
119
|
+
# @param start_time [Time] When the Span started, if not now
|
|
120
|
+
# @param tags [Hash] Tags to assign to the Span at start time
|
|
121
|
+
# @param ignore_active_scope [Boolean] whether to create an implicit
|
|
122
|
+
# References#CHILD_OF reference to the ScopeManager#active.
|
|
123
|
+
# @return [Span] the newly-started Span instance, which has not been
|
|
124
|
+
# automatically registered via the ScopeManager
|
|
125
|
+
def start_span(operation_name,
|
|
126
|
+
child_of: nil,
|
|
127
|
+
references: nil,
|
|
128
|
+
start_time: Time.now,
|
|
129
|
+
tags: nil,
|
|
130
|
+
ignore_active_scope: false)
|
|
131
|
+
|
|
132
|
+
# Derive the OpenTracer::SpanContext to inherit from.
|
|
133
|
+
parent_span_context = inherited_span_context(child_of, ignore_active_scope: ignore_active_scope)
|
|
134
|
+
|
|
135
|
+
# Retrieve Datadog::Context from parent SpanContext.
|
|
136
|
+
datadog_context = parent_span_context.nil? ? nil : parent_span_context.datadog_context
|
|
137
|
+
|
|
138
|
+
# Build the new Datadog span
|
|
139
|
+
datadog_span = datadog_tracer.start_span(
|
|
140
|
+
operation_name,
|
|
141
|
+
child_of: datadog_context,
|
|
142
|
+
start_time: start_time,
|
|
143
|
+
tags: tags || {}
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# Build or extend the OpenTracer::SpanContext
|
|
147
|
+
span_context = if parent_span_context
|
|
148
|
+
SpanContextFactory.clone(span_context: parent_span_context)
|
|
149
|
+
else
|
|
150
|
+
SpanContextFactory.build(datadog_context: datadog_span.context)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Wrap the Datadog span and OpenTracer::Span context in a OpenTracer::Span
|
|
154
|
+
Span.new(datadog_span: datadog_span, span_context: span_context)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Inject a SpanContext into the given carrier
|
|
158
|
+
#
|
|
159
|
+
# @param span_context [SpanContext]
|
|
160
|
+
# @param format [OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK]
|
|
161
|
+
# @param carrier [Carrier] A carrier object of the type dictated by the specified `format`
|
|
162
|
+
def inject(span_context, format, carrier)
|
|
163
|
+
case format
|
|
164
|
+
when OpenTracing::FORMAT_TEXT_MAP
|
|
165
|
+
TextMapPropagator.inject(span_context, carrier)
|
|
166
|
+
when OpenTracing::FORMAT_BINARY
|
|
167
|
+
BinaryPropagator.inject(span_context, carrier)
|
|
168
|
+
when OpenTracing::FORMAT_RACK
|
|
169
|
+
RackPropagator.inject(span_context, carrier)
|
|
170
|
+
else
|
|
171
|
+
warn 'Unknown inject format'
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Extract a SpanContext in the given format from the given carrier.
|
|
176
|
+
#
|
|
177
|
+
# @param format [OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK]
|
|
178
|
+
# @param carrier [Carrier] A carrier object of the type dictated by the specified `format`
|
|
179
|
+
# @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
|
|
180
|
+
def extract(format, carrier)
|
|
181
|
+
case format
|
|
182
|
+
when OpenTracing::FORMAT_TEXT_MAP
|
|
183
|
+
TextMapPropagator.extract(carrier)
|
|
184
|
+
when OpenTracing::FORMAT_BINARY
|
|
185
|
+
BinaryPropagator.extract(carrier)
|
|
186
|
+
when OpenTracing::FORMAT_RACK
|
|
187
|
+
RackPropagator.extract(carrier)
|
|
188
|
+
else
|
|
189
|
+
warn 'Unknown extract format'
|
|
190
|
+
nil
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
private
|
|
195
|
+
|
|
196
|
+
def inherited_span_context(parent, ignore_active_scope: false)
|
|
197
|
+
case parent
|
|
198
|
+
when Span
|
|
199
|
+
parent.context
|
|
200
|
+
when SpanContext
|
|
201
|
+
parent
|
|
202
|
+
else
|
|
203
|
+
ignore_active_scope ? nil : scope_manager.active && scope_manager.active.span.context
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
data/lib/ddtrace/patcher.rb
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
require 'ddtrace/utils/only_once'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
|
-
#
|
|
4
|
+
# Deprecated: This module should no longer be included. It's only being kept around for backwards compatibility
|
|
5
|
+
# concerns regarding customer usage.
|
|
3
6
|
module Patcher
|
|
7
|
+
INCLUDED_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
8
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
9
|
+
|
|
4
10
|
def self.included(base)
|
|
11
|
+
INCLUDED_WARN_ONLY_ONCE.run do
|
|
12
|
+
Datadog.logger.warn(
|
|
13
|
+
'Including Datadog::Patcher is deprecated. ' \
|
|
14
|
+
'For the #do_once behavior, use Datadog::Utils::OnlyOnce instead. ' \
|
|
15
|
+
'For the #without_warnings behavior, use Datadog::Patcher.without_warnings { ... } as a module function.'
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
base.send(:extend, CommonMethods)
|
|
6
20
|
base.send(:include, CommonMethods)
|
|
7
21
|
end
|
|
@@ -21,17 +35,31 @@ module Datadog
|
|
|
21
35
|
end
|
|
22
36
|
end
|
|
23
37
|
|
|
24
|
-
def do_once(key = nil)
|
|
38
|
+
def do_once(key = nil, options = {})
|
|
39
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
40
|
+
Datadog.logger.warn('Datadog::Patcher#do_once is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
41
|
+
end
|
|
42
|
+
|
|
25
43
|
# If already done, don't do again
|
|
26
|
-
@done_once ||= {}
|
|
27
|
-
return @done_once[key] if @done_once.key?(key)
|
|
44
|
+
@done_once ||= Hash.new { |h, k| h[k] = {} }
|
|
45
|
+
return @done_once[key][options[:for]] if @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
28
46
|
|
|
29
47
|
# Otherwise 'do'
|
|
30
48
|
yield.tap do
|
|
31
49
|
# Then add the key so we don't do again.
|
|
32
|
-
@done_once[key] = true
|
|
50
|
+
@done_once[key][options[:for]] = true
|
|
33
51
|
end
|
|
34
52
|
end
|
|
53
|
+
|
|
54
|
+
def done?(key, options = {})
|
|
55
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
56
|
+
Datadog.logger.warn('Datadog::Patcher#done? is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
return false unless instance_variable_defined?(:@done_once)
|
|
60
|
+
|
|
61
|
+
!@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
62
|
+
end
|
|
35
63
|
end
|
|
36
64
|
|
|
37
65
|
# Extend the common methods so they're available as a module function.
|
data/lib/ddtrace/pin.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
require 'ddtrace/patcher'
|
|
2
|
+
require 'ddtrace/utils/only_once'
|
|
3
|
+
|
|
1
4
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
2
5
|
module Datadog
|
|
3
6
|
# A \Pin (a.k.a Patch INfo) is a small class which is used to
|
|
@@ -5,31 +8,38 @@ module Datadog
|
|
|
5
8
|
# This is useful if you wanted to, say, trace two different
|
|
6
9
|
# database clusters.
|
|
7
10
|
class Pin
|
|
11
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
12
|
+
|
|
8
13
|
def self.get_from(obj)
|
|
9
14
|
return nil unless obj.respond_to? :datadog_pin
|
|
15
|
+
|
|
10
16
|
obj.datadog_pin
|
|
11
17
|
end
|
|
12
18
|
|
|
13
|
-
attr_accessor :service_name
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
attr_accessor :name
|
|
18
|
-
attr_accessor :tracer
|
|
19
|
-
attr_accessor :config
|
|
19
|
+
attr_accessor :app, :app_type, :config, :name, :service_name, :tags, :writer
|
|
20
|
+
|
|
21
|
+
alias service= service_name=
|
|
22
|
+
alias service service_name
|
|
20
23
|
|
|
21
24
|
def initialize(service_name, options = {})
|
|
25
|
+
deprecation_warning unless options[:tracer].is_a?(Proc) || options[:tracer].nil?
|
|
26
|
+
|
|
22
27
|
@app = options[:app]
|
|
23
|
-
@tags = options[:tags]
|
|
24
28
|
@app_type = options[:app_type]
|
|
25
|
-
@name = nil # this would rarely be overriden as it's really span-specific
|
|
26
|
-
@tracer = options[:tracer] || Datadog.tracer
|
|
27
29
|
@config = options[:config]
|
|
28
|
-
|
|
30
|
+
@name = nil # this would rarely be overriden as it's really span-specific
|
|
31
|
+
@service_name = service_name
|
|
32
|
+
@tags = options[:tags]
|
|
33
|
+
@tracer = options[:tracer]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def tracer
|
|
37
|
+
@tracer.is_a?(Proc) ? @tracer.call : (@tracer || Datadog.tracer)
|
|
29
38
|
end
|
|
30
39
|
|
|
31
40
|
def enabled?
|
|
32
|
-
return
|
|
41
|
+
return tracer.enabled if tracer
|
|
42
|
+
|
|
33
43
|
false
|
|
34
44
|
end
|
|
35
45
|
|
|
@@ -54,17 +64,22 @@ module Datadog
|
|
|
54
64
|
obj.datadog_pin = self
|
|
55
65
|
end
|
|
56
66
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@service_name = name
|
|
67
|
+
def to_s
|
|
68
|
+
"Pin(service:#{service},app:#{app},app_type:#{app_type},name:#{name})"
|
|
61
69
|
end
|
|
62
70
|
|
|
63
|
-
|
|
64
|
-
alias service service_name
|
|
71
|
+
private
|
|
65
72
|
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
DEPRECATION_WARNING = %(
|
|
74
|
+
Explicitly providing a tracer instance is DEPRECATED.
|
|
75
|
+
It's recommended to not provide an explicit tracer instance
|
|
76
|
+
and let Datadog::Pin resolve the correct tracer internally.
|
|
77
|
+
).freeze
|
|
78
|
+
|
|
79
|
+
def deprecation_warning
|
|
80
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
81
|
+
Datadog.logger.warn("Datadog::Pin.new:#{DEPRECATION_WARNING}")
|
|
82
|
+
end
|
|
68
83
|
end
|
|
69
84
|
end
|
|
70
85
|
end
|
data/lib/ddtrace/pipeline.rb
CHANGED
|
@@ -10,12 +10,22 @@ module Datadog
|
|
|
10
10
|
@criteria = filter || block
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
# NOTE: this SpanFilter implementation only handles traces in which child spans appear
|
|
14
|
+
# after parent spans in the trace array. If in the future child spans can be before
|
|
15
|
+
# parent spans, then the code below will need to be updated.
|
|
13
16
|
def call(trace)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
deleted = Set.new
|
|
18
|
+
|
|
19
|
+
trace.delete_if do |span|
|
|
20
|
+
if deleted.include?(span.parent)
|
|
21
|
+
deleted << span
|
|
22
|
+
true
|
|
23
|
+
else
|
|
24
|
+
drop = drop_it?(span)
|
|
25
|
+
deleted << span if drop
|
|
26
|
+
drop
|
|
27
|
+
end
|
|
28
|
+
end
|
|
19
29
|
end
|
|
20
30
|
|
|
21
31
|
private
|
|
@@ -23,16 +33,6 @@ module Datadog
|
|
|
23
33
|
def drop_it?(span)
|
|
24
34
|
@criteria.call(span) rescue false
|
|
25
35
|
end
|
|
26
|
-
|
|
27
|
-
def clean_trace(black_list, trace)
|
|
28
|
-
current = black_list.shift
|
|
29
|
-
|
|
30
|
-
trace.delete(current)
|
|
31
|
-
|
|
32
|
-
trace.each do |span|
|
|
33
|
-
black_list << span if span.parent == current
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|