ddtrace 0.32.0 → 0.33.0

Sign up to get free protection for your applications and to get access to all the features.
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],