ddtrace 0.48.0 → 0.51.1
Sign up to get free protection for your applications and to get access to all the features.
- 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')
|