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,54 @@
|
|
|
1
|
+
FROM ruby:3.0
|
|
2
|
+
|
|
3
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
4
|
+
|
|
5
|
+
# Install prerequisites
|
|
6
|
+
RUN set -ex && \
|
|
7
|
+
echo "===> Installing dependencies" && \
|
|
8
|
+
apt-get -y update && \
|
|
9
|
+
apt-get install -y --force-yes --no-install-recommends \
|
|
10
|
+
curl wget tar gzip gnupg apt-transport-https ca-certificates tzdata locales && \
|
|
11
|
+
\
|
|
12
|
+
echo "===> Installing NodeJS" && \
|
|
13
|
+
apt-get install -y --force-yes --no-install-recommends nodejs && \
|
|
14
|
+
\
|
|
15
|
+
echo "===> Installing Yarn" && \
|
|
16
|
+
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
|
|
17
|
+
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
|
|
18
|
+
apt-get update && \
|
|
19
|
+
apt-get install -y --force-yes --no-install-recommends yarn && \
|
|
20
|
+
\
|
|
21
|
+
echo "===> Installing database libraries" && \
|
|
22
|
+
apt-get install -y --force-yes --no-install-recommends \
|
|
23
|
+
postgresql-client sqlite3 && \
|
|
24
|
+
\
|
|
25
|
+
echo "===> Installing dev tools" && \
|
|
26
|
+
mkdir -p /usr/share/man/man1 && \
|
|
27
|
+
apt-get install -y --force-yes --no-install-recommends \
|
|
28
|
+
sudo git openssh-client rsync vim \
|
|
29
|
+
net-tools netcat parallel unzip zip bzip2 && \
|
|
30
|
+
\
|
|
31
|
+
echo "===> Cleaning up" && \
|
|
32
|
+
rm -rf /var/lib/apt/lists/*;
|
|
33
|
+
|
|
34
|
+
# Set timezone to UTC by default
|
|
35
|
+
RUN ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
|
36
|
+
|
|
37
|
+
# Set language
|
|
38
|
+
RUN locale-gen en_US.UTF-8
|
|
39
|
+
ENV LANG en_US.UTF-8
|
|
40
|
+
ENV LANGUAGE en_US:en
|
|
41
|
+
|
|
42
|
+
# Install RubyGems
|
|
43
|
+
RUN gem update --system
|
|
44
|
+
RUN mkdir -p "$GEM_HOME" && chmod -R 777 "$GEM_HOME"
|
|
45
|
+
|
|
46
|
+
# Upgrade RubyGems and Bundler
|
|
47
|
+
RUN gem update --system
|
|
48
|
+
RUN gem install bundler
|
|
49
|
+
ENV BUNDLE_SILENCE_ROOT_WARNING 1
|
|
50
|
+
|
|
51
|
+
# Setup demo environment includes
|
|
52
|
+
COPY ./include /vendor/dd-demo
|
|
53
|
+
ENV RUBYLIB /vendor/dd-demo
|
|
54
|
+
ENV RUBYOPT -rdatadog/demo_env
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
FROM debian:jessie
|
|
2
|
+
|
|
3
|
+
RUN echo "===> Installing tools..." && \
|
|
4
|
+
apt-get -y update && \
|
|
5
|
+
apt-get -y install build-essential curl && \
|
|
6
|
+
\
|
|
7
|
+
echo "===> Installing wrk" && \
|
|
8
|
+
WRK_VERSION=$(curl -L https://github.com/wg/wrk/raw/master/CHANGES 2>/dev/null | \
|
|
9
|
+
egrep '^wrk' | head -n 1 | awk '{print $2}') && \
|
|
10
|
+
echo $WRK_VERSION && \
|
|
11
|
+
mkdir /opt/wrk && \
|
|
12
|
+
cd /opt/wrk && \
|
|
13
|
+
curl -L https://github.com/wg/wrk/archive/$WRK_VERSION.tar.gz | \
|
|
14
|
+
tar zx --strip 1 && \
|
|
15
|
+
make && \
|
|
16
|
+
cp wrk /usr/local/bin/ && \
|
|
17
|
+
\
|
|
18
|
+
echo "===> Cleaning the system" && \
|
|
19
|
+
apt-get -f -y --auto-remove remove build-essential && \
|
|
20
|
+
apt-get clean && \
|
|
21
|
+
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /opt/wrk/
|
|
22
|
+
|
|
23
|
+
# Setup directory
|
|
24
|
+
RUN mkdir /scripts
|
|
25
|
+
RUN mkdir /data
|
|
26
|
+
WORKDIR /scripts
|
|
27
|
+
|
|
28
|
+
# Add scripts
|
|
29
|
+
COPY ./include /vendor/dd-demo
|
|
30
|
+
COPY ./wrk/scripts /scripts
|
|
31
|
+
|
|
32
|
+
# Set entrypoint
|
|
33
|
+
ENTRYPOINT ["./entrypoint.sh"]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
bash /vendor/dd-demo/http-health-check
|
|
3
|
+
|
|
4
|
+
# Start the load test
|
|
5
|
+
echo "== Starting load test... =="
|
|
6
|
+
|
|
7
|
+
if [[ $# -eq 0 ]] ; then
|
|
8
|
+
echo "** No load test specified: pass wrk args as a command. **"
|
|
9
|
+
echo "== Load test aborted. =="
|
|
10
|
+
exit 1
|
|
11
|
+
else
|
|
12
|
+
COMMAND="wrk $@"
|
|
13
|
+
echo "Command: $COMMAND"
|
|
14
|
+
/bin/bash -c "$COMMAND"
|
|
15
|
+
echo "== Load test done. =="
|
|
16
|
+
exit 0
|
|
17
|
+
fi
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
wrk.method = "GET"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
wrk.method = "GET"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
INTEGRATION_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
5
|
+
INTEGRATION_DIR=${INTEGRATION_SCRIPT_DIR%/script}
|
|
6
|
+
cd $INTEGRATION_DIR
|
|
7
|
+
|
|
8
|
+
# Parse options
|
|
9
|
+
while getopts ":v:" opt; do
|
|
10
|
+
case $opt in
|
|
11
|
+
v)
|
|
12
|
+
APP_RUBY_VERSION=$OPTARG
|
|
13
|
+
;;
|
|
14
|
+
\?)
|
|
15
|
+
echo "Invalid option: -$OPTARG" >&2
|
|
16
|
+
exit 1
|
|
17
|
+
;;
|
|
18
|
+
:)
|
|
19
|
+
echo "Option -$OPTARG requires an argument." >&2
|
|
20
|
+
exit 1
|
|
21
|
+
;;
|
|
22
|
+
esac
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
echo "== Building base images... =="
|
|
26
|
+
# "wrk" not necessary for CI: will be auto-built by local apps via docker-compose.
|
|
27
|
+
# docker build -t datadog/dd-apm-demo:wrk -f $INTEGRATION_DIR/images/wrk/Dockerfile $INTEGRATION_DIR/images
|
|
28
|
+
docker build -t datadog/dd-apm-demo:agent -f $INTEGRATION_DIR/images/agent/Dockerfile $INTEGRATION_DIR/images/agent
|
|
29
|
+
|
|
30
|
+
if [ -v APP_RUBY_VERSION ]; then
|
|
31
|
+
docker build -t datadog/dd-apm-demo:rb-$APP_RUBY_VERSION -f $INTEGRATION_DIR/images/ruby/$APP_RUBY_VERSION/Dockerfile $INTEGRATION_DIR/images
|
|
32
|
+
else
|
|
33
|
+
docker build -t datadog/dd-apm-demo:rb-2.0 -f $INTEGRATION_DIR/images/ruby/2.0/Dockerfile $INTEGRATION_DIR/images
|
|
34
|
+
docker build -t datadog/dd-apm-demo:rb-2.1 -f $INTEGRATION_DIR/images/ruby/2.1/Dockerfile $INTEGRATION_DIR/images
|
|
35
|
+
docker build -t datadog/dd-apm-demo:rb-2.2 -f $INTEGRATION_DIR/images/ruby/2.2/Dockerfile $INTEGRATION_DIR/images
|
|
36
|
+
docker build -t datadog/dd-apm-demo:rb-2.3 -f $INTEGRATION_DIR/images/ruby/2.3/Dockerfile $INTEGRATION_DIR/images
|
|
37
|
+
docker build -t datadog/dd-apm-demo:rb-2.4 -f $INTEGRATION_DIR/images/ruby/2.4/Dockerfile $INTEGRATION_DIR/images
|
|
38
|
+
docker build -t datadog/dd-apm-demo:rb-2.5 -f $INTEGRATION_DIR/images/ruby/2.5/Dockerfile $INTEGRATION_DIR/images
|
|
39
|
+
docker build -t datadog/dd-apm-demo:rb-2.6 -f $INTEGRATION_DIR/images/ruby/2.6/Dockerfile $INTEGRATION_DIR/images
|
|
40
|
+
docker build -t datadog/dd-apm-demo:rb-2.7 -f $INTEGRATION_DIR/images/ruby/2.7/Dockerfile $INTEGRATION_DIR/images
|
|
41
|
+
docker build -t datadog/dd-apm-demo:rb-3.0 -f $INTEGRATION_DIR/images/ruby/3.0/Dockerfile $INTEGRATION_DIR/images
|
|
42
|
+
fi
|
|
43
|
+
echo "== Done building base images. =="
|
data/lib/ddtrace.rb
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# During development, we load `ddtrace` by through `ddtrace.gemspec`,
|
|
2
|
+
# which in turn eager loads 'ddtrace/version'.
|
|
3
|
+
#
|
|
4
|
+
# Users load this gem by requiring this file.
|
|
5
|
+
# We need to ensure that any files loaded in our gemspec are also loaded here.
|
|
6
|
+
require 'ddtrace/version'
|
|
2
7
|
|
|
3
|
-
require 'ddtrace/registry'
|
|
4
8
|
require 'ddtrace/pin'
|
|
5
9
|
require 'ddtrace/tracer'
|
|
6
10
|
require 'ddtrace/error'
|
|
@@ -9,72 +13,71 @@ require 'ddtrace/quantization/http'
|
|
|
9
13
|
require 'ddtrace/pipeline'
|
|
10
14
|
require 'ddtrace/configuration'
|
|
11
15
|
require 'ddtrace/patcher'
|
|
16
|
+
require 'ddtrace/metrics'
|
|
17
|
+
require 'ddtrace/auto_instrument_base'
|
|
12
18
|
|
|
13
19
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
14
20
|
module Datadog
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
extend Configuration
|
|
22
|
+
extend AutoInstrumentBase
|
|
17
23
|
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#
|
|
22
|
-
# span = Datadog.tracer.trace('web.request')
|
|
23
|
-
# span.finish()
|
|
24
|
-
#
|
|
25
|
-
# If you want to override the default tracer, the recommended way
|
|
26
|
-
# is to "pin" your own tracer onto your traced component:
|
|
27
|
-
#
|
|
28
|
-
# tracer = Datadog::Tracer.new
|
|
29
|
-
# pin = Datadog::Pin.get_from(mypatchcomponent)
|
|
30
|
-
# pin.tracer = tracer
|
|
24
|
+
# Load and extend Contrib by default
|
|
25
|
+
require 'ddtrace/contrib/extensions'
|
|
26
|
+
extend Contrib::Extensions
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
# Load and extend OpenTelemetry compatibility by default
|
|
29
|
+
require 'ddtrace/opentelemetry/extensions'
|
|
30
|
+
extend OpenTelemetry::Extensions
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
# Load and extend AutoInstrument
|
|
33
|
+
require 'ddtrace/contrib/auto_instrument'
|
|
34
|
+
extend Contrib::AutoInstrument
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@configuration ||= Configuration.new
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def configure(target = configuration, opts = {})
|
|
48
|
-
if target.is_a?(Configuration)
|
|
49
|
-
yield(target)
|
|
50
|
-
else
|
|
51
|
-
Configuration::PinSetup.new(target, opts).call
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
36
|
+
# Add shutdown hook:
|
|
37
|
+
# Ensures the tracer has an opportunity to flush traces
|
|
38
|
+
# and cleanup before terminating the process.
|
|
39
|
+
at_exit { Datadog.shutdown! }
|
|
55
40
|
end
|
|
56
41
|
|
|
57
|
-
require 'ddtrace/contrib/
|
|
58
|
-
require 'ddtrace/contrib/
|
|
59
|
-
require 'ddtrace/contrib/
|
|
60
|
-
require 'ddtrace/contrib/active_model_serializers/
|
|
61
|
-
require 'ddtrace/contrib/active_record/
|
|
62
|
-
require 'ddtrace/contrib/
|
|
63
|
-
require 'ddtrace/contrib/
|
|
64
|
-
require 'ddtrace/contrib/
|
|
65
|
-
require 'ddtrace/contrib/
|
|
66
|
-
require 'ddtrace/contrib/
|
|
67
|
-
require 'ddtrace/contrib/
|
|
68
|
-
require 'ddtrace/contrib/
|
|
69
|
-
require 'ddtrace/contrib/
|
|
70
|
-
require 'ddtrace/contrib/
|
|
71
|
-
require 'ddtrace/contrib/
|
|
72
|
-
require 'ddtrace/contrib/
|
|
73
|
-
require 'ddtrace/contrib/
|
|
74
|
-
require 'ddtrace/contrib/
|
|
75
|
-
require 'ddtrace/contrib/
|
|
76
|
-
require 'ddtrace/contrib/
|
|
77
|
-
require 'ddtrace/contrib/
|
|
78
|
-
require 'ddtrace/contrib/
|
|
79
|
-
require 'ddtrace/contrib/
|
|
80
|
-
require 'ddtrace/
|
|
42
|
+
require 'ddtrace/contrib/action_cable/integration'
|
|
43
|
+
require 'ddtrace/contrib/action_pack/integration'
|
|
44
|
+
require 'ddtrace/contrib/action_view/integration'
|
|
45
|
+
require 'ddtrace/contrib/active_model_serializers/integration'
|
|
46
|
+
require 'ddtrace/contrib/active_record/integration'
|
|
47
|
+
require 'ddtrace/contrib/active_support/integration'
|
|
48
|
+
require 'ddtrace/contrib/aws/integration'
|
|
49
|
+
require 'ddtrace/contrib/concurrent_ruby/integration'
|
|
50
|
+
require 'ddtrace/contrib/cucumber/integration'
|
|
51
|
+
require 'ddtrace/contrib/dalli/integration'
|
|
52
|
+
require 'ddtrace/contrib/delayed_job/integration'
|
|
53
|
+
require 'ddtrace/contrib/elasticsearch/integration'
|
|
54
|
+
require 'ddtrace/contrib/ethon/integration'
|
|
55
|
+
require 'ddtrace/contrib/excon/integration'
|
|
56
|
+
require 'ddtrace/contrib/faraday/integration'
|
|
57
|
+
require 'ddtrace/contrib/grape/integration'
|
|
58
|
+
require 'ddtrace/contrib/graphql/integration'
|
|
59
|
+
require 'ddtrace/contrib/grpc/integration'
|
|
60
|
+
require 'ddtrace/contrib/http/integration'
|
|
61
|
+
require 'ddtrace/contrib/httpclient/integration'
|
|
62
|
+
require 'ddtrace/contrib/httprb/integration'
|
|
63
|
+
require 'ddtrace/contrib/integration'
|
|
64
|
+
require 'ddtrace/contrib/kafka/integration'
|
|
65
|
+
require 'ddtrace/contrib/presto/integration'
|
|
66
|
+
require 'ddtrace/contrib/que/integration'
|
|
67
|
+
require 'ddtrace/contrib/mysql2/integration'
|
|
68
|
+
require 'ddtrace/contrib/mongodb/integration'
|
|
69
|
+
require 'ddtrace/contrib/qless/integration'
|
|
70
|
+
require 'ddtrace/contrib/racecar/integration'
|
|
71
|
+
require 'ddtrace/contrib/rack/integration'
|
|
72
|
+
require 'ddtrace/contrib/rails/integration'
|
|
73
|
+
require 'ddtrace/contrib/rake/integration'
|
|
74
|
+
require 'ddtrace/contrib/redis/integration'
|
|
75
|
+
require 'ddtrace/contrib/resque/integration'
|
|
76
|
+
require 'ddtrace/contrib/rest_client/integration'
|
|
77
|
+
require 'ddtrace/contrib/rspec/integration'
|
|
78
|
+
require 'ddtrace/contrib/sequel/integration'
|
|
79
|
+
require 'ddtrace/contrib/shoryuken/integration'
|
|
80
|
+
require 'ddtrace/contrib/sidekiq/integration'
|
|
81
|
+
require 'ddtrace/contrib/sinatra/integration'
|
|
82
|
+
require 'ddtrace/contrib/sneakers/integration'
|
|
83
|
+
require 'ddtrace/contrib/sucker_punch/integration'
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/ext/analytics'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
# Defines analytics behavior
|
|
5
|
+
module Analytics
|
|
6
|
+
class << self
|
|
7
|
+
def set_sample_rate(span, sample_rate)
|
|
8
|
+
return if span.nil? || !sample_rate.is_a?(Numeric)
|
|
9
|
+
|
|
10
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def set_measured(span, value = true)
|
|
14
|
+
return if span.nil?
|
|
15
|
+
|
|
16
|
+
# rubocop:disable Style/MultipleComparison
|
|
17
|
+
value = value == true || value == 1 ? 1 : 0
|
|
18
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_MEASURED, value)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Extension for Datadog::Span
|
|
23
|
+
module Span
|
|
24
|
+
def set_tag(key, value)
|
|
25
|
+
case key
|
|
26
|
+
when Ext::Analytics::TAG_ENABLED
|
|
27
|
+
# If true, set rate to 1.0, otherwise set 0.0.
|
|
28
|
+
value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
|
29
|
+
Analytics.set_sample_rate(self, value)
|
|
30
|
+
when Ext::Analytics::TAG_SAMPLE_RATE
|
|
31
|
+
Analytics.set_sample_rate(self, value)
|
|
32
|
+
else
|
|
33
|
+
super if defined?(super)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/ddtrace/buffer.rb
CHANGED
|
@@ -1,60 +1,326 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'ddtrace/diagnostics/health'
|
|
2
|
+
require 'ddtrace/runtime/object_space'
|
|
2
3
|
|
|
4
|
+
# Trace buffer that accumulates traces for a consumer.
|
|
5
|
+
# Consumption can happen from a different thread.
|
|
3
6
|
module Datadog
|
|
4
|
-
#
|
|
5
|
-
# the buffer is full, a random
|
|
6
|
-
|
|
7
|
-
class TraceBuffer
|
|
7
|
+
# Buffer that stores objects. The buffer has a maximum size and when
|
|
8
|
+
# the buffer is full, a random object is discarded.
|
|
9
|
+
class Buffer
|
|
8
10
|
def initialize(max_size)
|
|
9
11
|
@max_size = max_size
|
|
10
|
-
|
|
11
|
-
@mutex = Mutex.new()
|
|
12
|
-
@traces = []
|
|
12
|
+
@items = []
|
|
13
13
|
@closed = false
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Add a new ``
|
|
17
|
-
# even if the buffer is full. In that case, a random
|
|
18
|
-
def push(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
# Add a new ``item`` in the local queue. This method doesn't block the execution
|
|
17
|
+
# even if the buffer is full. In that case, a random item is discarded.
|
|
18
|
+
def push(item)
|
|
19
|
+
return if closed?
|
|
20
|
+
|
|
21
|
+
full? ? replace!(item) : add!(item)
|
|
22
|
+
item
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# A bulk push alternative to +#push+. Use this method if
|
|
26
|
+
# pushing more than one item for efficiency.
|
|
27
|
+
def concat(items)
|
|
28
|
+
return if closed?
|
|
29
|
+
|
|
30
|
+
# Segment items into underflow and overflow
|
|
31
|
+
underflow, overflow = overflow_segments(items)
|
|
32
|
+
|
|
33
|
+
# Concatenate items do not exceed capacity.
|
|
34
|
+
add_all!(underflow) unless underflow.nil?
|
|
35
|
+
|
|
36
|
+
# Iteratively replace items, to ensure pseudo-random replacement.
|
|
37
|
+
overflow.each { |item| replace!(item) } unless overflow.nil?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Stored items are returned and the local buffer is reset.
|
|
41
|
+
def pop
|
|
42
|
+
drain!
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Return the current number of stored traces.
|
|
46
|
+
def length
|
|
47
|
+
@items.length
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Return if the buffer is empty.
|
|
51
|
+
def empty?
|
|
52
|
+
@items.empty?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Closes this buffer, preventing further pushing.
|
|
56
|
+
# Draining is still allowed.
|
|
57
|
+
def close
|
|
58
|
+
@closed = true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def closed?
|
|
62
|
+
@closed
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
protected
|
|
66
|
+
|
|
67
|
+
# Segment items into two distinct segments: underflow and overflow.
|
|
68
|
+
# Underflow are items that will fit into buffer.
|
|
69
|
+
# Overflow are items that will exceed capacity, after underflow is added.
|
|
70
|
+
# Returns each array, and nil if there is no underflow/overflow.
|
|
71
|
+
def overflow_segments(items)
|
|
72
|
+
underflow = nil
|
|
73
|
+
overflow = nil
|
|
74
|
+
|
|
75
|
+
overflow_size = @max_size > 0 ? (@items.length + items.length) - @max_size : 0
|
|
76
|
+
|
|
77
|
+
if overflow_size > 0
|
|
78
|
+
# Items will overflow
|
|
79
|
+
if overflow_size < items.length
|
|
80
|
+
# Partial overflow
|
|
81
|
+
underflow_end_index = items.length - overflow_size - 1
|
|
82
|
+
underflow = items[0..underflow_end_index]
|
|
83
|
+
overflow = items[(underflow_end_index + 1)..-1]
|
|
24
84
|
else
|
|
25
|
-
#
|
|
26
|
-
|
|
85
|
+
# Total overflow
|
|
86
|
+
overflow = items
|
|
27
87
|
end
|
|
88
|
+
else
|
|
89
|
+
# Items do not exceed capacity.
|
|
90
|
+
underflow = items
|
|
28
91
|
end
|
|
92
|
+
|
|
93
|
+
[underflow, overflow]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def full?
|
|
97
|
+
@max_size > 0 && @items.length >= @max_size
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def add_all!(items)
|
|
101
|
+
@items.concat(items)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def add!(item)
|
|
105
|
+
@items << item
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def replace!(item)
|
|
109
|
+
# Choose random item to be replaced
|
|
110
|
+
replace_index = rand(@items.length)
|
|
111
|
+
|
|
112
|
+
# Replace random item
|
|
113
|
+
discarded_item = @items[replace_index]
|
|
114
|
+
@items[replace_index] = item
|
|
115
|
+
|
|
116
|
+
# Return discarded item
|
|
117
|
+
discarded_item
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def drain!
|
|
121
|
+
items = @items
|
|
122
|
+
@items = []
|
|
123
|
+
items
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Buffer that stores objects, has a maximum size, and
|
|
128
|
+
# can be safely used concurrently on any environment.
|
|
129
|
+
#
|
|
130
|
+
# This implementation uses a {Mutex} around public methods, incurring
|
|
131
|
+
# overhead in order to ensure thread-safety.
|
|
132
|
+
#
|
|
133
|
+
# This is implementation is recommended for non-CRuby environments.
|
|
134
|
+
# If using CRuby, {Datadog::CRubyBuffer} is a faster implementation with minimal compromise.
|
|
135
|
+
class ThreadSafeBuffer < Buffer
|
|
136
|
+
def initialize(max_size)
|
|
137
|
+
super
|
|
138
|
+
|
|
139
|
+
@mutex = Mutex.new
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Add a new ``item`` in the local queue. This method doesn't block the execution
|
|
143
|
+
# even if the buffer is full. In that case, a random item is discarded.
|
|
144
|
+
def push(item)
|
|
145
|
+
synchronize { super }
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def concat(items)
|
|
149
|
+
synchronize { super }
|
|
29
150
|
end
|
|
30
151
|
|
|
31
152
|
# Return the current number of stored traces.
|
|
32
153
|
def length
|
|
33
|
-
|
|
34
|
-
return @traces.length
|
|
35
|
-
end
|
|
154
|
+
synchronize { super }
|
|
36
155
|
end
|
|
37
156
|
|
|
38
157
|
# Return if the buffer is empty.
|
|
39
158
|
def empty?
|
|
40
|
-
|
|
41
|
-
return @traces.empty?
|
|
42
|
-
end
|
|
159
|
+
synchronize { super }
|
|
43
160
|
end
|
|
44
161
|
|
|
45
162
|
# Stored traces are returned and the local buffer is reset.
|
|
46
163
|
def pop
|
|
47
|
-
|
|
48
|
-
traces = @traces
|
|
49
|
-
@traces = []
|
|
50
|
-
return traces
|
|
51
|
-
end
|
|
164
|
+
synchronize { super }
|
|
52
165
|
end
|
|
53
166
|
|
|
54
167
|
def close
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
168
|
+
synchronize { super }
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def synchronize(&block)
|
|
172
|
+
@mutex.synchronize(&block)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Buffer that stores objects, has a maximum size, and
|
|
177
|
+
# can be safely used concurrently with CRuby.
|
|
178
|
+
#
|
|
179
|
+
# Under extreme concurrency scenarios, this class can exceed
|
|
180
|
+
# its +max_size+ by up to 4%.
|
|
181
|
+
#
|
|
182
|
+
# Because singular +Array+ operations are thread-safe in CRuby,
|
|
183
|
+
# we can implement the trace buffer without an explicit lock,
|
|
184
|
+
# while making the compromise of allowing the buffer to go
|
|
185
|
+
# over its maximum limit under extreme circumstances.
|
|
186
|
+
#
|
|
187
|
+
# On the following scenario:
|
|
188
|
+
# * 4.5 million spans/second.
|
|
189
|
+
# * Pushed into a single CRubyTraceBuffer from 1000 threads.
|
|
190
|
+
# The buffer can exceed its maximum size by no more than 4%.
|
|
191
|
+
#
|
|
192
|
+
# This implementation allocates less memory and is faster
|
|
193
|
+
# than {Datadog::ThreadSafeBuffer}.
|
|
194
|
+
#
|
|
195
|
+
# @see spec/ddtrace/benchmark/buffer_benchmark_spec.rb Buffer benchmarks
|
|
196
|
+
# @see https://github.com/ruby-concurrency/concurrent-ruby/blob/c1114a0c6891d9634f019f1f9fe58dcae8658964/lib/concurrent-ruby/concurrent/array.rb#L23-L27
|
|
197
|
+
class CRubyBuffer < Buffer
|
|
198
|
+
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
|
199
|
+
# even if the buffer is full. In that case, a random trace is discarded.
|
|
200
|
+
def replace!(item)
|
|
201
|
+
# we should replace a random trace with the new one
|
|
202
|
+
replace_index = rand(@items.size)
|
|
203
|
+
replaced_trace = @items.delete_at(replace_index)
|
|
204
|
+
@items << item
|
|
205
|
+
|
|
206
|
+
# We might have deleted an element right when the buffer
|
|
207
|
+
# was drained, thus +replaced_trace+ will be +nil+.
|
|
208
|
+
# In that case, nothing was replaced, and this method
|
|
209
|
+
# performed a simple insertion into the buffer.
|
|
210
|
+
replaced_trace
|
|
58
211
|
end
|
|
59
212
|
end
|
|
213
|
+
|
|
214
|
+
# Health metrics for trace buffers.
|
|
215
|
+
module MeasuredBuffer
|
|
216
|
+
def initialize(*_)
|
|
217
|
+
super
|
|
218
|
+
|
|
219
|
+
@buffer_accepted = 0
|
|
220
|
+
@buffer_accepted_lengths = 0
|
|
221
|
+
@buffer_dropped = 0
|
|
222
|
+
@buffer_spans = 0
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def add!(trace)
|
|
226
|
+
super
|
|
227
|
+
|
|
228
|
+
# Emit health metrics
|
|
229
|
+
measure_accept(trace)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def add_all!(traces)
|
|
233
|
+
super
|
|
234
|
+
|
|
235
|
+
# Emit health metrics
|
|
236
|
+
traces.each { |trace| measure_accept(trace) }
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def replace!(trace)
|
|
240
|
+
discarded_trace = super
|
|
241
|
+
|
|
242
|
+
# Emit health metrics
|
|
243
|
+
measure_accept(trace)
|
|
244
|
+
measure_drop(discarded_trace) if discarded_trace
|
|
245
|
+
|
|
246
|
+
discarded_trace
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# Stored traces are returned and the local buffer is reset.
|
|
250
|
+
def drain!
|
|
251
|
+
traces = super
|
|
252
|
+
measure_pop(traces)
|
|
253
|
+
traces
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def measure_accept(trace)
|
|
257
|
+
@buffer_accepted += 1
|
|
258
|
+
@buffer_accepted_lengths += trace.length
|
|
259
|
+
|
|
260
|
+
@buffer_spans += trace.length
|
|
261
|
+
rescue StandardError => e
|
|
262
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def measure_drop(trace)
|
|
266
|
+
@buffer_dropped += 1
|
|
267
|
+
|
|
268
|
+
@buffer_spans -= trace.length
|
|
269
|
+
rescue StandardError => e
|
|
270
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def measure_pop(traces)
|
|
274
|
+
# Accepted, cumulative totals
|
|
275
|
+
Datadog.health_metrics.queue_accepted(@buffer_accepted)
|
|
276
|
+
Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths)
|
|
277
|
+
|
|
278
|
+
# Dropped, cumulative totals
|
|
279
|
+
Datadog.health_metrics.queue_dropped(@buffer_dropped)
|
|
280
|
+
# TODO: are we missing a +queue_dropped_lengths+ metric?
|
|
281
|
+
|
|
282
|
+
# Queue gauges, current values
|
|
283
|
+
Datadog.health_metrics.queue_max_length(@max_size)
|
|
284
|
+
Datadog.health_metrics.queue_spans(@buffer_spans)
|
|
285
|
+
Datadog.health_metrics.queue_length(traces.length)
|
|
286
|
+
|
|
287
|
+
# Reset aggregated metrics
|
|
288
|
+
@buffer_accepted = 0
|
|
289
|
+
@buffer_accepted_lengths = 0
|
|
290
|
+
@buffer_dropped = 0
|
|
291
|
+
@buffer_spans = 0
|
|
292
|
+
rescue StandardError => e
|
|
293
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Trace buffer that stores application traces, has a maximum size, and
|
|
298
|
+
# can be safely used concurrently on any environment.
|
|
299
|
+
#
|
|
300
|
+
# @see {Datadog::ThreadSafeBuffer}
|
|
301
|
+
class ThreadSafeTraceBuffer < ThreadSafeBuffer
|
|
302
|
+
prepend MeasuredBuffer
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Trace buffer that stores application traces, has a maximum size, and
|
|
306
|
+
# can be safely used concurrently with CRuby.
|
|
307
|
+
#
|
|
308
|
+
# @see {Datadog::CRubyBuffer}
|
|
309
|
+
class CRubyTraceBuffer < CRubyBuffer
|
|
310
|
+
prepend MeasuredBuffer
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Trace buffer that stores application traces. The buffer has a maximum size and when
|
|
314
|
+
# the buffer is full, a random trace is discarded. This class is thread-safe and is used
|
|
315
|
+
# automatically by the ``Tracer`` instance when a ``Span`` is finished.
|
|
316
|
+
#
|
|
317
|
+
# We choose the default TraceBuffer implementation for current platform dynamically here.
|
|
318
|
+
#
|
|
319
|
+
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
|
320
|
+
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
|
321
|
+
TraceBuffer = if Datadog::Ext::Runtime::RUBY_ENGINE == 'ruby'
|
|
322
|
+
CRubyTraceBuffer
|
|
323
|
+
else
|
|
324
|
+
ThreadSafeTraceBuffer
|
|
325
|
+
end
|
|
60
326
|
end
|