ddtrace 0.29.1 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +18 -1
- data/lib/ddtrace/context.rb +26 -10
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +3 -15
- data/lib/ddtrace/contrib/action_pack/patcher.rb +3 -9
- data/lib/ddtrace/contrib/action_view/event.rb +39 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +40 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +43 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +4 -12
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +6 -14
- data/lib/ddtrace/contrib/action_view/patcher.rb +19 -25
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +3 -10
- data/lib/ddtrace/contrib/active_record/patcher.rb +3 -9
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +10 -24
- data/lib/ddtrace/contrib/active_support/patcher.rb +3 -9
- data/lib/ddtrace/contrib/aws/patcher.rb +7 -13
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +4 -11
- data/lib/ddtrace/contrib/dalli/patcher.rb +4 -10
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +4 -10
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +8 -14
- data/lib/ddtrace/contrib/ethon/patcher.rb +7 -9
- data/lib/ddtrace/contrib/excon/patcher.rb +4 -11
- data/lib/ddtrace/contrib/faraday/patcher.rb +6 -12
- data/lib/ddtrace/contrib/grape/patcher.rb +7 -13
- data/lib/ddtrace/contrib/graphql/patcher.rb +5 -11
- data/lib/ddtrace/contrib/grpc/patcher.rb +7 -13
- data/lib/ddtrace/contrib/http/patcher.rb +3 -9
- data/lib/ddtrace/contrib/mongodb/patcher.rb +5 -11
- data/lib/ddtrace/contrib/mysql2/patcher.rb +3 -9
- data/lib/ddtrace/contrib/patcher.rb +38 -10
- data/lib/ddtrace/contrib/racecar/patcher.rb +4 -10
- data/lib/ddtrace/contrib/rack/patcher.rb +56 -21
- data/lib/ddtrace/contrib/rails/patcher.rb +4 -8
- data/lib/ddtrace/contrib/rake/patcher.rb +4 -10
- data/lib/ddtrace/contrib/redis/patcher.rb +8 -14
- data/lib/ddtrace/contrib/resque/patcher.rb +4 -10
- data/lib/ddtrace/contrib/rest_client/patcher.rb +5 -7
- data/lib/ddtrace/contrib/sequel/patcher.rb +4 -10
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +4 -10
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +12 -18
- data/lib/ddtrace/contrib/sinatra/patcher.rb +4 -10
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +7 -13
- data/lib/ddtrace/diagnostics/health.rb +9 -2
- data/lib/ddtrace/ext/diagnostics.rb +6 -0
- data/lib/ddtrace/ext/sampling.rb +13 -0
- data/lib/ddtrace/sampler.rb +49 -8
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +111 -0
- data/lib/ddtrace/span.rb +12 -0
- data/lib/ddtrace/tracer.rb +1 -0
- data/lib/ddtrace/version.rb +2 -2
- metadata +27 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4a4700ac8c6e74091fdd23024559ff87298b5c5048c52bf036b894570a79aac5
|
4
|
+
data.tar.gz: a89768fb74be26e2fdd2cf51ae09fe95e35df762b0aa1e742f7a7578ded3540d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 022cd6564c22b95f1edb1e0c565f3ab2c823221e3913da7dcf204c0476eec43885a2087be1986a1895f6ee8ccb0888db476e237d528a4189c60556b28ec465f5
|
7
|
+
data.tar.gz: 8b069db6714abb290e746a22def4a9a874392d1cfd533b267e516a704dd98a59da4ff4ea6e5ba416127975bc162cff33b578e76835501df588ede4124366743e
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,22 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [0.30.0] - 2019-12-04
|
6
|
+
|
7
|
+
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.30.0
|
8
|
+
|
9
|
+
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.29.1...v0.30.0
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Additional tracer health metrics (#867)
|
14
|
+
- Integration patching instrumentation (#871)
|
15
|
+
- Rule-based trace sampling (#854)
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
- Rails template layout name error (#872) (@djmb)
|
20
|
+
|
5
21
|
## [0.29.1] - 2019-11-26
|
6
22
|
|
7
23
|
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.29.1
|
@@ -981,7 +997,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
981
997
|
|
982
998
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
983
999
|
|
984
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.
|
1000
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.30.0...master
|
1001
|
+
[0.30.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.29.1...v0.30.0
|
985
1002
|
[0.29.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.29.0...v0.29.1
|
986
1003
|
[0.29.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.28.0...v0.29.0
|
987
1004
|
[0.28.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.27.0...v0.28.0
|
data/lib/ddtrace/context.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'thread'
|
2
|
+
require 'ddtrace/diagnostics/health'
|
2
3
|
|
3
4
|
module Datadog
|
4
5
|
# \Context is used to keep track of a hierarchy of spans for the current
|
@@ -89,9 +90,17 @@ module Datadog
|
|
89
90
|
# by default has 10000 spans, all of which belong to unfinished parts of a
|
90
91
|
# larger trace. This is a catch-all to reduce global memory usage.
|
91
92
|
if @max_length > 0 && @trace.length >= @max_length
|
92
|
-
Datadog::Tracer.log.debug("context full, ignoring span #{span.name}")
|
93
93
|
# Detach the span from any context, it's being dropped and ignored.
|
94
94
|
span.context = nil
|
95
|
+
Datadog::Tracer.log.debug("context full, ignoring span #{span.name}")
|
96
|
+
|
97
|
+
# If overflow has already occurred, don't send this metric.
|
98
|
+
# Prevents metrics spam if buffer repeatedly overflows for the same trace.
|
99
|
+
unless @overflow
|
100
|
+
Diagnostics::Health.metrics.error_context_overflow(1, tags: ["max_length:#{@max_length}"])
|
101
|
+
@overflow = true
|
102
|
+
end
|
103
|
+
|
95
104
|
return
|
96
105
|
end
|
97
106
|
set_current_span(span)
|
@@ -111,12 +120,18 @@ module Datadog
|
|
111
120
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
112
121
|
set_current_span(span.parent)
|
113
122
|
return if span.tracer.nil?
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
123
|
+
if span.parent.nil? && !all_spans_finished?
|
124
|
+
if Datadog::Tracer.debug_logging
|
125
|
+
opened_spans = @trace.length - @finished_spans
|
126
|
+
Datadog::Tracer.log.debug("root span #{span.name} closed but has #{opened_spans} unfinished spans:")
|
127
|
+
end
|
128
|
+
|
129
|
+
@trace.reject(&:finished?).group_by(&:name).each do |unfinished_span_name, unfinished_spans|
|
130
|
+
Datadog::Tracer.log.debug("unfinished span: #{unfinished_spans.first}") if Datadog::Tracer.debug_logging
|
131
|
+
Diagnostics::Health.metrics.error_unfinished_spans(
|
132
|
+
unfinished_spans.length,
|
133
|
+
tags: ["name:#{unfinished_span_name}"]
|
134
|
+
)
|
120
135
|
end
|
121
136
|
end
|
122
137
|
end
|
@@ -126,7 +141,7 @@ module Datadog
|
|
126
141
|
# is considered finished if all spans in this context are finished.
|
127
142
|
def finished?
|
128
143
|
@mutex.synchronize do
|
129
|
-
return
|
144
|
+
return all_spans_finished?
|
130
145
|
end
|
131
146
|
end
|
132
147
|
|
@@ -153,7 +168,7 @@ module Datadog
|
|
153
168
|
attach_origin if @origin
|
154
169
|
|
155
170
|
# still return sampled attribute, even if context is not finished
|
156
|
-
return nil, sampled unless
|
171
|
+
return nil, sampled unless all_spans_finished?
|
157
172
|
|
158
173
|
reset
|
159
174
|
[trace, sampled]
|
@@ -180,6 +195,7 @@ module Datadog
|
|
180
195
|
@finished_spans = 0
|
181
196
|
@current_span = nil
|
182
197
|
@current_root_span = nil
|
198
|
+
@overflow = false
|
183
199
|
end
|
184
200
|
|
185
201
|
def set_current_span(span)
|
@@ -195,7 +211,7 @@ module Datadog
|
|
195
211
|
|
196
212
|
# Returns if the trace for the current Context is finished or not.
|
197
213
|
# Low-level internal function, not thread-safe.
|
198
|
-
def
|
214
|
+
def all_spans_finished?
|
199
215
|
@finished_spans > 0 && @trace.length == @finished_spans
|
200
216
|
end
|
201
217
|
|
@@ -11,24 +11,12 @@ module Datadog
|
|
11
11
|
|
12
12
|
module_function
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def target_version
|
15
|
+
Integration.version
|
16
16
|
end
|
17
17
|
|
18
18
|
def patch
|
19
|
-
|
20
|
-
begin
|
21
|
-
patch_action_controller_metal
|
22
|
-
rescue StandardError => e
|
23
|
-
Datadog::Tracer.log.error("Unable to apply ActionController integration: #{e}")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def patch_action_controller_metal
|
29
|
-
do_once(:patch_action_controller_metal) do
|
30
|
-
::ActionController::Metal.send(:prepend, ActionController::Instrumentation::Metal)
|
31
|
-
end
|
19
|
+
::ActionController::Metal.send(:prepend, ActionController::Instrumentation::Metal)
|
32
20
|
end
|
33
21
|
end
|
34
22
|
end
|
@@ -10,18 +10,12 @@ module Datadog
|
|
10
10
|
|
11
11
|
module_function
|
12
12
|
|
13
|
-
def
|
14
|
-
|
13
|
+
def target_version
|
14
|
+
Integration.version
|
15
15
|
end
|
16
16
|
|
17
17
|
def patch
|
18
|
-
|
19
|
-
begin
|
20
|
-
ActionController::Patcher.patch
|
21
|
-
rescue StandardError => e
|
22
|
-
Datadog::Tracer.log.error("Unable to apply ActionPack integration: #{e}")
|
23
|
-
end
|
24
|
-
end
|
18
|
+
ActionController::Patcher.patch
|
25
19
|
end
|
26
20
|
end
|
27
21
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'ddtrace/contrib/active_support/notifications/event'
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Contrib
|
5
|
+
module ActionView
|
6
|
+
# Defines basic behavior for an ActionView event.
|
7
|
+
module Event
|
8
|
+
def self.included(base)
|
9
|
+
base.send(:include, ActiveSupport::Notifications::Event)
|
10
|
+
base.send(:extend, ClassMethods)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Class methods for ActionView events.
|
14
|
+
module ClassMethods
|
15
|
+
def span_options
|
16
|
+
{ service: configuration[:service_name] }
|
17
|
+
end
|
18
|
+
|
19
|
+
def tracer
|
20
|
+
-> { configuration[:tracer] }
|
21
|
+
end
|
22
|
+
|
23
|
+
def configuration
|
24
|
+
Datadog.configuration[:action_view]
|
25
|
+
end
|
26
|
+
|
27
|
+
def record_exception(span, payload)
|
28
|
+
if payload [:exception_object]
|
29
|
+
span.set_error(payload[:exception_object])
|
30
|
+
elsif payload[:exception]
|
31
|
+
# Fallback for ActiveSupport < 5.0
|
32
|
+
span.set_error(payload[:exception])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ddtrace/contrib/action_view/events/render_partial'
|
2
|
+
require 'ddtrace/contrib/action_view/events/render_template'
|
3
|
+
|
4
|
+
module Datadog
|
5
|
+
module Contrib
|
6
|
+
module ActionView
|
7
|
+
# Defines collection of instrumented ActionView events
|
8
|
+
module Events
|
9
|
+
ALL = [
|
10
|
+
Events::RenderPartial,
|
11
|
+
Events::RenderTemplate
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def all
|
17
|
+
self::ALL
|
18
|
+
end
|
19
|
+
|
20
|
+
def subscriptions
|
21
|
+
all.collect(&:subscriptions).collect(&:to_a).flatten
|
22
|
+
end
|
23
|
+
|
24
|
+
def subscribe!
|
25
|
+
all.each(&:subscribe!)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'ddtrace/ext/net'
|
2
|
+
require 'ddtrace/contrib/analytics'
|
3
|
+
require 'ddtrace/contrib/action_view/ext'
|
4
|
+
require 'ddtrace/contrib/action_view/event'
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module Contrib
|
8
|
+
module ActionView
|
9
|
+
module Events
|
10
|
+
# Defines instrumentation for render_partial.action_view event
|
11
|
+
module RenderPartial
|
12
|
+
include ActionView::Event
|
13
|
+
|
14
|
+
EVENT_NAME = 'render_partial.action_view'.freeze
|
15
|
+
|
16
|
+
module_function
|
17
|
+
|
18
|
+
def event_name
|
19
|
+
self::EVENT_NAME
|
20
|
+
end
|
21
|
+
|
22
|
+
def span_name
|
23
|
+
Ext::SPAN_RENDER_PARTIAL
|
24
|
+
end
|
25
|
+
|
26
|
+
def process(span, _event, _id, payload)
|
27
|
+
span.span_type = Datadog::Ext::HTTP::TEMPLATE
|
28
|
+
|
29
|
+
template_name = Utils.normalize_template_name(payload[:identifier])
|
30
|
+
span.set_tag(Ext::TAG_TEMPLATE_NAME, template_name) if template_name
|
31
|
+
|
32
|
+
record_exception(span, payload)
|
33
|
+
rescue StandardError => e
|
34
|
+
Datadog::Tracer.log.debug(e.message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'ddtrace/ext/net'
|
2
|
+
require 'ddtrace/contrib/analytics'
|
3
|
+
require 'ddtrace/contrib/action_view/ext'
|
4
|
+
require 'ddtrace/contrib/action_view/event'
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module Contrib
|
8
|
+
module ActionView
|
9
|
+
module Events
|
10
|
+
# Defines instrumentation for render_template.action_view event
|
11
|
+
module RenderTemplate
|
12
|
+
include ActionView::Event
|
13
|
+
|
14
|
+
EVENT_NAME = 'render_template.action_view'.freeze
|
15
|
+
|
16
|
+
module_function
|
17
|
+
|
18
|
+
def event_name
|
19
|
+
self::EVENT_NAME
|
20
|
+
end
|
21
|
+
|
22
|
+
def span_name
|
23
|
+
Ext::SPAN_RENDER_TEMPLATE
|
24
|
+
end
|
25
|
+
|
26
|
+
def process(span, _event, _id, payload)
|
27
|
+
span.span_type = Datadog::Ext::HTTP::TEMPLATE
|
28
|
+
|
29
|
+
template_name = Utils.normalize_template_name(payload[:identifier])
|
30
|
+
span.set_tag(Ext::TAG_TEMPLATE_NAME, template_name) if template_name
|
31
|
+
|
32
|
+
layout = payload[:layout]
|
33
|
+
span.set_tag(Ext::TAG_LAYOUT, layout) if layout
|
34
|
+
|
35
|
+
record_exception(span, payload)
|
36
|
+
rescue StandardError => e
|
37
|
+
Datadog::Tracer.log.debug(e.message)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -4,7 +4,7 @@ module Datadog
|
|
4
4
|
module Contrib
|
5
5
|
module ActionView
|
6
6
|
module Instrumentation
|
7
|
-
#
|
7
|
+
# Legacy instrumentation for partial rendering for Rails < 4
|
8
8
|
module PartialRenderer
|
9
9
|
def render(*args, &block)
|
10
10
|
datadog_tracer.trace(
|
@@ -54,23 +54,15 @@ module Datadog
|
|
54
54
|
self.active_datadog_span = nil
|
55
55
|
end
|
56
56
|
|
57
|
-
# Rails <
|
58
|
-
|
57
|
+
# Rails < 4 partial rendering
|
58
|
+
# ActiveSupport events are used instead for Rails >= 4
|
59
|
+
module RailsLessThan4
|
59
60
|
include PartialRenderer
|
60
61
|
|
61
62
|
def datadog_template(*args)
|
62
63
|
@template
|
63
64
|
end
|
64
65
|
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
66
|
end
|
75
67
|
end
|
76
68
|
end
|
@@ -4,9 +4,9 @@ module Datadog
|
|
4
4
|
module Contrib
|
5
5
|
module ActionView
|
6
6
|
module Instrumentation
|
7
|
-
#
|
7
|
+
# Legacy instrumentation for template rendering for Rails < 4
|
8
8
|
module TemplateRenderer
|
9
|
-
# Rails < 3.1 template rendering
|
9
|
+
# Legacy Rails < 3.1 template rendering
|
10
10
|
module Rails30
|
11
11
|
# rubocop:disable Metrics/MethodLength
|
12
12
|
def self.prepended(base)
|
@@ -82,7 +82,7 @@ module Datadog
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
#
|
85
|
+
# Legacy shared code for Rails >= 3.1 template rendering
|
86
86
|
module Rails31Plus
|
87
87
|
def render(*args, &block)
|
88
88
|
datadog_tracer.trace(
|
@@ -143,23 +143,15 @@ module Datadog
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
-
# Rails >= 3.1
|
147
|
-
|
146
|
+
# Rails >= 3.1, < 4 template rendering
|
147
|
+
# ActiveSupport events are used instead for Rails >= 4
|
148
|
+
module RailsLessThan4
|
148
149
|
include Rails31Plus
|
149
150
|
|
150
151
|
def datadog_parse_args(template, layout_name, *args)
|
151
152
|
[template, layout_name]
|
152
153
|
end
|
153
154
|
end
|
154
|
-
|
155
|
-
# Rails >= 6 template rendering
|
156
|
-
module Rails6Plus
|
157
|
-
include Rails31Plus
|
158
|
-
|
159
|
-
def datadog_parse_args(view, template, layout_name, *args)
|
160
|
-
[template, layout_name]
|
161
|
-
end
|
162
|
-
end
|
163
155
|
end
|
164
156
|
end
|
165
157
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'ddtrace/ext/http'
|
2
2
|
require 'ddtrace/contrib/patcher'
|
3
|
+
require 'ddtrace/contrib/action_view/events'
|
3
4
|
require 'ddtrace/contrib/action_view/ext'
|
4
5
|
require 'ddtrace/contrib/action_view/instrumentation/partial_renderer'
|
5
6
|
require 'ddtrace/contrib/action_view/instrumentation/template_renderer'
|
@@ -14,37 +15,30 @@ module Datadog
|
|
14
15
|
|
15
16
|
module_function
|
16
17
|
|
17
|
-
def
|
18
|
-
|
18
|
+
def target_version
|
19
|
+
Integration.version
|
19
20
|
end
|
20
21
|
|
21
22
|
def patch
|
22
|
-
|
23
|
-
begin
|
24
|
-
patch_renderer
|
25
|
-
rescue StandardError => e
|
26
|
-
Datadog::Tracer.log.error("Unable to apply Action View integration: #{e} Location: #{e.backtrace.first}")
|
27
|
-
end
|
28
|
-
end
|
23
|
+
patch_renderer
|
29
24
|
end
|
30
25
|
|
31
26
|
def patch_renderer
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
27
|
+
if target_version >= Gem::Version.new('4.0.0')
|
28
|
+
Events.subscribe!
|
29
|
+
elsif defined?(::ActionView::TemplateRenderer) && defined?(::ActionView::PartialRenderer)
|
30
|
+
# Rails < 4 compatibility:
|
31
|
+
# Rendering events are not nested in this version, creating
|
32
|
+
# render_partial spans outside of the parent render_template span.
|
33
|
+
# We fall back to manual patching instead.
|
34
|
+
::ActionView::TemplateRenderer.send(:prepend, Instrumentation::TemplateRenderer::RailsLessThan4)
|
35
|
+
::ActionView::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan4)
|
36
|
+
elsif defined?(::ActionView::Rendering) && defined?(::ActionView::Partials::PartialRenderer)
|
37
|
+
# NOTE: Rails < 3.1 compatibility: different classes are used
|
38
|
+
::ActionView::Rendering.send(:prepend, Instrumentation::TemplateRenderer::Rails30)
|
39
|
+
::ActionView::Partials::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan4)
|
40
|
+
else
|
41
|
+
Datadog::Tracer.log.debug('Expected Template/Partial classes not found; template rendering disabled')
|
48
42
|
end
|
49
43
|
end
|
50
44
|
end
|