ddtrace 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/.env +2 -0
  3. data/Appraisals +9 -6
  4. data/CHANGELOG.md +32 -1
  5. data/Rakefile +3 -2
  6. data/ddtrace.gemspec +2 -1
  7. data/docker-compose.yml +9 -0
  8. data/docs/GettingStarted.md +69 -6
  9. data/lib/ddtrace.rb +1 -0
  10. data/lib/ddtrace/configuration/option.rb +3 -2
  11. data/lib/ddtrace/configuration/option_definition.rb +1 -1
  12. data/lib/ddtrace/configuration/options.rb +5 -0
  13. data/lib/ddtrace/contrib/action_cable/integration.rb +2 -2
  14. data/lib/ddtrace/contrib/action_pack/integration.rb +2 -2
  15. data/lib/ddtrace/contrib/action_view/integration.rb +2 -2
  16. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +3 -5
  17. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +4 -5
  18. data/lib/ddtrace/contrib/active_record/integration.rb +2 -2
  19. data/lib/ddtrace/contrib/active_support/integration.rb +2 -2
  20. data/lib/ddtrace/contrib/aws/integration.rb +6 -2
  21. data/lib/ddtrace/contrib/aws/patcher.rb +8 -2
  22. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +6 -2
  23. data/lib/ddtrace/contrib/configurable.rb +30 -13
  24. data/lib/ddtrace/contrib/configuration/resolver.rb +7 -3
  25. data/lib/ddtrace/contrib/dalli/integration.rb +2 -2
  26. data/lib/ddtrace/contrib/delayed_job/integration.rb +6 -2
  27. data/lib/ddtrace/contrib/elasticsearch/integration.rb +2 -2
  28. data/lib/ddtrace/contrib/ethon/integration.rb +6 -2
  29. data/lib/ddtrace/contrib/excon/integration.rb +6 -2
  30. data/lib/ddtrace/contrib/faraday/integration.rb +2 -2
  31. data/lib/ddtrace/contrib/grape/integration.rb +3 -3
  32. data/lib/ddtrace/contrib/graphql/integration.rb +3 -5
  33. data/lib/ddtrace/contrib/grpc/integration.rb +2 -2
  34. data/lib/ddtrace/contrib/http/integration.rb +4 -0
  35. data/lib/ddtrace/contrib/mongodb/integration.rb +2 -2
  36. data/lib/ddtrace/contrib/mysql2/integration.rb +6 -2
  37. data/lib/ddtrace/contrib/patchable.rb +21 -4
  38. data/lib/ddtrace/contrib/presto/configuration/settings.rb +23 -0
  39. data/lib/ddtrace/contrib/presto/ext.rb +25 -0
  40. data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
  41. data/lib/ddtrace/contrib/presto/integration.rb +36 -0
  42. data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
  43. data/lib/ddtrace/contrib/racecar/integration.rb +3 -3
  44. data/lib/ddtrace/contrib/rack/integration.rb +6 -2
  45. data/lib/ddtrace/contrib/rails/integration.rb +6 -3
  46. data/lib/ddtrace/contrib/rake/integration.rb +6 -2
  47. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
  48. data/lib/ddtrace/contrib/redis/integration.rb +7 -3
  49. data/lib/ddtrace/contrib/redis/patcher.rb +11 -2
  50. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
  51. data/lib/ddtrace/contrib/resque/integration.rb +8 -2
  52. data/lib/ddtrace/contrib/rest_client/integration.rb +6 -2
  53. data/lib/ddtrace/contrib/sequel/integration.rb +6 -2
  54. data/lib/ddtrace/contrib/shoryuken/integration.rb +9 -7
  55. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +5 -0
  56. data/lib/ddtrace/contrib/sidekiq/ext.rb +2 -0
  57. data/lib/ddtrace/contrib/sidekiq/integration.rb +2 -2
  58. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +7 -3
  59. data/lib/ddtrace/contrib/sidekiq/tracing.rb +19 -2
  60. data/lib/ddtrace/contrib/sinatra/integration.rb +2 -2
  61. data/lib/ddtrace/contrib/sucker_punch/integration.rb +3 -3
  62. data/lib/ddtrace/runtime/metrics.rb +2 -2
  63. data/lib/ddtrace/sampling/rule_sampler.rb +16 -2
  64. data/lib/ddtrace/version.rb +1 -1
  65. metadata +12 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: ef2a4e166761426cd1fa60d735bd1c84bba183251754a83686feada009e00e97
4
- data.tar.gz: c95a0b8677b653d13cde489eba691aff3867ef5fbebfad8323cc2a46fe75a102
2
+ SHA1:
3
+ metadata.gz: 378dbfa934d235e1fef7eec26aded395a1663f50
4
+ data.tar.gz: 66f5d0aa2f1f92a0ca34c5db63e1050abb6d064d
5
5
  SHA512:
6
- metadata.gz: 8c2aadf454ea6acec93c7f25a1ebac84ee8e2f63ea6c9620b6c4623a9ba5e9412faf76240e72a2eaf18b946159600128369e539eb775c1e00274ec96df0567bd
7
- data.tar.gz: 1094c5c97487b21d69aaf62858f5d9fb40d587678f92c0fa133d9f73b5db8f8d0d4675ca1ddb4b137a58805130617ccbd9de7e1621b8f0338c3136b1f47eaec9
6
+ metadata.gz: a9e34459216332d23f79bc78c6b2bec203f8e86a486853afb9844db587395c237a84bd4242feb41354d726130bd30701c6f6db60638b2f06ed60db7cad87b386
7
+ data.tar.gz: 10da81ee9b31d0125fb94ab6451e1e244183a352d042312264a0989496a4c87daeaefb9c5b802a96557075807f2168a6e23767d5e7c429f38fb4e040d5ebc48d
data/.env CHANGED
@@ -20,5 +20,7 @@ TEST_POSTGRES_HOST=127.0.0.1
20
20
  TEST_POSTGRES_PASSWORD=postgres
21
21
  TEST_POSTGRES_PORT=5432
22
22
  TEST_POSTGRES_USER=postgres
23
+ TEST_PRESTO_HOST=localhost
24
+ TEST_PRESTO_PORT=8080
23
25
  TEST_REDIS_HOST=127.0.0.1
24
26
  TEST_REDIS_PORT=6379
data/Appraisals CHANGED
@@ -345,7 +345,7 @@ elsif Gem::Version.new('2.2.0') <= Gem::Version.new(RUBY_VERSION) \
345
345
  gem 'mongo', '>= 2.8.0'
346
346
  gem 'mysql2', '< 0.5', platform: :ruby
347
347
  gem 'racecar', '>= 0.3.5'
348
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
348
+ gem 'rack', '< 2.1.0' # Locked due to grape incompatibility: https://github.com/ruby-grape/grape/issues/1980
349
349
  gem 'rack-test'
350
350
  gem 'rake', '>= 12.3'
351
351
  gem 'redis', '< 4.0'
@@ -502,8 +502,9 @@ elsif Gem::Version.new('2.3.0') <= Gem::Version.new(RUBY_VERSION) \
502
502
  gem 'hiredis'
503
503
  gem 'mongo', '>= 2.8.0'
504
504
  gem 'mysql2', '< 0.5', platform: :ruby
505
+ gem 'presto-client', '>= 0.5.14'
505
506
  gem 'racecar', '>= 0.3.5'
506
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
507
+ gem 'rack', '< 2.1.0' # Locked due to grape incompatibility: https://github.com/ruby-grape/grape/issues/1980
507
508
  gem 'rack-test'
508
509
  gem 'rake', '>= 12.3'
509
510
  gem 'redis', '< 4.0'
@@ -576,7 +577,7 @@ elsif Gem::Version.new('2.4.0') <= Gem::Version.new(RUBY_VERSION) \
576
577
  gem 'mongo', '>= 2.8.0'
577
578
  gem 'mysql2', '< 0.5', platform: :ruby
578
579
  gem 'racecar', '>= 0.3.5'
579
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
580
+ gem 'rack'
580
581
  gem 'rack-test'
581
582
  gem 'rake', '>= 12.3'
582
583
  gem 'redis', '< 4.0'
@@ -683,7 +684,7 @@ elsif Gem::Version.new('2.5.0') <= Gem::Version.new(RUBY_VERSION) \
683
684
  gem 'mongo', '>= 2.8.0'
684
685
  gem 'mysql2', '< 0.5', platform: :ruby
685
686
  gem 'racecar', '>= 0.3.5'
686
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
687
+ gem 'rack'
687
688
  gem 'rack-test'
688
689
  gem 'rake', '>= 12.3'
689
690
  gem 'redis', '< 4.0'
@@ -789,8 +790,9 @@ elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION) \
789
790
  gem 'hiredis'
790
791
  gem 'mongo', '>= 2.8.0'
791
792
  gem 'mysql2', '< 0.5', platform: :ruby
793
+ gem 'presto-client', '>= 0.5.14'
792
794
  gem 'racecar', '>= 0.3.5'
793
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
795
+ gem 'rack'
794
796
  gem 'rack-test'
795
797
  gem 'rake', '>= 12.3'
796
798
  gem 'redis', '< 4.0'
@@ -898,8 +900,9 @@ elsif Gem::Version.new('2.7.0') <= Gem::Version.new(RUBY_VERSION)
898
900
  gem 'hiredis'
899
901
  gem 'mongo', '>= 2.8.0'
900
902
  gem 'mysql2', '< 0.5', platform: :ruby
903
+ gem 'presto-client', '>= 0.5.14'
901
904
  gem 'racecar', '>= 0.3.5'
902
- gem 'rack', '< 2.1.0' # Remove when grape bug is fixed: https://github.com/ruby-grape/grape/issues/1966
905
+ gem 'rack'
903
906
  gem 'rack-test'
904
907
  gem 'rake', '>= 12.3'
905
908
  gem 'redis', '< 4.0'
@@ -2,6 +2,36 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.33.0] - 2020-03-05
6
+
7
+ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.33.0
8
+
9
+ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.32.0...v0.33.0
10
+
11
+ ### Added
12
+
13
+ - Instrumentation for [Presto](https://github.com/treasure-data/presto-client-ruby) (#775, #920, #961) (@ahammel, @ericmustin)
14
+ - Sidekiq job argument tagging (#933) (@mantrala)
15
+ - Support for multiple Redis services (#861, #937, #940) (@mberlanda)
16
+ - Support for Sidekiq w/ Delayed extensions (#798, #942) (@joeyAghion)
17
+ - Setter/reset behavior for configuration options (#957)
18
+ - Priority sampling rate tag (#891)
19
+
20
+ ### Changed
21
+
22
+ - Enforced minimum version requirements for instrumentation (#944)
23
+ - RubyGems minimum version requirement 2.0.0 (#954) (@Joas1988)
24
+ - Relaxed Rack minimum version to 1.1.0 (#952)
25
+
26
+ ### Fixed
27
+
28
+ - AWS instrumentation patching when AWS is partially loaded (#938, #945) (@letiesperon, @illdelph)
29
+ - NoMethodError for RuleSampler with priority sampling (#949, #950) (@BabyGroot)
30
+ - Runtime metrics accumulating service names when disabled (#956)
31
+ - Sidekiq instrumentation incompatibility with Rails 6.0.2 (#943, #947) (@pj0tr)
32
+ - Documentation tweaks (#948, #955) (@mstruve, @link04)
33
+ - Various test suite issues (#930, #932, #951, #960)
34
+
5
35
  ## [0.32.0] - 2020-01-22
6
36
 
7
37
  Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.32.0
@@ -1079,7 +1109,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
1079
1109
 
1080
1110
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
1081
1111
 
1082
- [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.32.0...master
1112
+ [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.33.0...master
1113
+ [0.33.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.32.0...v0.33.0
1083
1114
  [0.32.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.31.1...v0.32.0
1084
1115
  [0.31.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.31.0...v0.31.1
1085
1116
  [0.31.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.30.1...v0.31.0
data/Rakefile CHANGED
@@ -74,6 +74,7 @@ namespace :spec do
74
74
  :http,
75
75
  :mongodb,
76
76
  :mysql2,
77
+ :presto,
77
78
  :racecar,
78
79
  :rack,
79
80
  :rake,
@@ -523,7 +524,7 @@ task :ci do
523
524
  sh 'bundle exec appraisal rails5-mysql2 rake spec:action_cable'
524
525
  sh 'bundle exec appraisal rails5-mysql2 rake spec:rails'
525
526
  sh 'bundle exec appraisal rails5-postgres rake spec:rails'
526
- sh 'bundle exec appraisal rails6-mysql2 rake spec:action_cable'
527
+ # sh 'bundle exec appraisal rails6-mysql2 rake spec:action_cable' # TODO: Hangs CI jobs... fix and re-enable.
527
528
  sh 'bundle exec appraisal rails6-mysql2 rake spec:rails'
528
529
  sh 'bundle exec appraisal rails6-postgres rake spec:rails'
529
530
  end
@@ -588,7 +589,7 @@ task :ci do
588
589
  sh 'bundle exec appraisal rails5-mysql2 rake spec:action_cable'
589
590
  sh 'bundle exec appraisal rails5-mysql2 rake spec:rails'
590
591
  sh 'bundle exec appraisal rails5-postgres rake spec:rails'
591
- sh 'bundle exec appraisal rails6-mysql2 rake spec:action_cable'
592
+ # sh 'bundle exec appraisal rails6-mysql2 rake spec:action_cable' # TODO: Hangs CI jobs... fix and re-enable.
592
593
  sh 'bundle exec appraisal rails6-mysql2 rake spec:rails'
593
594
  sh 'bundle exec appraisal rails6-postgres rake spec:rails'
594
595
  end
@@ -8,6 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'ddtrace'
9
9
  spec.version = Datadog::VERSION::STRING
10
10
  spec.required_ruby_version = ">= #{Datadog::VERSION::MINIMUM_RUBY_VERSION}"
11
+ spec.required_rubygems_version = '>= 2.0.0'
11
12
  spec.authors = ['Datadog, Inc.']
12
13
  spec.email = ['dev@datadoghq.com']
13
14
 
@@ -59,5 +60,5 @@ Gem::Specification.new do |spec|
59
60
  spec.add_development_dependency 'redcarpet', '~> 3.4' if RUBY_PLATFORM != 'java'
60
61
  spec.add_development_dependency 'pry', '~> 0.10.4'
61
62
  spec.add_development_dependency 'pry-stack_explorer', '~> 0.4.9.2'
62
- spec.add_development_dependency 'warning' if RUBY_VERSION >= '2.5.0'
63
+ spec.add_development_dependency 'warning', '~> 1' if RUBY_VERSION >= '2.5.0'
63
64
  end
@@ -150,6 +150,7 @@ services:
150
150
  - mongodb
151
151
  - mysql
152
152
  - postgres
153
+ - presto
153
154
  - redis
154
155
  env_file: ./.env
155
156
  environment:
@@ -161,6 +162,8 @@ services:
161
162
  - TEST_MONGODB_HOST=mongodb
162
163
  - TEST_MYSQL_HOST=mysql
163
164
  - TEST_POSTGRES_HOST=postgres
165
+ - TEST_PRESTO_HOST=presto
166
+ - TEST_PRESTO_PORT=8080
164
167
  - TEST_REDIS_HOST=redis
165
168
  stdin_open: true
166
169
  tty: true
@@ -281,6 +284,12 @@ services:
281
284
  - "5432"
282
285
  ports:
283
286
  - "${TEST_POSTGRES_PORT}:5432"
287
+ presto:
288
+ image: prestosql/presto
289
+ expose:
290
+ - "8080"
291
+ ports:
292
+ - "${TEST_PRESTO_PORT}:8080"
284
293
  redis:
285
294
  image: redis:3.0
286
295
  expose:
@@ -36,7 +36,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
36
36
  - [Concurrent Ruby](#concurrent-ruby)
37
37
  - [Dalli](#dalli)
38
38
  - [DelayedJob](#delayedjob)
39
- - [Elastic Search](#elastic-search)
39
+ - [Elasticsearch](#elasticsearch)
40
40
  - [Ethon & Typhoeus](#ethon)
41
41
  - [Excon](#excon)
42
42
  - [Faraday](#faraday)
@@ -45,7 +45,8 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
45
45
  - [gRPC](#grpc)
46
46
  - [MongoDB](#mongodb)
47
47
  - [MySQL2](#mysql2)
48
- - [Net/HTTP](#nethttp)
48
+ - [Net/HTTP](#net-http)
49
+ - [Presto](#presto)
49
50
  - [Racecar](#racecar)
50
51
  - [Rack](#rack)
51
52
  - [Rails](#rails)
@@ -336,7 +337,7 @@ For a list of available integrations, and their configuration options, please re
336
337
  | Concurrent Ruby | `concurrent_ruby` | `>= 0.9` | *[Link](#concurrent-ruby)* | *[Link](https://github.com/ruby-concurrency/concurrent-ruby)* |
337
338
  | Dalli | `dalli` | `>= 2.7` | *[Link](#dalli)* | *[Link](https://github.com/petergoldstein/dalli)* |
338
339
  | DelayedJob | `delayed_job` | `>= 4.1` | *[Link](#delayedjob)* | *[Link](https://github.com/collectiveidea/delayed_job)* |
339
- | Elastic Search | `elasticsearch` | `>= 6.0` | *[Link](#elastic-search)* | *[Link](https://github.com/elastic/elasticsearch-ruby)* |
340
+ | Elasticsearch | `elasticsearch` | `>= 6.0` | *[Link](#elasticsearch)* | *[Link](https://github.com/elastic/elasticsearch-ruby)* |
340
341
  | Ethon | `ethon` | `>= 0.11.0` | *[Link](#ethon)* | *[Link](https://github.com/typhoeus/ethon)* |
341
342
  | Excon | `excon` | `>= 0.62` | *[Link](#excon)* | *[Link](https://github.com/excon/excon)* |
342
343
  | Faraday | `faraday` | `>= 0.14` | *[Link](#faraday)* | *[Link](https://github.com/lostisland/faraday)* |
@@ -346,8 +347,9 @@ For a list of available integrations, and their configuration options, please re
346
347
  | MongoDB | `mongo` | `>= 2.0` | *[Link](#mongodb)* | *[Link](https://github.com/mongodb/mongo-ruby-driver)* |
347
348
  | MySQL2 | `mysql2` | `>= 0.3.21` | *[Link](#mysql2)* | *[Link](https://github.com/brianmario/mysql2)* |
348
349
  | Net/HTTP | `http` | *(Any supported Ruby)* | *[Link](#nethttp)* | *[Link](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html)* |
350
+ | Presto | `presto` | `>= 0.5.14` | *[Link](#presto)* | *[Link](https://github.com/treasure-data/presto-client-ruby)* |
349
351
  | Racecar | `racecar` | `>= 0.3.5` | *[Link](#racecar)* | *[Link](https://github.com/zendesk/racecar)* |
350
- | Rack | `rack` | `>= 1.4.7` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
352
+ | Rack | `rack` | `>= 1.1.0` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
351
353
  | Rails | `rails` | `>= 3.2` | *[Link](#rails)* | *[Link](https://github.com/rails/rails)* |
352
354
  | Rake | `rake` | `>= 12.0` | *[Link](#rake)* | *[Link](https://github.com/ruby/rake)* |
353
355
  | Redis | `redis` | `>= 3.2` | *[Link](#redis)* | *[Link](https://github.com/redis/redis-rb)* |
@@ -637,7 +639,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
637
639
  | `service_name` | Service name used for `DelayedJob` instrumentation | `'delayed_job'` |
638
640
  | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
639
641
 
640
- ### Elastic Search
642
+ ### Elasticsearch
641
643
 
642
644
  The Elasticsearch integration will trace any call to `perform_request` in the `Client` object:
643
645
 
@@ -649,7 +651,7 @@ Datadog.configure do |c|
649
651
  c.use :elasticsearch, options
650
652
  end
651
653
 
652
- # Perform a query to ElasticSearch
654
+ # Perform a query to Elasticsearch
653
655
  client = Elasticsearch::Client.new url: 'http://127.0.0.1:9200'
654
656
  response = client.perform_request 'GET', '_cluster/health'
655
657
  ```
@@ -1015,6 +1017,39 @@ client = Net::HTTP.new(host, port)
1015
1017
  Datadog.configure(client, options)
1016
1018
  ```
1017
1019
 
1020
+ ### Presto
1021
+
1022
+ The Presto integration traces any SQL command sent through `presto-client` gem.
1023
+
1024
+ ```ruby
1025
+ require 'presto-client'
1026
+ require 'ddtrace'
1027
+
1028
+ Datadog.configure do |c|
1029
+ c.use :presto, options
1030
+ end
1031
+
1032
+ client = Presto::Client.new(
1033
+ server: "localhost:8880",
1034
+ ssl: {verify: false},
1035
+ catalog: "native",
1036
+ schema: "default",
1037
+ time_zone: "US/Pacific",
1038
+ language: "English",
1039
+ http_debug: true,
1040
+ )
1041
+
1042
+ client.run("select * from system.nodes")
1043
+ ```
1044
+
1045
+ Where `options` is an optional `Hash` that accepts the following parameters:
1046
+
1047
+ | Key | Description | Default |
1048
+ | --- | ----------- | ------- |
1049
+ | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1050
+ | `service_name` | Service name used for `presto` instrumentation | `'presto'` |
1051
+ | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1052
+
1018
1053
  ### Racecar
1019
1054
 
1020
1055
  The Racecar integration provides tracing for Racecar jobs.
@@ -1258,6 +1293,33 @@ customer_cache.get(...)
1258
1293
  invoice_cache.get(...)
1259
1294
  ```
1260
1295
 
1296
+ **Configuring trace settings per connection**
1297
+
1298
+ You can configure trace settings per connection by using the `describes` option:
1299
+
1300
+ ```ruby
1301
+ # Provide a `:describes` option with a connection key.
1302
+ # Any of the following keys are acceptable and equivalent to one another.
1303
+ # If a block is provided, it yields a Settings object that
1304
+ # accepts any of the configuration options listed above.
1305
+
1306
+ Datadog.configure do |c|
1307
+ # The default configuration for any redis client
1308
+ c.use :redis, service_name: 'redis-default'
1309
+
1310
+ # The configuration matching a given unix socket
1311
+ c.use :redis, describes: { url: 'unix://path/to/file' }, service_name: 'redis-unix'
1312
+
1313
+ # Connection string
1314
+ c.use :redis, describes: { url: 'redis://127.0.0.1:6379/0' }, service_name: 'redis-connection-string'
1315
+ # Client host, port, db, scheme
1316
+ c.use :redis, describes: { host: 'my-host.com', port: 6379, db: 1, scheme: 'redis' }, service_name: 'redis-connection-hash'
1317
+ # Only a subset of the connection hash
1318
+ c.use :redis, describes: { host: ENV['APP_CACHE_HOST'], port: ENV['APP_CACHE_PORT'] }, service_name: 'redis-cache'
1319
+ c.use :redis, describes: { host: ENV['SIDEKIQ_CACHE_HOST'] }, service_name: 'redis-sidekiq'
1320
+ end
1321
+ ```
1322
+
1261
1323
  ### Resque
1262
1324
 
1263
1325
  The Resque integration uses Resque hooks that wraps the `perform` method.
@@ -1401,6 +1463,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1401
1463
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1402
1464
  | `client_service_name` | Service name used for client-side `sidekiq` instrumentation | `'sidekiq-client'` |
1403
1465
  | `service_name` | Service name used for server-side `sidekiq` instrumentation | `'sidekiq'` |
1466
+ | `tag_args` | Enable tagging of job arguments. `true` for on, `false` for off. | `false` |
1404
1467
  | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1405
1468
 
1406
1469
  ### Sinatra
@@ -52,6 +52,7 @@ require 'ddtrace/contrib/graphql/integration'
52
52
  require 'ddtrace/contrib/grpc/integration'
53
53
  require 'ddtrace/contrib/http/integration'
54
54
  require 'ddtrace/contrib/integration'
55
+ require 'ddtrace/contrib/presto/integration'
55
56
  require 'ddtrace/contrib/mysql2/integration'
56
57
  require 'ddtrace/contrib/mongodb/integration'
57
58
  require 'ddtrace/contrib/racecar/integration'
@@ -13,9 +13,10 @@ module Datadog
13
13
  end
14
14
 
15
15
  def set(value)
16
- (@value = context_exec(value, &definition.setter)).tap do |v|
16
+ old_value = @value
17
+ (@value = context_exec(value, old_value, &definition.setter)).tap do |v|
17
18
  @is_set = true
18
- context_exec(v, &definition.on_set) if definition.on_set
19
+ context_exec(v, old_value, &definition.on_set) if definition.on_set
19
20
  end
20
21
  end
21
22
 
@@ -4,7 +4,7 @@ module Datadog
4
4
  module Configuration
5
5
  # Represents a definition for an integration configuration option
6
6
  class OptionDefinition
7
- IDENTITY = ->(x) { x }
7
+ IDENTITY = ->(new_value, _old_value) { new_value }
8
8
 
9
9
  attr_reader \
10
10
  :default,
@@ -70,6 +70,11 @@ module Datadog
70
70
  options[name].get
71
71
  end
72
72
 
73
+ def reset_option(name)
74
+ assert_valid_option!(name)
75
+ options[name].reset if options.key?(name)
76
+ end
77
+
73
78
  def option_defined?(name)
74
79
  self.class.options.key?(name)
75
80
  end
@@ -15,8 +15,8 @@ module Datadog
15
15
  Gem.loaded_specs['actioncable'] && Gem.loaded_specs['actioncable'].version
16
16
  end
17
17
 
18
- def self.present?
19
- super && defined?(::ActionCable)
18
+ def self.loaded?
19
+ defined?(::ActionCable)
20
20
  end
21
21
 
22
22
  def self.compatible?
@@ -15,8 +15,8 @@ module Datadog
15
15
  Gem.loaded_specs['actionpack'] && Gem.loaded_specs['actionpack'].version
16
16
  end
17
17
 
18
- def self.present?
19
- super && defined?(::ActionPack)
18
+ def self.loaded?
19
+ defined?(::ActionPack)
20
20
  end
21
21
 
22
22
  def self.compatible?
@@ -22,8 +22,8 @@ module Datadog
22
22
  end
23
23
  end
24
24
 
25
- def self.present?
26
- super && defined?(::ActionView)
25
+ def self.loaded?
26
+ defined?(::ActionView)
27
27
  end
28
28
 
29
29
  def self.compatible?
@@ -16,14 +16,12 @@ module Datadog
16
16
  && Gem.loaded_specs['active_model_serializers'].version
17
17
  end
18
18
 
19
- def self.present?
20
- super && defined?(::ActiveModel::Serializer)
19
+ def self.loaded?
20
+ defined?(::ActiveModel::Serializer) && defined?(::ActiveSupport::Notifications)
21
21
  end
22
22
 
23
23
  def self.compatible?
24
- super \
25
- && defined?(::ActiveSupport::Notifications) \
26
- && version >= Gem::Version.new('0.9.0')
24
+ super && version >= Gem::Version.new('0.9.0')
27
25
  end
28
26
 
29
27
  def default_configuration
@@ -11,6 +11,10 @@ module Datadog
11
11
  @configurations = configurations
12
12
  end
13
13
 
14
+ def resolve(key)
15
+ normalize(connection_resolver.resolve(key).symbolize_keys)
16
+ end
17
+
14
18
  def configurations
15
19
  @configurations || ::ActiveRecord::Base.configurations
16
20
  end
@@ -25,11 +29,6 @@ module Datadog
25
29
  end
26
30
  end
27
31
 
28
- def resolve(spec)
29
- return :default if spec == :default
30
- normalize(connection_resolver.resolve(spec).symbolize_keys)
31
- end
32
-
33
32
  def normalize(hash)
34
33
  {
35
34
  adapter: hash[:adapter],