ddtrace 0.27.0 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Appraisals +66 -4
- data/CHANGELOG.md +18 -4
- data/Rakefile +18 -0
- data/docs/GettingStarted.md +27 -27
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
- data/lib/ddtrace/contrib/action_view/{instrumentation.rb → instrumentation/template_renderer.rb} +35 -60
- data/lib/ddtrace/contrib/action_view/patcher.rb +10 -4
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +5 -1
- data/lib/ddtrace/contrib/redis/quantize.rb +12 -0
- data/lib/ddtrace/version.rb +1 -1
- metadata +56 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 474534ec09c4b140ea5dd736dba0a9844afdeb6d
|
4
|
+
data.tar.gz: e009826090a9bb34a78d37f97152b5cdf7592cce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0735d265773cb55f28c22b376c7bf521bc3e4aac279c7ebba660e149a32fe765f7111112d2a305aca5ea4daa42e77051575c3781bf7d5170424359d20ad2e07
|
7
|
+
data.tar.gz: d0781f4c1099085e1e73eb6f65605e12ee1abadb9df0b535868eea2e6a5b58a8831d6f67a25b1646f13bc32b8b14bacd69e70d0aea9398026c8bc96e741ccc4f
|
data/Appraisals
CHANGED
@@ -596,11 +596,42 @@ elsif Gem::Version.new('2.5.0') <= Gem::Version.new(RUBY_VERSION) \
|
|
596
596
|
gem 'activejob'
|
597
597
|
end
|
598
598
|
|
599
|
+
appraise 'rails6-mysql2' do
|
600
|
+
gem 'rails', '~> 6.0.0'
|
601
|
+
gem 'mysql2', '< 0.6', platform: :ruby
|
602
|
+
end
|
603
|
+
|
604
|
+
appraise 'rails6-postgres' do
|
605
|
+
gem 'rails', '~> 6.0.0'
|
606
|
+
gem 'pg', '< 1.0', platform: :ruby
|
607
|
+
end
|
608
|
+
|
609
|
+
appraise 'rails6-postgres-redis' do
|
610
|
+
gem 'rails', '~> 6.0.0'
|
611
|
+
gem 'pg', '< 1.0', platform: :ruby
|
612
|
+
gem 'redis-rails'
|
613
|
+
gem 'redis'
|
614
|
+
end
|
615
|
+
|
616
|
+
appraise 'rails6-postgres-redis-activesupport' do
|
617
|
+
gem 'rails', '~> 6.0.0'
|
618
|
+
gem 'pg', '< 1.0', platform: :ruby
|
619
|
+
gem 'redis-rails'
|
620
|
+
gem 'redis'
|
621
|
+
end
|
622
|
+
|
623
|
+
appraise 'rails6-postgres-sidekiq' do
|
624
|
+
gem 'rails', '~> 6.0.0'
|
625
|
+
gem 'pg', '< 1.0', platform: :ruby
|
626
|
+
gem 'sidekiq'
|
627
|
+
gem 'activejob'
|
628
|
+
end
|
629
|
+
|
599
630
|
appraise 'contrib' do
|
600
631
|
gem 'actionpack'
|
601
632
|
gem 'actionview'
|
602
633
|
gem 'active_model_serializers', '>= 0.10.0'
|
603
|
-
gem 'activerecord'
|
634
|
+
gem 'activerecord'
|
604
635
|
gem 'aws-sdk'
|
605
636
|
gem 'concurrent-ruby'
|
606
637
|
gem 'dalli'
|
@@ -626,7 +657,7 @@ elsif Gem::Version.new('2.5.0') <= Gem::Version.new(RUBY_VERSION) \
|
|
626
657
|
gem 'shoryuken'
|
627
658
|
gem 'sidekiq'
|
628
659
|
gem 'sinatra'
|
629
|
-
gem 'sqlite3', '~> 1.
|
660
|
+
gem 'sqlite3', '~> 1.4.1'
|
630
661
|
gem 'sucker_punch'
|
631
662
|
gem 'typhoeus'
|
632
663
|
end
|
@@ -664,11 +695,42 @@ elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION)
|
|
664
695
|
gem 'activejob'
|
665
696
|
end
|
666
697
|
|
698
|
+
appraise 'rails6-mysql2' do
|
699
|
+
gem 'rails', '~> 6.0.0'
|
700
|
+
gem 'mysql2', '< 0.6', platform: :ruby
|
701
|
+
end
|
702
|
+
|
703
|
+
appraise 'rails6-postgres' do
|
704
|
+
gem 'rails', '~> 6.0.0'
|
705
|
+
gem 'pg', '< 1.0', platform: :ruby
|
706
|
+
end
|
707
|
+
|
708
|
+
appraise 'rails6-postgres-redis' do
|
709
|
+
gem 'rails', '~> 6.0.0'
|
710
|
+
gem 'pg', '< 1.0', platform: :ruby
|
711
|
+
gem 'redis-rails'
|
712
|
+
gem 'redis'
|
713
|
+
end
|
714
|
+
|
715
|
+
appraise 'rails6-postgres-redis-activesupport' do
|
716
|
+
gem 'rails', '~> 6.0.0'
|
717
|
+
gem 'pg', '< 1.0', platform: :ruby
|
718
|
+
gem 'redis-rails'
|
719
|
+
gem 'redis'
|
720
|
+
end
|
721
|
+
|
722
|
+
appraise 'rails6-postgres-sidekiq' do
|
723
|
+
gem 'rails', '~> 6.0.0'
|
724
|
+
gem 'pg', '< 1.0', platform: :ruby
|
725
|
+
gem 'sidekiq'
|
726
|
+
gem 'activejob'
|
727
|
+
end
|
728
|
+
|
667
729
|
appraise 'contrib' do
|
668
730
|
gem 'actionpack'
|
669
731
|
gem 'actionview'
|
670
732
|
gem 'active_model_serializers', '>= 0.10.0'
|
671
|
-
gem 'activerecord'
|
733
|
+
gem 'activerecord'
|
672
734
|
gem 'aws-sdk'
|
673
735
|
gem 'concurrent-ruby'
|
674
736
|
gem 'dalli'
|
@@ -694,7 +756,7 @@ elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION)
|
|
694
756
|
gem 'shoryuken'
|
695
757
|
gem 'sidekiq'
|
696
758
|
gem 'sinatra'
|
697
|
-
gem 'sqlite3', '~> 1.
|
759
|
+
gem 'sqlite3', '~> 1.4.1'
|
698
760
|
gem 'sucker_punch'
|
699
761
|
gem 'typhoeus'
|
700
762
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [Unreleased
|
3
|
+
## [Unreleased]
|
4
4
|
|
5
|
-
## [
|
5
|
+
## [0.28.0] - 2019-10-01
|
6
|
+
|
7
|
+
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.28.0
|
8
|
+
|
9
|
+
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.27.0...v0.28.0
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Support for Rails 6.0 (#814)
|
14
|
+
- Multiplexing on hostname/port for Dalli (#823)
|
15
|
+
- Support for Redis array arguments (#796, #817) (@brafales)
|
16
|
+
|
17
|
+
### Refactored
|
18
|
+
|
19
|
+
- Encapsulate span resource name in Faraday integration (#811) (@giancarlocosta)
|
6
20
|
|
7
21
|
## [0.27.0] - 2019-09-04
|
8
22
|
|
@@ -929,8 +943,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
929
943
|
|
930
944
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
931
945
|
|
932
|
-
[Unreleased
|
933
|
-
[
|
946
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.28.0...master
|
947
|
+
[0.28.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.27.0...v0.28.0
|
934
948
|
[0.27.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.26.0...v0.27.0
|
935
949
|
[0.26.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.25.1...v0.26.0
|
936
950
|
[0.25.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.25.0...v0.25.1
|
data/Rakefile
CHANGED
@@ -552,9 +552,18 @@ task :ci do
|
|
552
552
|
sh 'bundle exec appraisal rails5-postgres-sidekiq rake test:railssidekiq'
|
553
553
|
sh 'bundle exec appraisal rails5-postgres-sidekiq rake test:railsactivejob'
|
554
554
|
sh 'bundle exec appraisal rails5-postgres rake test:railsdisableenv'
|
555
|
+
sh 'bundle exec appraisal rails6-mysql2 rake test:rails'
|
556
|
+
sh 'bundle exec appraisal rails6-postgres rake test:rails'
|
557
|
+
sh 'bundle exec appraisal rails6-postgres-redis rake test:railsredis'
|
558
|
+
sh 'bundle exec appraisal rails6-postgres-redis-activesupport rake test:railsredis'
|
559
|
+
sh 'bundle exec appraisal rails6-postgres-sidekiq rake test:railssidekiq'
|
560
|
+
sh 'bundle exec appraisal rails6-postgres-sidekiq rake test:railsactivejob'
|
561
|
+
sh 'bundle exec appraisal rails6-postgres rake test:railsdisableenv'
|
555
562
|
# Rails specs
|
556
563
|
sh 'bundle exec appraisal rails5-mysql2 rake spec:rails'
|
557
564
|
sh 'bundle exec appraisal rails5-postgres rake spec:rails'
|
565
|
+
sh 'bundle exec appraisal rails6-mysql2 rake spec:rails'
|
566
|
+
sh 'bundle exec appraisal rails6-postgres rake spec:rails'
|
558
567
|
end
|
559
568
|
elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION)
|
560
569
|
# Main library
|
@@ -607,9 +616,18 @@ task :ci do
|
|
607
616
|
sh 'bundle exec appraisal rails5-postgres-sidekiq rake test:railssidekiq'
|
608
617
|
sh 'bundle exec appraisal rails5-postgres-sidekiq rake test:railsactivejob'
|
609
618
|
sh 'bundle exec appraisal rails5-postgres rake test:railsdisableenv'
|
619
|
+
sh 'bundle exec appraisal rails6-mysql2 rake test:rails'
|
620
|
+
sh 'bundle exec appraisal rails6-postgres rake test:rails'
|
621
|
+
sh 'bundle exec appraisal rails6-postgres-redis rake test:railsredis'
|
622
|
+
sh 'bundle exec appraisal rails6-postgres-redis-activesupport rake test:railsredis'
|
623
|
+
sh 'bundle exec appraisal rails6-postgres-sidekiq rake test:railssidekiq'
|
624
|
+
sh 'bundle exec appraisal rails6-postgres-sidekiq rake test:railsactivejob'
|
625
|
+
sh 'bundle exec appraisal rails6-postgres rake test:railsdisableenv'
|
610
626
|
# Rails specs
|
611
627
|
sh 'bundle exec appraisal rails5-mysql2 rake spec:rails'
|
612
628
|
sh 'bundle exec appraisal rails5-postgres rake spec:rails'
|
629
|
+
sh 'bundle exec appraisal rails6-mysql2 rake spec:rails'
|
630
|
+
sh 'bundle exec appraisal rails6-postgres rake spec:rails'
|
613
631
|
end
|
614
632
|
end
|
615
633
|
end
|
data/docs/GettingStarted.md
CHANGED
@@ -78,18 +78,18 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
78
78
|
|
79
79
|
**Supported Ruby interpreters**:
|
80
80
|
|
81
|
-
| Type | Documentation | Version | Support type
|
82
|
-
| ----- | -------------------------- | ----- |
|
83
|
-
| MRI | https://www.ruby-lang.org/ |
|
84
|
-
| | |
|
85
|
-
| | | 2.
|
86
|
-
| | | 2.
|
87
|
-
| | | 2.2 | Full
|
88
|
-
| | | 2.
|
89
|
-
| | | 2.
|
90
|
-
| | |
|
91
|
-
| | |
|
92
|
-
| JRuby | http://jruby.org/ | 9.1.5 |
|
81
|
+
| Type | Documentation | Version | Support type | Gem version support |
|
82
|
+
| ----- | -------------------------- | ----- | ------------------------------------ | ------------------- |
|
83
|
+
| MRI | https://www.ruby-lang.org/ | 2.6 | Full | Latest |
|
84
|
+
| | | 2.5 | Full | Latest |
|
85
|
+
| | | 2.4 | Full | Latest |
|
86
|
+
| | | 2.3 | Full | Latest |
|
87
|
+
| | | 2.2 | Full | Latest |
|
88
|
+
| | | 2.1 | Full | Latest |
|
89
|
+
| | | 2.0 | Full | Latest |
|
90
|
+
| | | 1.9.3 | Maintenance (until August 6th, 2020) | < 0.27.0 |
|
91
|
+
| | | 1.9.1 | Maintenance (until August 6th, 2020) | < 0.27.0 |
|
92
|
+
| JRuby | http://jruby.org/ | 9.1.5 | Alpha | Latest |
|
93
93
|
|
94
94
|
**Supported web servers**:
|
95
95
|
|
@@ -101,15 +101,13 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
101
101
|
|
102
102
|
**Supported tracing frameworks**:
|
103
103
|
|
104
|
-
| Type | Documentation | Version |
|
105
|
-
| ----------- | ----------------------------------------------- | --------------------- |
|
106
|
-
| OpenTracing | https://github.com/opentracing/opentracing-ruby | 0.4.1+ (w/ Ruby 2.1+) |
|
104
|
+
| Type | Documentation | Version | Gem version support |
|
105
|
+
| ----------- | ----------------------------------------------- | --------------------- | ------------------- |
|
106
|
+
| OpenTracing | https://github.com/opentracing/opentracing-ruby | 0.4.1+ (w/ Ruby 2.1+) | >= 0.16.0 |
|
107
107
|
|
108
108
|
*Full* support indicates all tracer features are available.
|
109
109
|
|
110
|
-
*
|
111
|
-
|
112
|
-
*Deprecated* indicates support will be removed in a future release.
|
110
|
+
*Deprecated* indicates support will transition to *Maintenance* in a future release.
|
113
111
|
|
114
112
|
*Maintenance* indicates only critical bugfixes are backported until EOL.
|
115
113
|
|
@@ -326,11 +324,11 @@ For a list of available integrations, and their configuration options, please re
|
|
326
324
|
|
327
325
|
| Name | Key | Versions Supported | How to configure | Gem source |
|
328
326
|
| ------------------------ | -------------------------- | ------------------------ | ----------------------------------- | ------------------------------------------------------------------------------ |
|
329
|
-
| Action View | `action_view` | `>= 3.2
|
327
|
+
| Action View | `action_view` | `>= 3.2` | *[Link](#action-view)* | *[Link](https://github.com/rails/rails/tree/master/actionview)* |
|
330
328
|
| Active Model Serializers | `active_model_serializers` | `>= 0.9` | *[Link](#active-model-serializers)* | *[Link](https://github.com/rails-api/active_model_serializers)* |
|
331
|
-
| Action Pack | `action_pack` | `>= 3.2
|
332
|
-
| Active Record | `active_record` | `>= 3.2
|
333
|
-
| Active Support | `active_support` | `>= 3.2
|
329
|
+
| Action Pack | `action_pack` | `>= 3.2` | *[Link](#action-pack)* | *[Link](https://github.com/rails/rails/tree/master/actionpack)* |
|
330
|
+
| Active Record | `active_record` | `>= 3.2` | *[Link](#active-record)* | *[Link](https://github.com/rails/rails/tree/master/activerecord)* |
|
331
|
+
| Active Support | `active_support` | `>= 3.2` | *[Link](#active-support)* | *[Link](https://github.com/rails/rails/tree/master/activesupport)* |
|
334
332
|
| AWS | `aws` | `>= 2.0` | *[Link](#aws)* | *[Link](https://github.com/aws/aws-sdk-ruby)* |
|
335
333
|
| Concurrent Ruby | `concurrent_ruby` | `>= 0.9` | *[Link](#concurrent-ruby)* | *[Link](https://github.com/ruby-concurrency/concurrent-ruby)* |
|
336
334
|
| Dalli | `dalli` | `>= 2.7` | *[Link](#dalli)* | *[Link](https://github.com/petergoldstein/dalli)* |
|
@@ -347,7 +345,7 @@ For a list of available integrations, and their configuration options, please re
|
|
347
345
|
| Net/HTTP | `http` | *(Any supported Ruby)* | *[Link](#nethttp)* | *[Link](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html)* |
|
348
346
|
| Racecar | `racecar` | `>= 0.3.5` | *[Link](#racecar)* | *[Link](https://github.com/zendesk/racecar)* |
|
349
347
|
| Rack | `rack` | `>= 1.4.7` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
|
350
|
-
| Rails | `rails` | `>= 3.2
|
348
|
+
| Rails | `rails` | `>= 3.2` | *[Link](#rails)* | *[Link](https://github.com/rails/rails)* |
|
351
349
|
| Rake | `rake` | `>= 12.0` | *[Link](#rake)* | *[Link](https://github.com/ruby/rake)* |
|
352
350
|
| Redis | `redis` | `>= 3.2, < 4.0` | *[Link](#redis)* | *[Link](https://github.com/redis/redis-rb)* |
|
353
351
|
| Resque | `resque` | `>= 1.0, < 2.0` | *[Link](#resque)* | *[Link](https://github.com/resque/resque)* |
|
@@ -1105,8 +1103,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1105
1103
|
| 2.0 | 3.0 - 3.2 |
|
1106
1104
|
| 2.1 | 3.0 - 4.2 |
|
1107
1105
|
| 2.2 - 2.3 | 3.0 - 5.2 |
|
1108
|
-
| 2.4
|
1109
|
-
| 2.
|
1106
|
+
| 2.4 | 4.2.8 - 5.2 |
|
1107
|
+
| 2.5 | 4.2.8 - 6.0 |
|
1108
|
+
| 2.6 | 5.0 - 6.0 |
|
1110
1109
|
|
1111
1110
|
### Rake
|
1112
1111
|
|
@@ -1778,8 +1777,9 @@ config.lograge.custom_options = lambda do |event|
|
|
1778
1777
|
{
|
1779
1778
|
# Adds IDs as tags to log output
|
1780
1779
|
:dd => {
|
1781
|
-
|
1782
|
-
:
|
1780
|
+
# To preserve precision during JSON serialization, use strings for large numbers
|
1781
|
+
:trace_id => correlation.trace_id.to_s,
|
1782
|
+
:span_id => correlation.span_id.to_s
|
1783
1783
|
},
|
1784
1784
|
:ddsource => ["ruby"],
|
1785
1785
|
:params => event.payload[:params].reject { |k| %w(controller action).include? k }
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'ddtrace/contrib/action_view/ext'
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Contrib
|
5
|
+
module ActionView
|
6
|
+
module Instrumentation
|
7
|
+
# Instrumentation for partial rendering
|
8
|
+
module PartialRenderer
|
9
|
+
def render(*args, &block)
|
10
|
+
datadog_tracer.trace(
|
11
|
+
Ext::SPAN_RENDER_PARTIAL,
|
12
|
+
span_type: Datadog::Ext::HTTP::TEMPLATE
|
13
|
+
) do |span|
|
14
|
+
with_datadog_span(span) { super(*args) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_partial(*args)
|
19
|
+
begin
|
20
|
+
template = datadog_template(*args)
|
21
|
+
|
22
|
+
datadog_render_partial(template)
|
23
|
+
rescue StandardError => e
|
24
|
+
Datadog::Tracer.log.debug(e.message)
|
25
|
+
end
|
26
|
+
|
27
|
+
# execute the original function anyway
|
28
|
+
super(*args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def datadog_render_partial(template)
|
32
|
+
template_name = Utils.normalize_template_name(template.try('identifier'))
|
33
|
+
|
34
|
+
if template_name
|
35
|
+
active_datadog_span.set_tag(
|
36
|
+
Ext::TAG_TEMPLATE_NAME,
|
37
|
+
template_name
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
attr_accessor :active_datadog_span
|
45
|
+
|
46
|
+
def datadog_tracer
|
47
|
+
Datadog.configuration[:action_view][:tracer]
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_datadog_span(span)
|
51
|
+
self.active_datadog_span = span
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
self.active_datadog_span = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
# Rails < 6 partial rendering
|
58
|
+
module RailsLessThan6
|
59
|
+
include PartialRenderer
|
60
|
+
|
61
|
+
def datadog_template(*args)
|
62
|
+
@template
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Rails >= 6 partial rendering
|
67
|
+
module Rails6Plus
|
68
|
+
include PartialRenderer
|
69
|
+
|
70
|
+
def datadog_template(*args)
|
71
|
+
args[1]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/ddtrace/contrib/action_view/{instrumentation.rb → instrumentation/template_renderer.rb}
RENAMED
@@ -3,7 +3,6 @@ require 'ddtrace/contrib/action_view/ext'
|
|
3
3
|
module Datadog
|
4
4
|
module Contrib
|
5
5
|
module ActionView
|
6
|
-
# Defines instrumentation for ActionView
|
7
6
|
module Instrumentation
|
8
7
|
# Instrumentation for template rendering
|
9
8
|
module TemplateRenderer
|
@@ -83,7 +82,7 @@ module Datadog
|
|
83
82
|
end
|
84
83
|
end
|
85
84
|
|
86
|
-
# Rails >= 3.1 template rendering
|
85
|
+
# Shared code for Rails >= 3.1 template rendering
|
87
86
|
module Rails31Plus
|
88
87
|
def render(*args, &block)
|
89
88
|
datadog_tracer.trace(
|
@@ -96,28 +95,9 @@ module Datadog
|
|
96
95
|
|
97
96
|
def render_template(*args)
|
98
97
|
begin
|
99
|
-
|
100
|
-
template = args[0]
|
101
|
-
layout_name = args[1]
|
102
|
-
|
103
|
-
# update the tracing context with computed values before the rendering
|
104
|
-
template_name = template.try('identifier')
|
105
|
-
template_name = Utils.normalize_template_name(template_name)
|
106
|
-
layout = layout_name.try(:[], 'virtual_path')
|
107
|
-
|
108
|
-
if template_name
|
109
|
-
active_datadog_span.set_tag(
|
110
|
-
Ext::TAG_TEMPLATE_NAME,
|
111
|
-
template_name
|
112
|
-
)
|
113
|
-
end
|
98
|
+
template, layout_name = datadog_parse_args(*args)
|
114
99
|
|
115
|
-
|
116
|
-
active_datadog_span.set_tag(
|
117
|
-
Ext::TAG_LAYOUT,
|
118
|
-
layout
|
119
|
-
)
|
120
|
-
end
|
100
|
+
datadog_render_template(template, layout_name)
|
121
101
|
rescue StandardError => e
|
122
102
|
Datadog::Tracer.log.debug(e.message)
|
123
103
|
end
|
@@ -126,6 +106,27 @@ module Datadog
|
|
126
106
|
super(*args)
|
127
107
|
end
|
128
108
|
|
109
|
+
def datadog_render_template(template, layout_name)
|
110
|
+
# update the tracing context with computed values before the rendering
|
111
|
+
template_name = template.try('identifier')
|
112
|
+
template_name = Utils.normalize_template_name(template_name)
|
113
|
+
layout = layout_name.try(:[], 'virtual_path') # Proc can be called without parameters since Rails 6
|
114
|
+
|
115
|
+
if template_name
|
116
|
+
active_datadog_span.set_tag(
|
117
|
+
Ext::TAG_TEMPLATE_NAME,
|
118
|
+
template_name
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
if layout
|
123
|
+
active_datadog_span.set_tag(
|
124
|
+
Ext::TAG_LAYOUT,
|
125
|
+
layout
|
126
|
+
)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
129
130
|
private
|
130
131
|
|
131
132
|
attr_accessor :active_datadog_span
|
@@ -141,49 +142,23 @@ module Datadog
|
|
141
142
|
self.active_datadog_span = nil
|
142
143
|
end
|
143
144
|
end
|
144
|
-
end
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
datadog_tracer.trace(
|
150
|
-
Ext::SPAN_RENDER_PARTIAL,
|
151
|
-
span_type: Datadog::Ext::HTTP::TEMPLATE
|
152
|
-
) do |span|
|
153
|
-
with_datadog_span(span) { super(*args) }
|
154
|
-
end
|
155
|
-
end
|
146
|
+
# Rails >= 3.1 && < 6 template rendering
|
147
|
+
module Rails31To5
|
148
|
+
include Rails31Plus
|
156
149
|
|
157
|
-
|
158
|
-
|
159
|
-
template_name = Utils.normalize_template_name(@template.try('identifier'))
|
160
|
-
if template_name
|
161
|
-
active_datadog_span.set_tag(
|
162
|
-
Ext::TAG_TEMPLATE_NAME,
|
163
|
-
template_name
|
164
|
-
)
|
165
|
-
end
|
166
|
-
rescue StandardError => e
|
167
|
-
Datadog::Tracer.log.debug(e.message)
|
150
|
+
def datadog_parse_args(template, layout_name, *args)
|
151
|
+
[template, layout_name]
|
168
152
|
end
|
169
|
-
|
170
|
-
# execute the original function anyway
|
171
|
-
super(*args)
|
172
153
|
end
|
173
154
|
|
174
|
-
|
175
|
-
|
176
|
-
|
155
|
+
# Rails >= 6 template rendering
|
156
|
+
module Rails6Plus
|
157
|
+
include Rails31Plus
|
177
158
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
def with_datadog_span(span)
|
183
|
-
self.active_datadog_span = span
|
184
|
-
yield
|
185
|
-
ensure
|
186
|
-
self.active_datadog_span = nil
|
159
|
+
def datadog_parse_args(view, template, layout_name, *args)
|
160
|
+
[template, layout_name]
|
161
|
+
end
|
187
162
|
end
|
188
163
|
end
|
189
164
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'ddtrace/ext/http'
|
2
2
|
require 'ddtrace/contrib/patcher'
|
3
3
|
require 'ddtrace/contrib/action_view/ext'
|
4
|
-
require 'ddtrace/contrib/action_view/instrumentation'
|
4
|
+
require 'ddtrace/contrib/action_view/instrumentation/partial_renderer'
|
5
|
+
require 'ddtrace/contrib/action_view/instrumentation/template_renderer'
|
5
6
|
require 'ddtrace/contrib/action_view/utils'
|
6
7
|
|
7
8
|
module Datadog
|
@@ -30,12 +31,17 @@ module Datadog
|
|
30
31
|
def patch_renderer
|
31
32
|
do_once(:patch_renderer) do
|
32
33
|
if defined?(::ActionView::TemplateRenderer) && defined?(::ActionView::PartialRenderer)
|
33
|
-
::
|
34
|
-
|
34
|
+
if Integration.version < Gem::Version.new('6.0.0')
|
35
|
+
::ActionView::TemplateRenderer.send(:prepend, Instrumentation::TemplateRenderer::Rails31To5)
|
36
|
+
::ActionView::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan6)
|
37
|
+
else
|
38
|
+
::ActionView::TemplateRenderer.send(:prepend, Instrumentation::TemplateRenderer::Rails6Plus)
|
39
|
+
::ActionView::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::Rails6Plus)
|
40
|
+
end
|
35
41
|
elsif defined?(::ActionView::Rendering) && defined?(::ActionView::Partials::PartialRenderer)
|
36
42
|
# NOTE: Rails < 3.1 compatibility: different classes are used
|
37
43
|
::ActionView::Rendering.send(:prepend, Instrumentation::TemplateRenderer::Rails30)
|
38
|
-
::ActionView::Partials::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer)
|
44
|
+
::ActionView::Partials::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan6)
|
39
45
|
else
|
40
46
|
Datadog::Tracer.log.debug('Expected Template/Partial classes not found; template rendering disabled')
|
41
47
|
end
|
@@ -31,7 +31,7 @@ module Datadog
|
|
31
31
|
attr_reader :app, :options
|
32
32
|
|
33
33
|
def annotate!(span, env)
|
34
|
-
span.resource = env
|
34
|
+
span.resource = resource_name(env)
|
35
35
|
span.service = service_name(env)
|
36
36
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
37
37
|
|
@@ -72,6 +72,10 @@ module Datadog
|
|
72
72
|
options[:service_name]
|
73
73
|
end
|
74
74
|
|
75
|
+
def resource_name(env)
|
76
|
+
env[:method].to_s.upcase
|
77
|
+
end
|
78
|
+
|
75
79
|
def analytics_enabled?
|
76
80
|
Contrib::Analytics.enabled?(options[:analytics_enabled])
|
77
81
|
end
|
@@ -20,7 +20,9 @@ module Datadog
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def format_command_args(command_args)
|
23
|
+
command_args = resolve_command_args(command_args)
|
23
24
|
return 'AUTH ?' if auth_command?(command_args)
|
25
|
+
|
24
26
|
cmd = command_args.map { |x| format_arg(x) }.join(' ')
|
25
27
|
Utils.truncate(cmd, CMD_MAX_LEN, TOO_LONG_MARK)
|
26
28
|
end
|
@@ -29,6 +31,16 @@ module Datadog
|
|
29
31
|
return false unless command_args.is_a?(Array) && !command_args.empty?
|
30
32
|
command_args.first.to_sym == :auth
|
31
33
|
end
|
34
|
+
|
35
|
+
# Unwraps command array when Redis is called with the following syntax:
|
36
|
+
# redis.call([:cmd, 'arg1', ...])
|
37
|
+
def resolve_command_args(command_args)
|
38
|
+
return command_args.first if command_args.is_a?(Array) && command_args.first.is_a?(Array)
|
39
|
+
|
40
|
+
command_args
|
41
|
+
end
|
42
|
+
|
43
|
+
private_class_method :auth_command?, :resolve_command_args
|
32
44
|
end
|
33
45
|
end
|
34
46
|
end
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
@@ -1,111 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dogstatsd-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.3.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.3.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: opentracing
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.4.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.4.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '10.5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.5'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rubocop
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.49.1
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.49.1
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: rspec
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - ~>
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '3.0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- -
|
80
|
+
- - ~>
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '3.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: rspec-collection_matchers
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- -
|
87
|
+
- - ~>
|
102
88
|
- !ruby/object:Gem::Version
|
103
89
|
version: '1.1'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - ~>
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '1.1'
|
111
97
|
- !ruby/object:Gem::Dependency
|
@@ -126,154 +112,154 @@ dependencies:
|
|
126
112
|
name: appraisal
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
|
-
- -
|
115
|
+
- - ~>
|
130
116
|
- !ruby/object:Gem::Version
|
131
117
|
version: '2.2'
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
|
-
- -
|
122
|
+
- - ~>
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '2.2'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: yard
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
|
-
- -
|
129
|
+
- - ~>
|
144
130
|
- !ruby/object:Gem::Version
|
145
131
|
version: '0.9'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- -
|
136
|
+
- - ~>
|
151
137
|
- !ruby/object:Gem::Version
|
152
138
|
version: '0.9'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: webmock
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
|
-
- -
|
143
|
+
- - ~>
|
158
144
|
- !ruby/object:Gem::Version
|
159
145
|
version: '2.0'
|
160
146
|
type: :development
|
161
147
|
prerelease: false
|
162
148
|
version_requirements: !ruby/object:Gem::Requirement
|
163
149
|
requirements:
|
164
|
-
- -
|
150
|
+
- - ~>
|
165
151
|
- !ruby/object:Gem::Version
|
166
152
|
version: '2.0'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: builder
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
170
156
|
requirements:
|
171
|
-
- -
|
157
|
+
- - '>='
|
172
158
|
- !ruby/object:Gem::Version
|
173
159
|
version: '0'
|
174
160
|
type: :development
|
175
161
|
prerelease: false
|
176
162
|
version_requirements: !ruby/object:Gem::Requirement
|
177
163
|
requirements:
|
178
|
-
- -
|
164
|
+
- - '>='
|
179
165
|
- !ruby/object:Gem::Version
|
180
166
|
version: '0'
|
181
167
|
- !ruby/object:Gem::Dependency
|
182
168
|
name: ruby-prof
|
183
169
|
requirement: !ruby/object:Gem::Requirement
|
184
170
|
requirements:
|
185
|
-
- -
|
171
|
+
- - '>='
|
186
172
|
- !ruby/object:Gem::Version
|
187
173
|
version: '0'
|
188
174
|
type: :development
|
189
175
|
prerelease: false
|
190
176
|
version_requirements: !ruby/object:Gem::Requirement
|
191
177
|
requirements:
|
192
|
-
- -
|
178
|
+
- - '>='
|
193
179
|
- !ruby/object:Gem::Version
|
194
180
|
version: '0'
|
195
181
|
- !ruby/object:Gem::Dependency
|
196
182
|
name: sqlite3
|
197
183
|
requirement: !ruby/object:Gem::Requirement
|
198
184
|
requirements:
|
199
|
-
- -
|
185
|
+
- - ~>
|
200
186
|
- !ruby/object:Gem::Version
|
201
187
|
version: 1.3.6
|
202
188
|
type: :development
|
203
189
|
prerelease: false
|
204
190
|
version_requirements: !ruby/object:Gem::Requirement
|
205
191
|
requirements:
|
206
|
-
- -
|
192
|
+
- - ~>
|
207
193
|
- !ruby/object:Gem::Version
|
208
194
|
version: 1.3.6
|
209
195
|
- !ruby/object:Gem::Dependency
|
210
196
|
name: climate_control
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
212
198
|
requirements:
|
213
|
-
- -
|
199
|
+
- - ~>
|
214
200
|
- !ruby/object:Gem::Version
|
215
201
|
version: 0.2.0
|
216
202
|
type: :development
|
217
203
|
prerelease: false
|
218
204
|
version_requirements: !ruby/object:Gem::Requirement
|
219
205
|
requirements:
|
220
|
-
- -
|
206
|
+
- - ~>
|
221
207
|
- !ruby/object:Gem::Version
|
222
208
|
version: 0.2.0
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
210
|
name: addressable
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
|
-
- -
|
213
|
+
- - ~>
|
228
214
|
- !ruby/object:Gem::Version
|
229
215
|
version: 2.4.0
|
230
216
|
type: :development
|
231
217
|
prerelease: false
|
232
218
|
version_requirements: !ruby/object:Gem::Requirement
|
233
219
|
requirements:
|
234
|
-
- -
|
220
|
+
- - ~>
|
235
221
|
- !ruby/object:Gem::Version
|
236
222
|
version: 2.4.0
|
237
223
|
- !ruby/object:Gem::Dependency
|
238
224
|
name: redcarpet
|
239
225
|
requirement: !ruby/object:Gem::Requirement
|
240
226
|
requirements:
|
241
|
-
- -
|
227
|
+
- - ~>
|
242
228
|
- !ruby/object:Gem::Version
|
243
229
|
version: '3.4'
|
244
230
|
type: :development
|
245
231
|
prerelease: false
|
246
232
|
version_requirements: !ruby/object:Gem::Requirement
|
247
233
|
requirements:
|
248
|
-
- -
|
234
|
+
- - ~>
|
249
235
|
- !ruby/object:Gem::Version
|
250
236
|
version: '3.4'
|
251
237
|
- !ruby/object:Gem::Dependency
|
252
238
|
name: pry
|
253
239
|
requirement: !ruby/object:Gem::Requirement
|
254
240
|
requirements:
|
255
|
-
- -
|
241
|
+
- - ~>
|
256
242
|
- !ruby/object:Gem::Version
|
257
243
|
version: 0.10.4
|
258
244
|
type: :development
|
259
245
|
prerelease: false
|
260
246
|
version_requirements: !ruby/object:Gem::Requirement
|
261
247
|
requirements:
|
262
|
-
- -
|
248
|
+
- - ~>
|
263
249
|
- !ruby/object:Gem::Version
|
264
250
|
version: 0.10.4
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
252
|
name: pry-stack_explorer
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
268
254
|
requirements:
|
269
|
-
- -
|
255
|
+
- - ~>
|
270
256
|
- !ruby/object:Gem::Version
|
271
257
|
version: 0.4.9.2
|
272
258
|
type: :development
|
273
259
|
prerelease: false
|
274
260
|
version_requirements: !ruby/object:Gem::Requirement
|
275
261
|
requirements:
|
276
|
-
- -
|
262
|
+
- - ~>
|
277
263
|
- !ruby/object:Gem::Version
|
278
264
|
version: 0.4.9.2
|
279
265
|
description: |
|
@@ -286,21 +272,21 @@ executables: []
|
|
286
272
|
extensions: []
|
287
273
|
extra_rdoc_files: []
|
288
274
|
files:
|
289
|
-
-
|
290
|
-
-
|
291
|
-
-
|
292
|
-
-
|
293
|
-
-
|
294
|
-
-
|
295
|
-
-
|
296
|
-
-
|
297
|
-
-
|
298
|
-
-
|
299
|
-
-
|
300
|
-
-
|
301
|
-
-
|
302
|
-
-
|
303
|
-
-
|
275
|
+
- .circleci/config.yml
|
276
|
+
- .circleci/images/primary/Dockerfile-2.0.0
|
277
|
+
- .circleci/images/primary/Dockerfile-2.1.10
|
278
|
+
- .circleci/images/primary/Dockerfile-2.2.10
|
279
|
+
- .circleci/images/primary/Dockerfile-2.3.8
|
280
|
+
- .circleci/images/primary/Dockerfile-2.4.6
|
281
|
+
- .circleci/images/primary/Dockerfile-2.5.6
|
282
|
+
- .circleci/images/primary/Dockerfile-2.6.4
|
283
|
+
- .dockerignore
|
284
|
+
- .env
|
285
|
+
- .github/CODEOWNERS
|
286
|
+
- .gitignore
|
287
|
+
- .rspec
|
288
|
+
- .rubocop.yml
|
289
|
+
- .yardopts
|
304
290
|
- Appraisals
|
305
291
|
- CHANGELOG.md
|
306
292
|
- CONTRIBUTING.md
|
@@ -341,7 +327,8 @@ files:
|
|
341
327
|
- lib/ddtrace/contrib/action_pack/utils.rb
|
342
328
|
- lib/ddtrace/contrib/action_view/configuration/settings.rb
|
343
329
|
- lib/ddtrace/contrib/action_view/ext.rb
|
344
|
-
- lib/ddtrace/contrib/action_view/instrumentation.rb
|
330
|
+
- lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb
|
331
|
+
- lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb
|
345
332
|
- lib/ddtrace/contrib/action_view/integration.rb
|
346
333
|
- lib/ddtrace/contrib/action_view/patcher.rb
|
347
334
|
- lib/ddtrace/contrib/action_view/utils.rb
|
@@ -644,17 +631,17 @@ require_paths:
|
|
644
631
|
- lib
|
645
632
|
required_ruby_version: !ruby/object:Gem::Requirement
|
646
633
|
requirements:
|
647
|
-
- -
|
634
|
+
- - '>='
|
648
635
|
- !ruby/object:Gem::Version
|
649
636
|
version: 2.0.0
|
650
637
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
651
638
|
requirements:
|
652
|
-
- -
|
639
|
+
- - '>='
|
653
640
|
- !ruby/object:Gem::Version
|
654
641
|
version: '0'
|
655
642
|
requirements: []
|
656
643
|
rubyforge_project:
|
657
|
-
rubygems_version: 2.
|
644
|
+
rubygems_version: 2.0.14.1
|
658
645
|
signing_key:
|
659
646
|
specification_version: 4
|
660
647
|
summary: Datadog tracing code for your Ruby applications
|