ddtrace 0.46.0 → 0.51.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 +303 -79
- data/.circleci/images/primary/Dockerfile-2.1.10 +12 -2
- data/.circleci/images/primary/Dockerfile-2.2.10 +12 -2
- data/.circleci/images/primary/Dockerfile-2.3.8 +14 -2
- data/.circleci/images/primary/Dockerfile-2.4.10 +85 -0
- data/.circleci/images/primary/{Dockerfile-2.5.6 → Dockerfile-2.5.9} +13 -3
- data/.circleci/images/primary/{Dockerfile-2.6.4 → Dockerfile-2.6.7} +13 -3
- data/.circleci/images/primary/{Dockerfile-2.7.0 → Dockerfile-2.7.3} +13 -3
- data/.circleci/images/primary/{Dockerfile-3.0.0 → Dockerfile-3.0.1} +3 -3
- data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +88 -0
- data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2.0.0} +2 -6
- data/.circleci/images/primary/{Dockerfile-2.4.6 → Dockerfile-truffleruby-21.1.0} +4 -4
- data/.dd-ci/ci-app-spec.json +31 -0
- data/.dockerignore +0 -1
- data/.gitattributes +1 -0
- data/.github/workflows/create-next-milestone.yml +2 -2
- data/.github/workflows/test-head.yaml +34 -0
- data/.gitignore +0 -1
- data/.gitlab-ci.yml +18 -18
- data/.rubocop.yml +32 -9
- data/.rubocop_todo.yml +53 -12
- data/.simplecov +6 -0
- data/Appraisals +254 -176
- data/CHANGELOG.md +271 -1
- data/Gemfile +35 -7
- data/LICENSE-3rdparty.csv +2 -0
- data/Rakefile +339 -332
- data/benchmarks/data/profiler-submission-marshal.gz +0 -0
- data/benchmarks/profiler_sample_loop.rb +69 -0
- data/benchmarks/profiler_submission.rb +93 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +6 -4
- data/docker-compose.yml +68 -54
- data/docs/GettingStarted.md +149 -67
- data/docs/ProfilingDevelopment.md +88 -0
- data/gemfiles/jruby_9.2.0.0_contrib.gemfile +82 -0
- data/gemfiles/jruby_9.2.0.0_contrib.gemfile.lock +1571 -0
- data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile +36 -0
- data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile.lock +159 -0
- data/gemfiles/jruby_9.2.0.0_core_old.gemfile +35 -0
- data/gemfiles/jruby_9.2.0.0_core_old.gemfile.lock +155 -0
- data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile +36 -0
- data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile.lock +176 -0
- data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile +36 -0
- data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile.lock +208 -0
- data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile +36 -0
- data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile.lock +208 -0
- data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile.lock +273 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile.lock +273 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile.lock +275 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile.lock +275 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile +43 -0
- data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile.lock +281 -0
- data/gemfiles/jruby_9.2.0.0_rails5_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails5_semantic_logger.gemfile.lock +272 -0
- data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile.lock +292 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile.lock +292 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile.lock +294 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile.lock +299 -0
- data/gemfiles/jruby_9.2.0.0_rails61_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails61_semantic_logger.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile.lock +289 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile.lock +289 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile +42 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile +43 -0
- data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile.lock +297 -0
- data/gemfiles/jruby_9.2.0.0_rails6_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.0.0_rails6_semantic_logger.gemfile.lock +288 -0
- data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile +37 -0
- data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile.lock +182 -0
- data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile +37 -0
- data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile.lock +182 -0
- data/gemfiles/jruby_9.2.18.0_contrib.gemfile +82 -0
- data/gemfiles/jruby_9.2.18.0_contrib.gemfile.lock +1571 -0
- data/gemfiles/jruby_9.2.18.0_contrib_old.gemfile +36 -0
- data/gemfiles/jruby_9.2.18.0_contrib_old.gemfile.lock +159 -0
- data/gemfiles/jruby_9.2.18.0_core_old.gemfile +35 -0
- data/gemfiles/jruby_9.2.18.0_core_old.gemfile.lock +155 -0
- data/gemfiles/jruby_9.2.18.0_cucumber3.gemfile +36 -0
- data/gemfiles/jruby_9.2.18.0_cucumber3.gemfile.lock +176 -0
- data/gemfiles/jruby_9.2.18.0_cucumber4.gemfile +36 -0
- data/gemfiles/jruby_9.2.18.0_cucumber4.gemfile.lock +208 -0
- data/gemfiles/jruby_9.2.18.0_cucumber5.gemfile +36 -0
- data/gemfiles/jruby_9.2.18.0_cucumber5.gemfile.lock +208 -0
- data/gemfiles/jruby_9.2.18.0_rails5_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails5_mysql2.gemfile.lock +273 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres.gemfile.lock +273 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis.gemfile.lock +275 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis_activesupport.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis_activesupport.gemfile.lock +275 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_sidekiq.gemfile +43 -0
- data/gemfiles/jruby_9.2.18.0_rails5_postgres_sidekiq.gemfile.lock +281 -0
- data/gemfiles/jruby_9.2.18.0_rails5_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails5_semantic_logger.gemfile.lock +272 -0
- data/gemfiles/jruby_9.2.18.0_rails61_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails61_mysql2.gemfile.lock +292 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres.gemfile.lock +292 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres_redis.gemfile.lock +294 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres_sidekiq.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails61_postgres_sidekiq.gemfile.lock +299 -0
- data/gemfiles/jruby_9.2.18.0_rails61_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails61_semantic_logger.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.18.0_rails6_mysql2.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails6_mysql2.gemfile.lock +289 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres.gemfile.lock +289 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis_activesupport.gemfile +42 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis_activesupport.gemfile.lock +291 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_sidekiq.gemfile +43 -0
- data/gemfiles/jruby_9.2.18.0_rails6_postgres_sidekiq.gemfile.lock +297 -0
- data/gemfiles/jruby_9.2.18.0_rails6_semantic_logger.gemfile +41 -0
- data/gemfiles/jruby_9.2.18.0_rails6_semantic_logger.gemfile.lock +288 -0
- data/gemfiles/jruby_9.2.18.0_resque2_redis3.gemfile +37 -0
- data/gemfiles/jruby_9.2.18.0_resque2_redis3.gemfile.lock +182 -0
- data/gemfiles/jruby_9.2.18.0_resque2_redis4.gemfile +37 -0
- data/gemfiles/jruby_9.2.18.0_resque2_redis4.gemfile.lock +182 -0
- data/gemfiles/ruby_2.1.10_contrib_old.gemfile +68 -0
- data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +310 -0
- data/gemfiles/ruby_2.1.10_core_old.gemfile +34 -0
- data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +120 -0
- data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +193 -0
- data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +40 -0
- data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +202 -0
- data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +42 -0
- data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +212 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +201 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +41 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +220 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +40 -0
- data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +210 -0
- data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +39 -0
- data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +220 -0
- data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +220 -0
- data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +41 -0
- data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +239 -0
- data/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile +39 -0
- data/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock +218 -0
- data/gemfiles/ruby_2.2.10_contrib.gemfile +76 -0
- data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +1499 -0
- data/gemfiles/ruby_2.2.10_core_old.gemfile +34 -0
- data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +120 -0
- data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +193 -0
- data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +40 -0
- data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +202 -0
- data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +41 -0
- data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +209 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +201 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +41 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +220 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +40 -0
- data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +210 -0
- data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +220 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +220 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +41 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +239 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +41 -0
- data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +231 -0
- data/gemfiles/ruby_2.2.10_rails4_semantic_logger.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails4_semantic_logger.gemfile.lock +218 -0
- data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +236 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +236 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +40 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +238 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +40 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +238 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +41 -0
- data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +247 -0
- data/gemfiles/ruby_2.2.10_rails5_semantic_logger.gemfile +39 -0
- data/gemfiles/ruby_2.2.10_rails5_semantic_logger.gemfile.lock +234 -0
- data/gemfiles/ruby_2.3.8_contrib.gemfile +75 -0
- data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +1508 -0
- data/gemfiles/ruby_2.3.8_contrib_old.gemfile +34 -0
- data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +123 -0
- data/gemfiles/ruby_2.3.8_core_old.gemfile +33 -0
- data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +119 -0
- data/gemfiles/ruby_2.3.8_cucumber3.gemfile +34 -0
- data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +140 -0
- data/gemfiles/ruby_2.3.8_cucumber4.gemfile +34 -0
- data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +170 -0
- data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +192 -0
- data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +39 -0
- data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +201 -0
- data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +40 -0
- data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +208 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +200 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +40 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +219 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +39 -0
- data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +209 -0
- data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +219 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +219 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +40 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +238 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +40 -0
- data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +230 -0
- data/gemfiles/ruby_2.3.8_rails4_semantic_logger.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails4_semantic_logger.gemfile.lock +218 -0
- data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +37 -0
- data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +230 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +37 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +230 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +232 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +38 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +232 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +39 -0
- data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +241 -0
- data/gemfiles/ruby_2.3.8_rails5_semantic_logger.gemfile +37 -0
- data/gemfiles/ruby_2.3.8_rails5_semantic_logger.gemfile.lock +229 -0
- data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +35 -0
- data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +146 -0
- data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +35 -0
- data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +146 -0
- data/gemfiles/ruby_2.4.10_contrib.gemfile +81 -0
- data/gemfiles/ruby_2.4.10_contrib.gemfile.lock +1596 -0
- data/gemfiles/ruby_2.4.10_contrib_old.gemfile +39 -0
- data/gemfiles/ruby_2.4.10_contrib_old.gemfile.lock +157 -0
- data/gemfiles/ruby_2.4.10_core_old.gemfile +38 -0
- data/gemfiles/ruby_2.4.10_core_old.gemfile.lock +153 -0
- data/gemfiles/ruby_2.4.10_cucumber3.gemfile +39 -0
- data/gemfiles/ruby_2.4.10_cucumber3.gemfile.lock +174 -0
- data/gemfiles/ruby_2.4.10_cucumber4.gemfile +39 -0
- data/gemfiles/ruby_2.4.10_cucumber4.gemfile.lock +204 -0
- data/gemfiles/ruby_2.4.10_rails5_mysql2.gemfile +42 -0
- data/gemfiles/ruby_2.4.10_rails5_mysql2.gemfile.lock +264 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres.gemfile +42 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres.gemfile.lock +264 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_redis.gemfile +43 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_redis.gemfile.lock +266 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_redis_activesupport.gemfile +43 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_redis_activesupport.gemfile.lock +266 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_sidekiq.gemfile +44 -0
- data/gemfiles/ruby_2.4.10_rails5_postgres_sidekiq.gemfile.lock +275 -0
- data/gemfiles/ruby_2.4.10_rails5_semantic_logger.gemfile +42 -0
- data/gemfiles/ruby_2.4.10_rails5_semantic_logger.gemfile.lock +263 -0
- data/gemfiles/ruby_2.4.10_resque2_redis3.gemfile +40 -0
- data/gemfiles/ruby_2.4.10_resque2_redis3.gemfile.lock +180 -0
- data/gemfiles/ruby_2.4.10_resque2_redis4.gemfile +40 -0
- data/gemfiles/ruby_2.4.10_resque2_redis4.gemfile.lock +180 -0
- data/gemfiles/ruby_2.5.9_contrib.gemfile +86 -0
- data/gemfiles/ruby_2.5.9_contrib.gemfile.lock +1608 -0
- data/gemfiles/ruby_2.5.9_contrib_old.gemfile +40 -0
- data/gemfiles/ruby_2.5.9_contrib_old.gemfile.lock +167 -0
- data/gemfiles/ruby_2.5.9_core_old.gemfile +39 -0
- data/gemfiles/ruby_2.5.9_core_old.gemfile.lock +163 -0
- data/gemfiles/ruby_2.5.9_cucumber3.gemfile +40 -0
- data/gemfiles/ruby_2.5.9_cucumber3.gemfile.lock +184 -0
- data/gemfiles/ruby_2.5.9_cucumber4.gemfile +40 -0
- data/gemfiles/ruby_2.5.9_cucumber4.gemfile.lock +216 -0
- data/gemfiles/ruby_2.5.9_cucumber5.gemfile +40 -0
- data/gemfiles/ruby_2.5.9_cucumber5.gemfile.lock +216 -0
- data/gemfiles/ruby_2.5.9_rails5_mysql2.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails5_mysql2.gemfile.lock +276 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres.gemfile.lock +276 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_redis.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_redis.gemfile.lock +278 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_redis_activesupport.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_sidekiq.gemfile +47 -0
- data/gemfiles/ruby_2.5.9_rails5_postgres_sidekiq.gemfile.lock +284 -0
- data/gemfiles/ruby_2.5.9_rails5_semantic_logger.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails5_semantic_logger.gemfile.lock +275 -0
- data/gemfiles/ruby_2.5.9_rails61_mysql2.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails61_mysql2.gemfile.lock +295 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres.gemfile.lock +295 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres_redis.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres_redis.gemfile.lock +297 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres_sidekiq.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails61_postgres_sidekiq.gemfile.lock +302 -0
- data/gemfiles/ruby_2.5.9_rails61_semantic_logger.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails61_semantic_logger.gemfile.lock +294 -0
- data/gemfiles/ruby_2.5.9_rails6_mysql2.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails6_mysql2.gemfile.lock +292 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres.gemfile.lock +292 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_redis.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_redis.gemfile.lock +294 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_redis_activesupport.gemfile +46 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_sidekiq.gemfile +47 -0
- data/gemfiles/ruby_2.5.9_rails6_postgres_sidekiq.gemfile.lock +300 -0
- data/gemfiles/ruby_2.5.9_rails6_semantic_logger.gemfile +45 -0
- data/gemfiles/ruby_2.5.9_rails6_semantic_logger.gemfile.lock +291 -0
- data/gemfiles/ruby_2.5.9_resque2_redis3.gemfile +41 -0
- data/gemfiles/ruby_2.5.9_resque2_redis3.gemfile.lock +190 -0
- data/gemfiles/ruby_2.5.9_resque2_redis4.gemfile +41 -0
- data/gemfiles/ruby_2.5.9_resque2_redis4.gemfile.lock +190 -0
- data/gemfiles/ruby_2.6.7_contrib.gemfile +82 -0
- data/gemfiles/ruby_2.6.7_contrib.gemfile.lock +1606 -0
- data/gemfiles/ruby_2.6.7_contrib_old.gemfile +40 -0
- data/gemfiles/ruby_2.6.7_contrib_old.gemfile.lock +169 -0
- data/gemfiles/ruby_2.6.7_core_old.gemfile +39 -0
- data/gemfiles/ruby_2.6.7_core_old.gemfile.lock +165 -0
- data/gemfiles/ruby_2.6.7_cucumber3.gemfile +40 -0
- data/gemfiles/ruby_2.6.7_cucumber3.gemfile.lock +186 -0
- data/gemfiles/ruby_2.6.7_cucumber4.gemfile +40 -0
- data/gemfiles/ruby_2.6.7_cucumber4.gemfile.lock +218 -0
- data/gemfiles/ruby_2.6.7_cucumber5.gemfile +40 -0
- data/gemfiles/ruby_2.6.7_cucumber5.gemfile.lock +218 -0
- data/gemfiles/ruby_2.6.7_rails5_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails5_mysql2.gemfile.lock +276 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres.gemfile.lock +276 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_redis.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_redis.gemfile.lock +278 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_redis_activesupport.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_sidekiq.gemfile +45 -0
- data/gemfiles/ruby_2.6.7_rails5_postgres_sidekiq.gemfile.lock +284 -0
- data/gemfiles/ruby_2.6.7_rails5_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails5_semantic_logger.gemfile.lock +275 -0
- data/gemfiles/ruby_2.6.7_rails61_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails61_mysql2.gemfile.lock +295 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres.gemfile.lock +295 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres_redis.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres_redis.gemfile.lock +297 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres_sidekiq.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails61_postgres_sidekiq.gemfile.lock +302 -0
- data/gemfiles/ruby_2.6.7_rails61_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails61_semantic_logger.gemfile.lock +294 -0
- data/gemfiles/ruby_2.6.7_rails6_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails6_mysql2.gemfile.lock +292 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres.gemfile.lock +292 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_redis.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_redis.gemfile.lock +294 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_redis_activesupport.gemfile +44 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_sidekiq.gemfile +45 -0
- data/gemfiles/ruby_2.6.7_rails6_postgres_sidekiq.gemfile.lock +300 -0
- data/gemfiles/ruby_2.6.7_rails6_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.6.7_rails6_semantic_logger.gemfile.lock +291 -0
- data/gemfiles/ruby_2.6.7_resque2_redis3.gemfile +41 -0
- data/gemfiles/ruby_2.6.7_resque2_redis3.gemfile.lock +192 -0
- data/gemfiles/ruby_2.6.7_resque2_redis4.gemfile +41 -0
- data/gemfiles/ruby_2.6.7_resque2_redis4.gemfile.lock +192 -0
- data/gemfiles/ruby_2.7.3_contrib.gemfile +81 -0
- data/gemfiles/ruby_2.7.3_contrib.gemfile.lock +1580 -0
- data/gemfiles/ruby_2.7.3_contrib_old.gemfile +40 -0
- data/gemfiles/ruby_2.7.3_contrib_old.gemfile.lock +169 -0
- data/gemfiles/ruby_2.7.3_core_old.gemfile +39 -0
- data/gemfiles/ruby_2.7.3_core_old.gemfile.lock +165 -0
- data/gemfiles/ruby_2.7.3_cucumber3.gemfile +40 -0
- data/gemfiles/ruby_2.7.3_cucumber3.gemfile.lock +186 -0
- data/gemfiles/ruby_2.7.3_cucumber4.gemfile +40 -0
- data/gemfiles/ruby_2.7.3_cucumber4.gemfile.lock +218 -0
- data/gemfiles/ruby_2.7.3_cucumber5.gemfile +40 -0
- data/gemfiles/ruby_2.7.3_cucumber5.gemfile.lock +218 -0
- data/gemfiles/ruby_2.7.3_rails5_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails5_mysql2.gemfile.lock +278 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres.gemfile.lock +278 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_redis.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_redis.gemfile.lock +297 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_redis_activesupport.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_redis_activesupport.gemfile.lock +297 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_sidekiq.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails5_postgres_sidekiq.gemfile.lock +286 -0
- data/gemfiles/ruby_2.7.3_rails5_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails5_semantic_logger.gemfile.lock +277 -0
- data/gemfiles/ruby_2.7.3_rails61_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails61_mysql2.gemfile.lock +297 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres.gemfile.lock +297 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres_redis.gemfile +44 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres_redis.gemfile.lock +299 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres_sidekiq.gemfile +44 -0
- data/gemfiles/ruby_2.7.3_rails61_postgres_sidekiq.gemfile.lock +304 -0
- data/gemfiles/ruby_2.7.3_rails61_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails61_semantic_logger.gemfile.lock +296 -0
- data/gemfiles/ruby_2.7.3_rails6_mysql2.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails6_mysql2.gemfile.lock +294 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres.gemfile.lock +294 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_redis.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_redis.gemfile.lock +313 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_redis_activesupport.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_redis_activesupport.gemfile.lock +313 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_sidekiq.gemfile +45 -0
- data/gemfiles/ruby_2.7.3_rails6_postgres_sidekiq.gemfile.lock +302 -0
- data/gemfiles/ruby_2.7.3_rails6_semantic_logger.gemfile +43 -0
- data/gemfiles/ruby_2.7.3_rails6_semantic_logger.gemfile.lock +293 -0
- data/gemfiles/ruby_2.7.3_resque2_redis3.gemfile +41 -0
- data/gemfiles/ruby_2.7.3_resque2_redis3.gemfile.lock +192 -0
- data/gemfiles/ruby_2.7.3_resque2_redis4.gemfile +41 -0
- data/gemfiles/ruby_2.7.3_resque2_redis4.gemfile.lock +192 -0
- data/gemfiles/ruby_3.0.1_contrib.gemfile +80 -0
- data/gemfiles/ruby_3.0.1_contrib.gemfile.lock +1583 -0
- data/gemfiles/ruby_3.0.1_core_old.gemfile +40 -0
- data/gemfiles/ruby_3.0.1_core_old.gemfile.lock +167 -0
- data/gemfiles/ruby_3.0.1_cucumber3.gemfile +41 -0
- data/gemfiles/ruby_3.0.1_cucumber3.gemfile.lock +188 -0
- data/gemfiles/ruby_3.0.1_cucumber4.gemfile +41 -0
- data/gemfiles/ruby_3.0.1_cucumber4.gemfile.lock +220 -0
- data/gemfiles/ruby_3.0.1_cucumber5.gemfile +41 -0
- data/gemfiles/ruby_3.0.1_cucumber5.gemfile.lock +220 -0
- data/gemfiles/ruby_3.0.1_rails61_mysql2.gemfile +44 -0
- data/gemfiles/ruby_3.0.1_rails61_mysql2.gemfile.lock +297 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres.gemfile +44 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres.gemfile.lock +297 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres_redis.gemfile +45 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres_redis.gemfile.lock +299 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres_sidekiq.gemfile +46 -0
- data/gemfiles/ruby_3.0.1_rails61_postgres_sidekiq.gemfile.lock +311 -0
- data/gemfiles/ruby_3.0.1_rails61_semantic_logger.gemfile +44 -0
- data/gemfiles/ruby_3.0.1_rails61_semantic_logger.gemfile.lock +296 -0
- data/gemfiles/ruby_3.0.1_resque2_redis3.gemfile +42 -0
- data/gemfiles/ruby_3.0.1_resque2_redis3.gemfile.lock +194 -0
- data/gemfiles/ruby_3.0.1_resque2_redis4.gemfile +42 -0
- data/gemfiles/ruby_3.0.1_resque2_redis4.gemfile.lock +194 -0
- data/integration/README.md +1 -2
- data/integration/apps/rack/Dockerfile +3 -0
- data/integration/apps/rack/README.md +2 -2
- data/integration/apps/rack/script/build-images +1 -1
- data/integration/apps/rack/script/ci +3 -2
- data/integration/apps/rails-five/README.md +2 -2
- data/integration/apps/rails-five/script/build-images +1 -1
- data/integration/apps/rails-five/script/ci +3 -2
- data/integration/apps/rspec/.dockerignore +1 -0
- data/integration/apps/rspec/.envrc.sample +1 -0
- data/integration/apps/rspec/.gitignore +2 -0
- data/integration/apps/rspec/.rspec +1 -0
- data/integration/apps/rspec/Dockerfile +25 -0
- data/integration/apps/rspec/Dockerfile-ci +11 -0
- data/integration/apps/rspec/Gemfile +14 -0
- data/integration/apps/rspec/README.md +70 -0
- data/integration/apps/rspec/agent.yaml +3 -0
- data/integration/apps/rspec/app/datadog.rb +13 -0
- data/integration/apps/rspec/app/fibonacci.rb +30 -0
- data/integration/apps/rspec/bin/run +20 -0
- data/integration/apps/rspec/bin/setup +23 -0
- data/integration/apps/rspec/bin/test +21 -0
- data/integration/apps/rspec/docker-compose.ci.yml +51 -0
- data/integration/apps/rspec/docker-compose.yml +64 -0
- data/integration/apps/rspec/script/build-images +37 -0
- data/integration/apps/rspec/script/ci +53 -0
- data/integration/apps/rspec/spec/fibonacci_spec.rb +16 -0
- data/integration/apps/rspec/spec/rspec_spec.rb +58 -0
- data/integration/apps/rspec/spec/spec_helper.rb +24 -0
- data/integration/apps/ruby/README.md +2 -2
- data/integration/apps/ruby/script/build-images +1 -1
- data/integration/apps/ruby/script/ci +3 -2
- data/integration/images/include/datadog/demo_env.rb +15 -14
- data/integration/images/include/http-health-check +1 -1
- data/integration/images/wrk/scripts/entrypoint.sh +1 -1
- data/integration/script/build-images +1 -1
- data/lib/datadog/ci.rb +16 -0
- data/lib/datadog/ci/configuration/components.rb +30 -0
- data/lib/datadog/ci/configuration/settings.rb +36 -0
- data/lib/datadog/ci/context_flush.rb +28 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +30 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +19 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +97 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +26 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +25 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +30 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +73 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +18 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +48 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +25 -0
- data/lib/datadog/ci/ext/app_types.rb +9 -0
- data/lib/datadog/ci/ext/environment.rb +438 -0
- data/lib/datadog/ci/ext/settings.rb +10 -0
- data/lib/datadog/ci/ext/test.rb +34 -0
- data/lib/datadog/ci/extensions.rb +17 -0
- data/lib/datadog/ci/test.rb +76 -0
- data/lib/datadog/core/environment/cgroup.rb +49 -0
- data/lib/datadog/core/environment/class_count.rb +19 -0
- data/lib/datadog/core/environment/container.rb +88 -0
- data/lib/datadog/core/environment/ext.rb +26 -0
- data/lib/datadog/core/environment/gc.rb +18 -0
- data/lib/datadog/core/environment/identity.rb +50 -0
- data/lib/datadog/core/environment/object_space.rb +22 -0
- data/lib/datadog/core/environment/socket.rb +16 -0
- data/lib/datadog/core/environment/thread_count.rb +18 -0
- data/lib/datadog/core/environment/variable_helpers.rb +39 -0
- data/lib/ddtrace.rb +3 -2
- data/lib/ddtrace/auto_instrument.rb +1 -0
- data/lib/ddtrace/buffer.rb +2 -2
- data/lib/ddtrace/configuration.rb +98 -25
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +230 -0
- data/lib/ddtrace/configuration/base.rb +7 -10
- data/lib/ddtrace/configuration/components.rb +150 -23
- data/lib/ddtrace/configuration/options.rb +4 -6
- data/lib/ddtrace/configuration/settings.rb +104 -7
- data/lib/ddtrace/context.rb +17 -14
- data/lib/ddtrace/context_flush.rb +14 -2
- data/lib/ddtrace/context_provider.rb +0 -2
- data/lib/ddtrace/contrib/action_cable/event.rb +4 -4
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +1 -1
- data/lib/ddtrace/contrib/action_pack/utils.rb +1 -1
- data/lib/ddtrace/contrib/action_view/event.rb +2 -2
- data/lib/ddtrace/contrib/action_view/patcher.rb +4 -4
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +2 -2
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +30 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +103 -26
- data/lib/ddtrace/contrib/active_record/event.rb +2 -2
- data/lib/ddtrace/contrib/active_record/utils.rb +2 -2
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +7 -7
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -5
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -2
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -1
- data/lib/ddtrace/contrib/auto_instrument.rb +1 -2
- data/lib/ddtrace/contrib/aws/instrumentation.rb +29 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +4 -0
- data/lib/ddtrace/contrib/aws/services.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -1
- data/lib/ddtrace/contrib/configurable.rb +64 -40
- data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -17
- data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/dalli/patcher.rb +1 -1
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +1 -1
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +1 -1
- data/lib/ddtrace/contrib/ethon/patcher.rb +2 -2
- data/lib/ddtrace/contrib/extensions.rb +29 -6
- data/lib/ddtrace/contrib/faraday/patcher.rb +2 -2
- data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
- data/lib/ddtrace/contrib/grpc/patcher.rb +1 -1
- data/lib/ddtrace/contrib/http/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/http/patcher.rb +1 -1
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +13 -17
- data/lib/ddtrace/contrib/httpclient/patcher.rb +6 -3
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +13 -18
- data/lib/ddtrace/contrib/httprb/patcher.rb +6 -3
- data/lib/ddtrace/contrib/integration.rb +3 -3
- data/lib/ddtrace/contrib/kafka/event.rb +2 -2
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +10 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +38 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +45 -0
- data/lib/ddtrace/contrib/{rspec → lograge}/patcher.rb +6 -4
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/mongodb/patcher.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/mysql2/patcher.rb +1 -1
- data/lib/ddtrace/contrib/patchable.rb +2 -2
- data/lib/ddtrace/contrib/patcher.rb +10 -7
- data/lib/ddtrace/contrib/presto/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/presto/patcher.rb +6 -3
- data/lib/ddtrace/contrib/qless/patcher.rb +3 -5
- data/lib/ddtrace/contrib/racecar/event.rb +2 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +1 -1
- data/lib/ddtrace/contrib/rails/framework.rb +25 -1
- data/lib/ddtrace/contrib/rails/log_injection.rb +0 -40
- data/lib/ddtrace/contrib/rails/patcher.rb +17 -11
- data/lib/ddtrace/contrib/rake/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/rake/patcher.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
- data/lib/ddtrace/contrib/registerable.rb +2 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +17 -1
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/patcher.rb +4 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +22 -1
- data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -1
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +18 -0
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +10 -0
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +42 -0
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +47 -0
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +25 -0
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +1 -1
- data/lib/ddtrace/contrib/sequel/patcher.rb +2 -2
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +7 -3
- data/lib/ddtrace/contrib/sinatra/patcher.rb +1 -1
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +4 -6
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +4 -0
- data/lib/ddtrace/correlation.rb +1 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +5 -5
- data/lib/ddtrace/error.rb +77 -8
- data/lib/ddtrace/ext/app_types.rb +0 -1
- data/lib/ddtrace/ext/environment.rb +7 -0
- data/lib/ddtrace/ext/git.rb +9 -1
- data/lib/ddtrace/ext/profiling.rb +53 -0
- data/lib/ddtrace/ext/runtime.rb +0 -7
- data/lib/ddtrace/ext/test.rb +2 -18
- data/lib/ddtrace/ext/transport.rb +2 -0
- data/lib/ddtrace/metrics.rb +68 -13
- data/lib/ddtrace/opentelemetry/extensions.rb +1 -1
- data/lib/ddtrace/opentracer.rb +20 -39
- data/lib/ddtrace/patcher.rb +25 -3
- data/lib/ddtrace/pin.rb +5 -9
- data/lib/ddtrace/profiling.rb +107 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +32 -0
- data/lib/ddtrace/profiling/buffer.rb +41 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +262 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +37 -0
- data/lib/ddtrace/profiling/event.rb +13 -0
- data/lib/ddtrace/profiling/events/stack.rb +102 -0
- data/lib/ddtrace/profiling/exporter.rb +23 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +67 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +155 -0
- data/lib/ddtrace/profiling/ext/forking.rb +97 -0
- data/lib/ddtrace/profiling/flush.rb +43 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +119 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +89 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +12 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +18 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +81 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +106 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +10 -0
- data/lib/ddtrace/profiling/pprof/template.rb +118 -0
- data/lib/ddtrace/profiling/preload.rb +3 -0
- data/lib/ddtrace/profiling/profiler.rb +30 -0
- data/lib/ddtrace/profiling/recorder.rb +95 -0
- data/lib/ddtrace/profiling/scheduler.rb +116 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +77 -0
- data/lib/ddtrace/profiling/transport/client.rb +12 -0
- data/lib/ddtrace/profiling/transport/http.rb +118 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +43 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +100 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +36 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +40 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +28 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +33 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +21 -0
- data/lib/ddtrace/profiling/transport/io.rb +30 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +27 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +16 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +17 -0
- data/lib/ddtrace/profiling/transport/request.rb +15 -0
- data/lib/ddtrace/profiling/transport/response.rb +8 -0
- data/lib/ddtrace/runtime/metrics.rb +20 -14
- data/lib/ddtrace/sampling/rule_sampler.rb +3 -9
- data/lib/ddtrace/span.rb +17 -6
- data/lib/ddtrace/sync_writer.rb +9 -5
- data/lib/ddtrace/tasks/exec.rb +48 -0
- data/lib/ddtrace/tasks/help.rb +14 -0
- data/lib/ddtrace/tracer.rb +46 -48
- data/lib/ddtrace/transport/http.rb +47 -35
- data/lib/ddtrace/transport/http/adapters/net.rb +18 -4
- data/lib/ddtrace/transport/http/builder.rb +5 -1
- data/lib/ddtrace/transport/http/env.rb +8 -0
- data/lib/ddtrace/transport/http/statistics.rb +2 -2
- data/lib/ddtrace/transport/http/traces.rb +3 -3
- data/lib/ddtrace/transport/io/client.rb +15 -8
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +7 -1
- data/lib/ddtrace/transport/parcel.rb +4 -0
- data/lib/ddtrace/transport/traces.rb +15 -1
- data/lib/ddtrace/utils/compression.rb +27 -0
- data/lib/ddtrace/utils/forking.rb +1 -1
- data/lib/ddtrace/utils/object_set.rb +39 -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 +8 -3
- 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 +14 -2
- data/lib/ddtrace/workers.rb +1 -1
- data/lib/ddtrace/workers/async.rb +5 -4
- data/lib/ddtrace/workers/loop.rb +28 -5
- data/lib/ddtrace/workers/polling.rb +11 -5
- data/lib/ddtrace/workers/queue.rb +2 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +14 -1
- data/lib/ddtrace/workers/trace_writer.rb +4 -6
- data/lib/ddtrace/writer.rb +10 -4
- data/tasks/update_appraisal_gemfiles.rake +36 -0
- metadata +576 -38
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/integration/images/ruby/2.0/Dockerfile +0 -54
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -28
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -17
- data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -98
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
- data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
- data/lib/ddtrace/contrib/cucumber/patcher.rb +0 -23
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -28
- data/lib/ddtrace/contrib/rspec/example.rb +0 -75
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -16
- data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/ext/ci.rb +0 -297
- data/lib/ddtrace/runtime/cgroup.rb +0 -44
- data/lib/ddtrace/runtime/class_count.rb +0 -17
- data/lib/ddtrace/runtime/container.rb +0 -73
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -40
- data/lib/ddtrace/runtime/object_space.rb +0 -19
- data/lib/ddtrace/runtime/socket.rb +0 -14
- data/lib/ddtrace/runtime/thread_count.rb +0 -16
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'datadog/core/environment/variable_helpers'
|
|
2
2
|
require 'ddtrace/configuration/options'
|
|
3
3
|
|
|
4
4
|
module Datadog
|
|
@@ -6,12 +6,12 @@ module Datadog
|
|
|
6
6
|
# Basic configuration behavior
|
|
7
7
|
module Base
|
|
8
8
|
def self.included(base)
|
|
9
|
-
base.
|
|
10
|
-
base.
|
|
11
|
-
base.
|
|
9
|
+
base.extend(Datadog::Core::Environment::VariableHelpers)
|
|
10
|
+
base.include(Datadog::Core::Environment::VariableHelpers)
|
|
11
|
+
base.include(Options)
|
|
12
12
|
|
|
13
|
-
base.
|
|
14
|
-
base.
|
|
13
|
+
base.extend(ClassMethods)
|
|
14
|
+
base.include(InstanceMethods)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# Class methods for configuration
|
|
@@ -53,10 +53,7 @@ module Datadog
|
|
|
53
53
|
ordering = self.class.options.dependency_order
|
|
54
54
|
sorted_opts = opts.sort_by do |name, _value|
|
|
55
55
|
ordering.index(name) || (ordering.length + 1)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Ruby 2.0 doesn't support Array#to_h
|
|
59
|
-
sorted_opts = Hash[*sorted_opts.flatten]
|
|
56
|
+
end.to_h
|
|
60
57
|
|
|
61
58
|
# Apply options in sort order
|
|
62
59
|
sorted_opts.each do |name, value|
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/configuration/agent_settings_resolver'
|
|
1
2
|
require 'ddtrace/diagnostics/health'
|
|
2
3
|
require 'ddtrace/logger'
|
|
4
|
+
require 'ddtrace/profiling'
|
|
3
5
|
require 'ddtrace/runtime/metrics'
|
|
4
6
|
require 'ddtrace/tracer'
|
|
7
|
+
require 'ddtrace/sync_writer'
|
|
5
8
|
require 'ddtrace/workers/runtime_metrics'
|
|
6
9
|
|
|
7
10
|
module Datadog
|
|
8
11
|
module Configuration
|
|
9
12
|
# Global components for the trace library.
|
|
13
|
+
# rubocop:disable Metrics/ClassLength
|
|
10
14
|
# rubocop:disable Layout/LineLength
|
|
11
15
|
class Components
|
|
12
16
|
class << self
|
|
@@ -15,7 +19,7 @@ module Datadog
|
|
|
15
19
|
options = { enabled: settings.enabled }
|
|
16
20
|
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
|
17
21
|
|
|
18
|
-
Datadog::Diagnostics::Health::Metrics.new(options)
|
|
22
|
+
Datadog::Diagnostics::Health::Metrics.new(**options)
|
|
19
23
|
end
|
|
20
24
|
|
|
21
25
|
def build_logger(settings)
|
|
@@ -30,7 +34,7 @@ module Datadog
|
|
|
30
34
|
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
|
31
35
|
options[:services] = [settings.service] unless settings.service.nil?
|
|
32
36
|
|
|
33
|
-
Datadog::Runtime::Metrics.new(options)
|
|
37
|
+
Datadog::Runtime::Metrics.new(**options)
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
def build_runtime_metrics_worker(settings)
|
|
@@ -43,7 +47,7 @@ module Datadog
|
|
|
43
47
|
Datadog::Workers::RuntimeMetrics.new(options)
|
|
44
48
|
end
|
|
45
49
|
|
|
46
|
-
def build_tracer(settings)
|
|
50
|
+
def build_tracer(settings, agent_settings)
|
|
47
51
|
# If a custom tracer has been provided, use it instead.
|
|
48
52
|
# Ignore all other options (they should already be configured.)
|
|
49
53
|
tracer = settings.tracer.instance
|
|
@@ -61,40 +65,137 @@ module Datadog
|
|
|
61
65
|
# tracer initialization for now. Just reconfigure using the
|
|
62
66
|
# existing mutable #configure function. Remove when these components
|
|
63
67
|
# are extracted.
|
|
64
|
-
tracer.configure(build_tracer_options(settings))
|
|
68
|
+
tracer.configure(agent_settings: agent_settings, **build_tracer_options(settings, agent_settings))
|
|
65
69
|
|
|
66
70
|
tracer
|
|
67
71
|
end
|
|
68
72
|
|
|
73
|
+
def build_profiler(settings, agent_settings)
|
|
74
|
+
return unless Datadog::Profiling.supported? && settings.profiling.enabled
|
|
75
|
+
|
|
76
|
+
unless defined?(Datadog::Profiling::Tasks::Setup)
|
|
77
|
+
# In #1545 a user reported a NameError due to this constant being uninitialized
|
|
78
|
+
# I've documented my suspicion on why that happened in
|
|
79
|
+
# https://github.com/DataDog/dd-trace-rb/issues/1545#issuecomment-856049025
|
|
80
|
+
#
|
|
81
|
+
# > Thanks for the info! It seems to feed into my theory: there's two moments in the code where we check if
|
|
82
|
+
# > profiler is "supported": 1) when loading ddtrace (inside preload) and 2) when starting the profile
|
|
83
|
+
# > after Datadog.configure gets run.
|
|
84
|
+
# > The problem is that the code assumes that both checks 1) and 2) will always reach the same conclusion:
|
|
85
|
+
# > either profiler is supported, or profiler is not supported.
|
|
86
|
+
# > In the problematic case, it looks like in your case check 1 decides that profiler is not
|
|
87
|
+
# > supported => doesn't load it, and then check 2 decides that it is => assumes it is loaded and tries to
|
|
88
|
+
# > start it.
|
|
89
|
+
#
|
|
90
|
+
# I was never able to validate if this was the issue or why exactly .supported? would change its mind BUT
|
|
91
|
+
# just in case it happens again, I've left this check which avoids breaking the user's application AND
|
|
92
|
+
# would instead direct them to report it to us instead, so that we can investigate what's wrong.
|
|
93
|
+
#
|
|
94
|
+
# TODO: As of June 2021, most checks in .supported? are related to the google-protobuf gem; so it's
|
|
95
|
+
# very likely that it was the origin of the issue we saw. Thus, if, as planned we end up moving away from
|
|
96
|
+
# protobuf OR enough time has passed and no users saw the issue again, we can remove this check altogether.
|
|
97
|
+
Datadog.logger.error(
|
|
98
|
+
'Profiling was marked as supported and enabled, but setup task was not loaded properly. ' \
|
|
99
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug'
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
return
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Load extensions needed to support some of the Profiling features
|
|
106
|
+
Datadog::Profiling::Tasks::Setup.new.run
|
|
107
|
+
|
|
108
|
+
# NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
|
|
109
|
+
|
|
110
|
+
recorder = build_profiler_recorder(settings)
|
|
111
|
+
collectors = build_profiler_collectors(settings, recorder)
|
|
112
|
+
exporters = build_profiler_exporters(settings, agent_settings)
|
|
113
|
+
scheduler = build_profiler_scheduler(settings, recorder, exporters)
|
|
114
|
+
|
|
115
|
+
Datadog::Profiler.new(collectors, scheduler)
|
|
116
|
+
end
|
|
117
|
+
|
|
69
118
|
private
|
|
70
119
|
|
|
71
120
|
def build_tracer_tags(settings)
|
|
72
121
|
settings.tags.dup.tap do |tags|
|
|
73
|
-
tags[
|
|
74
|
-
tags[
|
|
122
|
+
tags[Ext::Environment::TAG_ENV] = settings.env unless settings.env.nil?
|
|
123
|
+
tags[Ext::Environment::TAG_VERSION] = settings.version unless settings.version.nil?
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def build_tracer_options(settings, agent_settings)
|
|
128
|
+
tracer_options = {}.tap do |opts|
|
|
129
|
+
tset = settings.tracer
|
|
130
|
+
opts[:min_spans_before_partial_flush] = tset.partial_flush.min_spans_threshold unless tset.partial_flush.min_spans_threshold.nil?
|
|
131
|
+
opts[:partial_flush] = tset.partial_flush.enabled unless tset.partial_flush.enabled.nil?
|
|
132
|
+
opts[:priority_sampling] = tset.priority_sampling unless tset.priority_sampling.nil?
|
|
133
|
+
opts[:sampler] = tset.sampler unless tset.sampler.nil?
|
|
134
|
+
opts[:writer] = tset.writer unless tset.writer.nil?
|
|
135
|
+
opts[:writer_options] = tset.writer_options if tset.writer.nil?
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Apply test mode settings if test mode is activated
|
|
139
|
+
if settings.test_mode.enabled
|
|
140
|
+
build_tracer_test_mode_options(tracer_options, settings, agent_settings)
|
|
141
|
+
else
|
|
142
|
+
tracer_options
|
|
75
143
|
end
|
|
76
144
|
end
|
|
77
145
|
|
|
78
|
-
def
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
opts[:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
opts[:writer] =
|
|
90
|
-
opts[:writer_options] = settings.writer_options if settings.writer.nil?
|
|
146
|
+
def build_tracer_test_mode_options(tracer_options, settings, agent_settings)
|
|
147
|
+
tracer_options.tap do |opts|
|
|
148
|
+
# Do not sample any spans for tests; all must be preserved.
|
|
149
|
+
opts[:sampler] = Datadog::AllSampler.new
|
|
150
|
+
|
|
151
|
+
# If context flush behavior is provided, use it instead.
|
|
152
|
+
opts[:context_flush] = settings.test_mode.context_flush if settings.test_mode.context_flush
|
|
153
|
+
|
|
154
|
+
# Flush traces synchronously, to guarantee they are written.
|
|
155
|
+
writer_options = settings.test_mode.writer_options || {}
|
|
156
|
+
writer_options[:agent_settings] = agent_settings if agent_settings
|
|
157
|
+
opts[:writer] = Datadog::SyncWriter.new(writer_options)
|
|
91
158
|
end
|
|
92
159
|
end
|
|
160
|
+
|
|
161
|
+
def build_profiler_recorder(settings)
|
|
162
|
+
event_classes = [Datadog::Profiling::Events::StackSample]
|
|
163
|
+
|
|
164
|
+
Datadog::Profiling::Recorder.new(event_classes, settings.profiling.max_events)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def build_profiler_collectors(settings, recorder)
|
|
168
|
+
[
|
|
169
|
+
Datadog::Profiling::Collectors::Stack.new(
|
|
170
|
+
recorder,
|
|
171
|
+
max_frames: settings.profiling.max_frames
|
|
172
|
+
# TODO: Provide proc that identifies Datadog worker threads?
|
|
173
|
+
# ignore_thread: settings.profiling.ignore_profiler
|
|
174
|
+
)
|
|
175
|
+
]
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def build_profiler_exporters(settings, agent_settings)
|
|
179
|
+
transport =
|
|
180
|
+
settings.profiling.exporter.transport || Datadog::Profiling::Transport::HTTP.default(
|
|
181
|
+
agent_settings: agent_settings,
|
|
182
|
+
site: settings.site,
|
|
183
|
+
api_key: settings.api_key,
|
|
184
|
+
profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
[Datadog::Profiling::Exporter.new(transport)]
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def build_profiler_scheduler(settings, recorder, exporters)
|
|
191
|
+
Datadog::Profiling::Scheduler.new(recorder, exporters)
|
|
192
|
+
end
|
|
93
193
|
end
|
|
94
194
|
|
|
95
195
|
attr_reader \
|
|
96
196
|
:health_metrics,
|
|
97
197
|
:logger,
|
|
198
|
+
:profiler,
|
|
98
199
|
:runtime_metrics,
|
|
99
200
|
:tracer
|
|
100
201
|
|
|
@@ -102,8 +203,13 @@ module Datadog
|
|
|
102
203
|
# Logger
|
|
103
204
|
@logger = self.class.build_logger(settings)
|
|
104
205
|
|
|
206
|
+
agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
|
|
207
|
+
|
|
105
208
|
# Tracer
|
|
106
|
-
@tracer = self.class.build_tracer(settings)
|
|
209
|
+
@tracer = self.class.build_tracer(settings, agent_settings)
|
|
210
|
+
|
|
211
|
+
# Profiler
|
|
212
|
+
@profiler = self.class.build_profiler(settings, agent_settings)
|
|
107
213
|
|
|
108
214
|
# Runtime metrics
|
|
109
215
|
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
@@ -113,7 +219,20 @@ module Datadog
|
|
|
113
219
|
end
|
|
114
220
|
|
|
115
221
|
# Starts up components
|
|
116
|
-
def startup!(settings)
|
|
222
|
+
def startup!(settings)
|
|
223
|
+
if settings.profiling.enabled
|
|
224
|
+
if profiler
|
|
225
|
+
@logger.debug('Profiling started')
|
|
226
|
+
profiler.start
|
|
227
|
+
else
|
|
228
|
+
# Display a warning for users who expected profiling to be enabled
|
|
229
|
+
unsupported_reason = Datadog::Profiling.unsupported_reason
|
|
230
|
+
logger.warn("Profiling was requested but is not supported, profiling disabled: #{unsupported_reason}")
|
|
231
|
+
end
|
|
232
|
+
else
|
|
233
|
+
@logger.debug('Profiling is disabled')
|
|
234
|
+
end
|
|
235
|
+
end
|
|
117
236
|
|
|
118
237
|
# Shuts down all the components in use.
|
|
119
238
|
# If it has another instance to compare to, it will compare
|
|
@@ -123,12 +242,20 @@ module Datadog
|
|
|
123
242
|
# (e.g. a custom tracer instance passed in.)
|
|
124
243
|
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
|
125
244
|
|
|
245
|
+
# Shutdown old profiler
|
|
246
|
+
profiler.shutdown! unless profiler.nil?
|
|
247
|
+
|
|
126
248
|
# Shutdown workers
|
|
127
|
-
runtime_metrics.
|
|
128
|
-
runtime_metrics.stop(true)
|
|
249
|
+
runtime_metrics.stop(true, close_metrics: false)
|
|
129
250
|
|
|
130
251
|
# Shutdown the old metrics, unless they are still being used.
|
|
131
252
|
# (e.g. custom Statsd instances.)
|
|
253
|
+
#
|
|
254
|
+
# TODO: This violates the encapsulation created by Runtime::Metrics and
|
|
255
|
+
# Health::Metrics, by directly manipulating `statsd` and changing
|
|
256
|
+
# it's lifecycle management.
|
|
257
|
+
# If we need to directly have ownership of `statsd` lifecycle, we should
|
|
258
|
+
# have direct ownership of it.
|
|
132
259
|
old_statsd = [
|
|
133
260
|
runtime_metrics.metrics.statsd,
|
|
134
261
|
health_metrics.statsd
|
|
@@ -7,17 +7,15 @@ module Datadog
|
|
|
7
7
|
# Behavior for a configuration object that has options
|
|
8
8
|
module Options
|
|
9
9
|
def self.included(base)
|
|
10
|
-
base.
|
|
11
|
-
base.
|
|
10
|
+
base.extend(ClassMethods)
|
|
11
|
+
base.include(InstanceMethods)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Class behavior for a configuration object with options
|
|
15
15
|
module ClassMethods
|
|
16
16
|
def options
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
20
|
-
end
|
|
17
|
+
# Allows for class inheritance of option definitions
|
|
18
|
+
@options ||= superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
protected
|
|
@@ -3,8 +3,10 @@ require 'ddtrace/configuration/base'
|
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/ext/analytics'
|
|
5
5
|
require 'ddtrace/ext/distributed'
|
|
6
|
-
require 'ddtrace/ext/
|
|
6
|
+
require 'ddtrace/ext/environment'
|
|
7
|
+
require 'ddtrace/ext/profiling'
|
|
7
8
|
require 'ddtrace/ext/sampling'
|
|
9
|
+
require 'ddtrace/ext/test'
|
|
8
10
|
|
|
9
11
|
module Datadog
|
|
10
12
|
module Configuration
|
|
@@ -13,9 +15,32 @@ module Datadog
|
|
|
13
15
|
class Settings
|
|
14
16
|
include Base
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
def initialize(*_)
|
|
19
|
+
super
|
|
20
|
+
|
|
21
|
+
# WORKAROUND: The values for services, version, and env can get set either directly OR as a side effect of
|
|
22
|
+
# accessing tags (reading or writing). This is of course really confusing and error-prone, e.g. in an app
|
|
23
|
+
# WITHOUT this workaround where you define `DD_TAGS=env:envenvtag,service:envservicetag,version:envversiontag`
|
|
24
|
+
# and do:
|
|
25
|
+
#
|
|
26
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
27
|
+
# Datadog.configuration.tags
|
|
28
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
29
|
+
#
|
|
30
|
+
# the output will be:
|
|
31
|
+
#
|
|
32
|
+
# [empty]
|
|
33
|
+
# envservicetag envenvtag envversiontag
|
|
34
|
+
#
|
|
35
|
+
# That is -- the proper values for service/env/version are only set AFTER something accidentally or not triggers
|
|
36
|
+
# the resolution of the tags.
|
|
37
|
+
# This is really confusing, error prone, etc, so calling tags here is a really hacky but effective way to
|
|
38
|
+
# avoid this. I could not think of a better way of fixing this issue without massive refactoring of tags parsing
|
|
39
|
+
# (so that the individual service/env/version get correctly set even from their tags values, not as a side
|
|
40
|
+
# effect). Sorry :(
|
|
41
|
+
tags
|
|
42
|
+
end
|
|
43
|
+
|
|
19
44
|
settings :analytics do
|
|
20
45
|
option :enabled do |o|
|
|
21
46
|
o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
|
|
@@ -92,6 +117,7 @@ module Datadog
|
|
|
92
117
|
end
|
|
93
118
|
|
|
94
119
|
option :env do |o|
|
|
120
|
+
# NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
95
121
|
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
|
96
122
|
o.lazy
|
|
97
123
|
end
|
|
@@ -108,6 +134,49 @@ module Datadog
|
|
|
108
134
|
get_option(:logger).instance = logger
|
|
109
135
|
end
|
|
110
136
|
|
|
137
|
+
settings :profiling do
|
|
138
|
+
option :enabled do |o|
|
|
139
|
+
o.default { env_to_bool(Ext::Profiling::ENV_ENABLED, false) }
|
|
140
|
+
o.lazy
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
settings :exporter do
|
|
144
|
+
option :transport
|
|
145
|
+
option :transport_options do |o|
|
|
146
|
+
o.setter do
|
|
147
|
+
# NOTE: As of April 2021 there may be a few profiler private beta customers with this setting, but since I'm
|
|
148
|
+
# marking this as deprecated before public beta, we can remove this for 1.0 without concern.
|
|
149
|
+
Datadog.logger.warn(
|
|
150
|
+
'Configuring the profiler c.profiling.exporter.transport_options is no longer needed, as the profiler ' \
|
|
151
|
+
'will reuse your existing global or tracer configuration. ' \
|
|
152
|
+
'This setting is deprecated for removal in a future ddtrace version ' \
|
|
153
|
+
'(1.0 or profiling GA, whichever comes first).'
|
|
154
|
+
)
|
|
155
|
+
nil
|
|
156
|
+
end
|
|
157
|
+
o.default { nil }
|
|
158
|
+
o.lazy
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
option :max_events, default: 32768
|
|
163
|
+
|
|
164
|
+
# Controls the maximum number of frames for each thread sampled. Can be tuned to avoid omitted frames in the
|
|
165
|
+
# produced profiles. Increasing this may increase the overhead of profiling.
|
|
166
|
+
option :max_frames do |o|
|
|
167
|
+
o.default { env_to_int(Ext::Profiling::ENV_MAX_FRAMES, 400) }
|
|
168
|
+
o.lazy
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
settings :upload do
|
|
172
|
+
option :timeout_seconds do |o|
|
|
173
|
+
o.setter { |value| value.nil? ? 30.0 : value.to_f }
|
|
174
|
+
o.default { env_to_float(Ext::Profiling::ENV_UPLOAD_TIMEOUT, 30.0) }
|
|
175
|
+
o.lazy
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
111
180
|
option :report_hostname do |o|
|
|
112
181
|
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
113
182
|
o.lazy
|
|
@@ -156,8 +225,17 @@ module Datadog
|
|
|
156
225
|
end
|
|
157
226
|
|
|
158
227
|
option :service do |o|
|
|
159
|
-
|
|
228
|
+
# NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
229
|
+
o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, Ext::Environment::FALLBACK_SERVICE_NAME) }
|
|
160
230
|
o.lazy
|
|
231
|
+
|
|
232
|
+
# There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
|
|
233
|
+
# nil instead so that one can do
|
|
234
|
+
# nice_service_name = Datadog.configure.service_without_fallback || nice_service_name_default
|
|
235
|
+
o.helper(:service_without_fallback) do
|
|
236
|
+
service_name = service
|
|
237
|
+
service_name unless service_name.equal?(Ext::Environment::FALLBACK_SERVICE_NAME)
|
|
238
|
+
end
|
|
161
239
|
end
|
|
162
240
|
|
|
163
241
|
option :site do |o|
|
|
@@ -184,16 +262,17 @@ module Datadog
|
|
|
184
262
|
|
|
185
263
|
o.setter do |new_value, old_value|
|
|
186
264
|
# Coerce keys to strings
|
|
187
|
-
string_tags =
|
|
265
|
+
string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h
|
|
188
266
|
|
|
189
267
|
# Cross-populate tag values with other settings
|
|
268
|
+
|
|
190
269
|
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
191
270
|
|
|
192
271
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
193
272
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
194
273
|
end
|
|
195
274
|
|
|
196
|
-
if
|
|
275
|
+
if service_without_fallback.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
|
197
276
|
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
|
198
277
|
end
|
|
199
278
|
|
|
@@ -204,6 +283,23 @@ module Datadog
|
|
|
204
283
|
o.lazy
|
|
205
284
|
end
|
|
206
285
|
|
|
286
|
+
settings :test_mode do
|
|
287
|
+
option :enabled do |o|
|
|
288
|
+
o.default { env_to_bool(Ext::Test::ENV_MODE_ENABLED, false) }
|
|
289
|
+
o.lazy
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
option :context_flush do |o|
|
|
293
|
+
o.default { nil }
|
|
294
|
+
o.lazy
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
option :writer_options do |o|
|
|
298
|
+
o.default { {} }
|
|
299
|
+
o.lazy
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
207
303
|
option :time_now_provider do |o|
|
|
208
304
|
o.default { ::Time.now }
|
|
209
305
|
|
|
@@ -291,6 +387,7 @@ module Datadog
|
|
|
291
387
|
end
|
|
292
388
|
|
|
293
389
|
option :version do |o|
|
|
390
|
+
# NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
294
391
|
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
|
295
392
|
o.lazy
|
|
296
393
|
end
|