ddtrace 0.48.0 → 0.51.1
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 +250 -68
- data/.circleci/images/primary/Dockerfile-2.1.10 +1 -1
- data/.circleci/images/primary/Dockerfile-2.2.10 +1 -1
- data/.circleci/images/primary/Dockerfile-2.3.8 +4 -2
- data/.circleci/images/primary/{Dockerfile-2.6.4 → Dockerfile-2.4.10} +5 -3
- data/.circleci/images/primary/{Dockerfile-2.4.6 → Dockerfile-2.5.9} +3 -3
- data/.circleci/images/primary/{Dockerfile-2.5.6 → Dockerfile-2.6.7} +3 -3
- data/.circleci/images/primary/{Dockerfile-2.7.0 → Dockerfile-2.7.3} +3 -3
- data/.circleci/images/primary/{Dockerfile-3.0.0 → Dockerfile-3.0.1} +3 -3
- data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +3 -3
- data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +1 -1
- data/.circleci/images/primary/{Dockerfile-truffleruby-21.0.0 → Dockerfile-truffleruby-21.1.0} +2 -2
- data/.dd-ci/ci-app-spec.json +31 -0
- data/.dockerignore +0 -1
- data/.gitattributes +1 -0
- data/.github/workflows/test-head.yaml +34 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +13 -9
- data/.rubocop_todo.yml +7 -8
- data/Appraisals +206 -182
- data/CHANGELOG.md +154 -0
- data/Gemfile +6 -3
- data/Rakefile +331 -333
- 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/ddtrace.gemspec +2 -2
- data/docker-compose.yml +14 -68
- data/docs/GettingStarted.md +59 -13
- 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/apps/rack/README.md +2 -2
- data/integration/apps/rack/script/ci +2 -1
- data/integration/apps/rails-five/README.md +2 -2
- data/integration/apps/rails-five/script/ci +2 -1
- 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/ci +2 -1
- data/integration/images/include/datadog/demo_env.rb +15 -14
- 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 +2 -2
- data/lib/ddtrace/auto_instrument.rb +1 -0
- data/lib/ddtrace/buffer.rb +2 -2
- data/lib/ddtrace/configuration.rb +1 -23
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +230 -0
- data/lib/ddtrace/configuration/base.rb +7 -10
- data/lib/ddtrace/configuration/components.rb +88 -43
- data/lib/ddtrace/configuration/options.rb +2 -2
- data/lib/ddtrace/configuration/settings.rb +76 -10
- data/lib/ddtrace/context.rb +17 -14
- data/lib/ddtrace/context_flush.rb +14 -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/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/concurrent_ruby/patcher.rb +1 -1
- data/lib/ddtrace/contrib/configurable.rb +1 -1
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/dalli/patcher.rb +1 -1
- 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 +3 -3
- 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 +1 -1
- data/lib/ddtrace/contrib/httpclient/patcher.rb +1 -1
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/httprb/patcher.rb +1 -1
- 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 +2 -2
- data/lib/ddtrace/contrib/presto/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/presto/patcher.rb +1 -1
- 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 +11 -9
- data/lib/ddtrace/contrib/rake/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/rake/patcher.rb +1 -1
- data/lib/ddtrace/contrib/registerable.rb +2 -2
- data/lib/ddtrace/contrib/resque/patcher.rb +1 -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/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 +4 -4
- data/lib/ddtrace/error.rb +76 -9
- 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 +1 -0
- data/lib/ddtrace/ext/runtime.rb +0 -9
- data/lib/ddtrace/ext/test.rb +2 -18
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/metrics.rb +64 -13
- data/lib/ddtrace/opentelemetry/extensions.rb +1 -1
- data/lib/ddtrace/opentracer.rb +20 -39
- data/lib/ddtrace/patcher.rb +2 -2
- data/lib/ddtrace/profiling.rb +75 -22
- data/lib/ddtrace/profiling/collectors/stack.rb +17 -8
- data/lib/ddtrace/profiling/encoding/profile.rb +6 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +18 -5
- data/lib/ddtrace/profiling/ext/cthread.rb +56 -35
- data/lib/ddtrace/profiling/ext/forking.rb +7 -7
- data/lib/ddtrace/profiling/flush.rb +12 -10
- data/lib/ddtrace/profiling/pprof/builder.rb +26 -28
- data/lib/ddtrace/profiling/pprof/converter.rb +4 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +17 -1
- data/lib/ddtrace/profiling/pprof/template.rb +4 -0
- data/lib/ddtrace/profiling/profiler.rb +2 -0
- data/lib/ddtrace/profiling/recorder.rb +8 -0
- data/lib/ddtrace/profiling/scheduler.rb +44 -12
- data/lib/ddtrace/profiling/tasks/setup.rb +13 -13
- data/lib/ddtrace/profiling/transport/http.rb +58 -62
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +12 -2
- data/lib/ddtrace/runtime/metrics.rb +20 -14
- data/lib/ddtrace/span.rb +17 -6
- data/lib/ddtrace/sync_writer.rb +4 -3
- data/lib/ddtrace/tracer.rb +19 -44
- data/lib/ddtrace/transport/http.rb +43 -40
- data/lib/ddtrace/transport/http/statistics.rb +2 -2
- data/lib/ddtrace/transport/http/traces.rb +3 -3
- data/lib/ddtrace/transport/io/traces.rb +1 -1
- data/lib/ddtrace/utils/forking.rb +1 -1
- data/lib/ddtrace/utils/object_set.rb +3 -5
- data/lib/ddtrace/utils/time.rb +1 -3
- data/lib/ddtrace/version.rb +15 -5
- data/lib/ddtrace/workers.rb +1 -1
- data/lib/ddtrace/workers/async.rb +3 -2
- data/lib/ddtrace/workers/loop.rb +14 -2
- data/lib/ddtrace/workers/polling.rb +11 -5
- data/lib/ddtrace/workers/queue.rb +1 -1
- data/lib/ddtrace/workers/trace_writer.rb +3 -6
- data/lib/ddtrace/writer.rb +6 -3
- data/tasks/update_appraisal_gemfiles.rake +36 -0
- metadata +493 -33
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -83
- 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 -79
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -48
- 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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Core
|
|
3
|
+
# Namespace for handling application environment
|
|
4
|
+
module Environment
|
|
5
|
+
# Defines helper methods for environment
|
|
6
|
+
module VariableHelpers
|
|
7
|
+
def env_to_bool(var, default = nil)
|
|
8
|
+
var = decode_array(var)
|
|
9
|
+
var && ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def env_to_int(var, default = nil)
|
|
13
|
+
var = decode_array(var)
|
|
14
|
+
var && ENV.key?(var) ? ENV[var].to_i : default
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def env_to_float(var, default = nil)
|
|
18
|
+
var = decode_array(var)
|
|
19
|
+
var && ENV.key?(var) ? ENV[var].to_f : default
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def env_to_list(var, default = [])
|
|
23
|
+
var = decode_array(var)
|
|
24
|
+
if var && ENV.key?(var)
|
|
25
|
+
ENV[var].split(',').map(&:strip)
|
|
26
|
+
else
|
|
27
|
+
default
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def decode_array(var)
|
|
34
|
+
var.is_a?(Array) ? var.find { |env_var| ENV.key?(env_var) } : var
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/ddtrace.rb
CHANGED
|
@@ -48,7 +48,6 @@ require 'ddtrace/contrib/active_record/integration'
|
|
|
48
48
|
require 'ddtrace/contrib/active_support/integration'
|
|
49
49
|
require 'ddtrace/contrib/aws/integration'
|
|
50
50
|
require 'ddtrace/contrib/concurrent_ruby/integration'
|
|
51
|
-
require 'ddtrace/contrib/cucumber/integration'
|
|
52
51
|
require 'ddtrace/contrib/dalli/integration'
|
|
53
52
|
require 'ddtrace/contrib/delayed_job/integration'
|
|
54
53
|
require 'ddtrace/contrib/elasticsearch/integration'
|
|
@@ -63,6 +62,7 @@ require 'ddtrace/contrib/httpclient/integration'
|
|
|
63
62
|
require 'ddtrace/contrib/httprb/integration'
|
|
64
63
|
require 'ddtrace/contrib/integration'
|
|
65
64
|
require 'ddtrace/contrib/kafka/integration'
|
|
65
|
+
require 'ddtrace/contrib/lograge/integration'
|
|
66
66
|
require 'ddtrace/contrib/presto/integration'
|
|
67
67
|
require 'ddtrace/contrib/que/integration'
|
|
68
68
|
require 'ddtrace/contrib/mysql2/integration'
|
|
@@ -75,7 +75,7 @@ require 'ddtrace/contrib/rake/integration'
|
|
|
75
75
|
require 'ddtrace/contrib/redis/integration'
|
|
76
76
|
require 'ddtrace/contrib/resque/integration'
|
|
77
77
|
require 'ddtrace/contrib/rest_client/integration'
|
|
78
|
-
require 'ddtrace/contrib/
|
|
78
|
+
require 'ddtrace/contrib/semantic_logger/integration'
|
|
79
79
|
require 'ddtrace/contrib/sequel/integration'
|
|
80
80
|
require 'ddtrace/contrib/shoryuken/integration'
|
|
81
81
|
require 'ddtrace/contrib/sidekiq/integration'
|
data/lib/ddtrace/buffer.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/diagnostics/health'
|
|
2
|
-
require '
|
|
2
|
+
require 'datadog/core/environment/object_space'
|
|
3
3
|
|
|
4
4
|
# Trace buffer that accumulates traces for a consumer.
|
|
5
5
|
# Consumption can happen from a different thread.
|
|
@@ -318,7 +318,7 @@ module Datadog
|
|
|
318
318
|
#
|
|
319
319
|
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
|
320
320
|
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
|
321
|
-
TraceBuffer = if Datadog::Ext::
|
|
321
|
+
TraceBuffer = if Datadog::Core::Environment::Ext::RUBY_ENGINE == 'ruby'
|
|
322
322
|
CRubyTraceBuffer
|
|
323
323
|
else
|
|
324
324
|
ThreadSafeTraceBuffer
|
|
@@ -2,11 +2,10 @@ require 'forwardable'
|
|
|
2
2
|
require 'ddtrace/configuration/pin_setup'
|
|
3
3
|
require 'ddtrace/configuration/settings'
|
|
4
4
|
require 'ddtrace/configuration/components'
|
|
5
|
-
require 'ddtrace/utils/only_once'
|
|
6
5
|
|
|
7
6
|
module Datadog
|
|
8
7
|
# Configuration provides a unique access point for configurations
|
|
9
|
-
module Configuration
|
|
8
|
+
module Configuration
|
|
10
9
|
extend Forwardable
|
|
11
10
|
|
|
12
11
|
# Used to ensure that @components initialization/reconfiguration is performed one-at-a-time, by a single thread.
|
|
@@ -43,8 +42,6 @@ module Datadog
|
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
def configure(target = configuration, opts = {})
|
|
46
|
-
ruby_version_deprecation_warning
|
|
47
|
-
|
|
48
45
|
if target.is_a?(Settings)
|
|
49
46
|
yield(target) if block_given?
|
|
50
47
|
|
|
@@ -175,24 +172,5 @@ module Datadog
|
|
|
175
172
|
logger
|
|
176
173
|
end
|
|
177
174
|
end
|
|
178
|
-
|
|
179
|
-
# Perform version check only once
|
|
180
|
-
DEPRECATED_RUBY_VERSION = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.1')
|
|
181
|
-
private_constant :DEPRECATED_RUBY_VERSION
|
|
182
|
-
|
|
183
|
-
RUBY_VERSION_DEPRECATION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
184
|
-
private_constant :RUBY_VERSION_DEPRECATION_ONLY_ONCE
|
|
185
|
-
|
|
186
|
-
def ruby_version_deprecation_warning
|
|
187
|
-
return unless DEPRECATED_RUBY_VERSION
|
|
188
|
-
|
|
189
|
-
RUBY_VERSION_DEPRECATION_ONLY_ONCE.run do
|
|
190
|
-
Datadog.logger.warn(
|
|
191
|
-
"Support for Ruby versions < 2.1 in dd-trace-rb is DEPRECATED.\n" \
|
|
192
|
-
"Last version to support Ruby < 2.1 will be 0.49.x, which will only receive critical bugfixes.\n" \
|
|
193
|
-
'Support for Ruby versions < 2.1 will be REMOVED in version 0.50.0.'
|
|
194
|
-
)
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
175
|
end
|
|
198
176
|
end
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/ext/transport'
|
|
4
|
+
require 'ddtrace/configuration/settings'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Configuration
|
|
8
|
+
# This class unifies all the different ways that users can configure how we talk to the agent.
|
|
9
|
+
#
|
|
10
|
+
# It has quite a lot of complexity, but this complexity just reflects the actual complexity we have around our
|
|
11
|
+
# configuration today. E.g., this is just all of the complexity regarding agent settings gathered together in a
|
|
12
|
+
# single place. As we deprecate more and more of the different ways that these things can be configured,
|
|
13
|
+
# this class will reflect that simplification as well.
|
|
14
|
+
#
|
|
15
|
+
# Whenever there is a conflict (different configurations are provided in different orders), it MUST warn the users
|
|
16
|
+
# about it and pick a value based on the following priority: code > environment variable > defaults.
|
|
17
|
+
#
|
|
18
|
+
# rubocop:disable Metrics/ClassLength
|
|
19
|
+
class AgentSettingsResolver
|
|
20
|
+
AgentSettings = \
|
|
21
|
+
Struct.new(
|
|
22
|
+
:ssl,
|
|
23
|
+
:hostname,
|
|
24
|
+
:port,
|
|
25
|
+
:timeout_seconds,
|
|
26
|
+
:deprecated_for_removal_transport_configuration_proc,
|
|
27
|
+
:deprecated_for_removal_transport_configuration_options
|
|
28
|
+
) do
|
|
29
|
+
def initialize(
|
|
30
|
+
ssl:,
|
|
31
|
+
hostname:,
|
|
32
|
+
port:,
|
|
33
|
+
timeout_seconds:,
|
|
34
|
+
deprecated_for_removal_transport_configuration_proc:,
|
|
35
|
+
deprecated_for_removal_transport_configuration_options:
|
|
36
|
+
)
|
|
37
|
+
super(ssl, hostname, port, timeout_seconds, deprecated_for_removal_transport_configuration_proc, \
|
|
38
|
+
deprecated_for_removal_transport_configuration_options)
|
|
39
|
+
freeze
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.call(settings, logger: Datadog.logger)
|
|
44
|
+
new(settings, logger: logger).send(:call)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
attr_reader \
|
|
50
|
+
:logger,
|
|
51
|
+
:settings
|
|
52
|
+
|
|
53
|
+
def initialize(settings, logger: Datadog.logger)
|
|
54
|
+
@settings = settings
|
|
55
|
+
@logger = logger
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def call
|
|
59
|
+
AgentSettings.new(
|
|
60
|
+
ssl: ssl?,
|
|
61
|
+
hostname: hostname,
|
|
62
|
+
port: port,
|
|
63
|
+
timeout_seconds: timeout_seconds,
|
|
64
|
+
# NOTE: When provided, the deprecated_for_removal_transport_configuration_proc can override all
|
|
65
|
+
# values above (ssl, hostname, port, timeout), or even make them irrelevant (by using an unix socket or
|
|
66
|
+
# enabling test mode instead).
|
|
67
|
+
# That is the main reason why it is deprecated -- it's an opaque function that may set a bunch of settings
|
|
68
|
+
# that we know nothing of until we actually call it.
|
|
69
|
+
deprecated_for_removal_transport_configuration_proc: deprecated_for_removal_transport_configuration_proc,
|
|
70
|
+
deprecated_for_removal_transport_configuration_options: deprecated_for_removal_transport_configuration_options
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def hostname
|
|
75
|
+
pick_from(
|
|
76
|
+
configurations_in_priority_order: [
|
|
77
|
+
DetectedConfiguration.new(
|
|
78
|
+
friendly_name: "'c.tracer.hostname'",
|
|
79
|
+
value: settings.tracer.hostname
|
|
80
|
+
),
|
|
81
|
+
DetectedConfiguration.new(
|
|
82
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
|
|
83
|
+
value: parsed_url && parsed_url.hostname
|
|
84
|
+
),
|
|
85
|
+
DetectedConfiguration.new(
|
|
86
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST} environment variable",
|
|
87
|
+
value: ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST]
|
|
88
|
+
)
|
|
89
|
+
],
|
|
90
|
+
or_use_default: Datadog::Ext::Transport::HTTP::DEFAULT_HOST
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def port
|
|
95
|
+
port_from_env = ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT]
|
|
96
|
+
parsed_port_from_env =
|
|
97
|
+
if port_from_env
|
|
98
|
+
begin
|
|
99
|
+
Integer(port_from_env)
|
|
100
|
+
rescue ArgumentError
|
|
101
|
+
log_warning(
|
|
102
|
+
"Invalid value for #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable " \
|
|
103
|
+
"('#{port_from_env}'). Ignoring this configuration."
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
pick_from(
|
|
109
|
+
configurations_in_priority_order: [
|
|
110
|
+
DetectedConfiguration.new(
|
|
111
|
+
friendly_name: '"c.tracer.port"',
|
|
112
|
+
value: settings.tracer.port
|
|
113
|
+
),
|
|
114
|
+
DetectedConfiguration.new(
|
|
115
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
|
|
116
|
+
value: parsed_url && parsed_url.port
|
|
117
|
+
),
|
|
118
|
+
DetectedConfiguration.new(
|
|
119
|
+
friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable",
|
|
120
|
+
value: parsed_port_from_env
|
|
121
|
+
)
|
|
122
|
+
],
|
|
123
|
+
or_use_default: Datadog::Ext::Transport::HTTP::DEFAULT_PORT
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def ssl?
|
|
128
|
+
!parsed_url.nil? && parsed_url.scheme == 'https'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def timeout_seconds
|
|
132
|
+
Datadog::Ext::Transport::HTTP::DEFAULT_TIMEOUT_SECONDS
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def deprecated_for_removal_transport_configuration_proc
|
|
136
|
+
settings.tracer.transport_options if settings.tracer.transport_options.is_a?(Proc)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def deprecated_for_removal_transport_configuration_options
|
|
140
|
+
options = settings.tracer.transport_options
|
|
141
|
+
|
|
142
|
+
if options.is_a?(Hash) && !options.empty?
|
|
143
|
+
log_warning(
|
|
144
|
+
'Configuring the tracer via a c.tracer.transport_options hash is deprecated for removal in a future ' \
|
|
145
|
+
"ddtrace version (c.tracer.transport_options contained '#{options.inspect}')."
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
options
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def parsed_url
|
|
153
|
+
return @parsed_url if defined?(@parsed_url)
|
|
154
|
+
|
|
155
|
+
@parsed_url =
|
|
156
|
+
if unparsed_url_from_env
|
|
157
|
+
parsed = URI.parse(unparsed_url_from_env)
|
|
158
|
+
|
|
159
|
+
if %w[http https].include?(parsed.scheme)
|
|
160
|
+
parsed
|
|
161
|
+
else
|
|
162
|
+
log_warning(
|
|
163
|
+
"Invalid URI scheme '#{parsed.scheme}' for #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} " \
|
|
164
|
+
"environment variable ('#{unparsed_url_from_env}'). " \
|
|
165
|
+
"Ignoring the contents of #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL}."
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
nil
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# NOTE: This should only be used AFTER parsing, via `#parsed_url`. The only other use-case where this can be used
|
|
174
|
+
# directly without parsing, is when displaying in warning messages, to show users what it actually contains.
|
|
175
|
+
def unparsed_url_from_env
|
|
176
|
+
@unparsed_url_from_env ||= ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL]
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def pick_from(configurations_in_priority_order:, or_use_default:)
|
|
180
|
+
detected_configurations_in_priority_order = configurations_in_priority_order.select(&:value?)
|
|
181
|
+
|
|
182
|
+
if detected_configurations_in_priority_order.any?
|
|
183
|
+
warn_if_configuration_mismatch(detected_configurations_in_priority_order)
|
|
184
|
+
|
|
185
|
+
# The configurations are listed in priority, so we only need to look at the first; if there's more than
|
|
186
|
+
# one, we emit a warning above
|
|
187
|
+
detected_configurations_in_priority_order.first.value
|
|
188
|
+
else
|
|
189
|
+
or_use_default
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def warn_if_configuration_mismatch(detected_configurations_in_priority_order)
|
|
194
|
+
return unless detected_configurations_in_priority_order.map(&:value).uniq.size > 1
|
|
195
|
+
|
|
196
|
+
log_warning(
|
|
197
|
+
'Configuration mismatch: values differ between ' \
|
|
198
|
+
"#{detected_configurations_in_priority_order
|
|
199
|
+
.map { |config| "#{config.friendly_name} ('#{config.value}')" }.join(' and ')}" \
|
|
200
|
+
". Using '#{detected_configurations_in_priority_order.first.value}'."
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def log_warning(message)
|
|
205
|
+
logger.warn(message) if logger
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
DetectedConfiguration = Struct.new(:friendly_name, :value) do
|
|
209
|
+
def initialize(friendly_name:, value:)
|
|
210
|
+
super(friendly_name, value)
|
|
211
|
+
freeze
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def value?
|
|
215
|
+
!value.nil?
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
private_constant :DetectedConfiguration
|
|
219
|
+
|
|
220
|
+
# NOTE: Due to... legacy reasons... Some classes like having an `AgentSettings` instance to fall back to.
|
|
221
|
+
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
|
222
|
+
# represents only settings specified via environment variables + the usual defaults.
|
|
223
|
+
#
|
|
224
|
+
# YOU DO NOT WANT TO USE THE BELOW INSTANCE ON ANY NEWLY WRITTEN CODE, as it ignores any settings specified
|
|
225
|
+
# by users via `Datadog.configure`.
|
|
226
|
+
ENVIRONMENT_AGENT_SETTINGS = call(Settings.new, logger: nil)
|
|
227
|
+
end
|
|
228
|
+
# rubocop:enable Metrics/ClassLength
|
|
229
|
+
end
|
|
230
|
+
end
|
|
@@ -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,15 +1,17 @@
|
|
|
1
|
+
require 'ddtrace/configuration/agent_settings_resolver'
|
|
1
2
|
require 'ddtrace/diagnostics/health'
|
|
2
3
|
require 'ddtrace/logger'
|
|
3
4
|
require 'ddtrace/profiling'
|
|
4
5
|
require 'ddtrace/runtime/metrics'
|
|
5
6
|
require 'ddtrace/tracer'
|
|
7
|
+
require 'ddtrace/sync_writer'
|
|
6
8
|
require 'ddtrace/workers/runtime_metrics'
|
|
7
9
|
|
|
8
10
|
module Datadog
|
|
9
11
|
module Configuration
|
|
10
12
|
# Global components for the trace library.
|
|
11
|
-
# rubocop:disable Layout/LineLength
|
|
12
13
|
# rubocop:disable Metrics/ClassLength
|
|
14
|
+
# rubocop:disable Layout/LineLength
|
|
13
15
|
class Components
|
|
14
16
|
class << self
|
|
15
17
|
def build_health_metrics(settings)
|
|
@@ -17,7 +19,7 @@ module Datadog
|
|
|
17
19
|
options = { enabled: settings.enabled }
|
|
18
20
|
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
|
19
21
|
|
|
20
|
-
Datadog::Diagnostics::Health::Metrics.new(options)
|
|
22
|
+
Datadog::Diagnostics::Health::Metrics.new(**options)
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def build_logger(settings)
|
|
@@ -32,7 +34,7 @@ module Datadog
|
|
|
32
34
|
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
|
33
35
|
options[:services] = [settings.service] unless settings.service.nil?
|
|
34
36
|
|
|
35
|
-
Datadog::Runtime::Metrics.new(options)
|
|
37
|
+
Datadog::Runtime::Metrics.new(**options)
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def build_runtime_metrics_worker(settings)
|
|
@@ -45,7 +47,7 @@ module Datadog
|
|
|
45
47
|
Datadog::Workers::RuntimeMetrics.new(options)
|
|
46
48
|
end
|
|
47
49
|
|
|
48
|
-
def build_tracer(settings)
|
|
50
|
+
def build_tracer(settings, agent_settings)
|
|
49
51
|
# If a custom tracer has been provided, use it instead.
|
|
50
52
|
# Ignore all other options (they should already be configured.)
|
|
51
53
|
tracer = settings.tracer.instance
|
|
@@ -63,14 +65,43 @@ module Datadog
|
|
|
63
65
|
# tracer initialization for now. Just reconfigure using the
|
|
64
66
|
# existing mutable #configure function. Remove when these components
|
|
65
67
|
# are extracted.
|
|
66
|
-
tracer.configure(build_tracer_options(settings))
|
|
68
|
+
tracer.configure(agent_settings: agent_settings, **build_tracer_options(settings, agent_settings))
|
|
67
69
|
|
|
68
70
|
tracer
|
|
69
71
|
end
|
|
70
72
|
|
|
71
|
-
def build_profiler(settings)
|
|
73
|
+
def build_profiler(settings, agent_settings)
|
|
72
74
|
return unless Datadog::Profiling.supported? && settings.profiling.enabled
|
|
73
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
|
+
|
|
74
105
|
# Load extensions needed to support some of the Profiling features
|
|
75
106
|
Datadog::Profiling::Tasks::Setup.new.run
|
|
76
107
|
|
|
@@ -78,7 +109,7 @@ module Datadog
|
|
|
78
109
|
|
|
79
110
|
recorder = build_profiler_recorder(settings)
|
|
80
111
|
collectors = build_profiler_collectors(settings, recorder)
|
|
81
|
-
exporters = build_profiler_exporters(settings)
|
|
112
|
+
exporters = build_profiler_exporters(settings, agent_settings)
|
|
82
113
|
scheduler = build_profiler_scheduler(settings, recorder, exporters)
|
|
83
114
|
|
|
84
115
|
Datadog::Profiler.new(collectors, scheduler)
|
|
@@ -88,24 +119,42 @@ module Datadog
|
|
|
88
119
|
|
|
89
120
|
def build_tracer_tags(settings)
|
|
90
121
|
settings.tags.dup.tap do |tags|
|
|
91
|
-
tags[
|
|
92
|
-
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?
|
|
93
124
|
end
|
|
94
125
|
end
|
|
95
126
|
|
|
96
|
-
def build_tracer_options(settings)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
opts[:
|
|
101
|
-
opts[:
|
|
102
|
-
opts[:
|
|
103
|
-
opts[:
|
|
104
|
-
opts[:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
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)
|
|
109
158
|
end
|
|
110
159
|
end
|
|
111
160
|
|
|
@@ -126,22 +175,16 @@ module Datadog
|
|
|
126
175
|
]
|
|
127
176
|
end
|
|
128
177
|
|
|
129
|
-
def build_profiler_exporters(settings)
|
|
130
|
-
|
|
131
|
-
settings.profiling.exporter.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
transport_options[:timeout] ||= settings.profiling.upload.timeout
|
|
140
|
-
Datadog::Profiling::Transport::HTTP.default(transport_options)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
[Datadog::Profiling::Exporter.new(transport)]
|
|
144
|
-
end
|
|
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)]
|
|
145
188
|
end
|
|
146
189
|
|
|
147
190
|
def build_profiler_scheduler(settings, recorder, exporters)
|
|
@@ -160,11 +203,13 @@ module Datadog
|
|
|
160
203
|
# Logger
|
|
161
204
|
@logger = self.class.build_logger(settings)
|
|
162
205
|
|
|
206
|
+
agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
|
|
207
|
+
|
|
163
208
|
# Tracer
|
|
164
|
-
@tracer = self.class.build_tracer(settings)
|
|
209
|
+
@tracer = self.class.build_tracer(settings, agent_settings)
|
|
165
210
|
|
|
166
211
|
# Profiler
|
|
167
|
-
@profiler = self.class.build_profiler(settings)
|
|
212
|
+
@profiler = self.class.build_profiler(settings, agent_settings)
|
|
168
213
|
|
|
169
214
|
# Runtime metrics
|
|
170
215
|
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
@@ -180,9 +225,9 @@ module Datadog
|
|
|
180
225
|
@logger.debug('Profiling started')
|
|
181
226
|
profiler.start
|
|
182
227
|
else
|
|
183
|
-
# Display a warning for users who expected profiling to
|
|
184
|
-
|
|
185
|
-
logger.warn("Profiling was
|
|
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}")
|
|
186
231
|
end
|
|
187
232
|
else
|
|
188
233
|
@logger.debug('Profiling is disabled')
|