ddtrace 0.14.2 → 0.15.0.beta1
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +6 -22
- data/lib/ddtrace.rb +13 -13
- data/lib/ddtrace/buffer.rb +8 -20
- data/lib/ddtrace/context.rb +60 -104
- data/lib/ddtrace/registry.rb +2 -4
- data/lib/ddtrace/sampler.rb +6 -24
- data/lib/ddtrace/tracer.rb +0 -1
- data/lib/ddtrace/transport.rb +5 -17
- data/lib/ddtrace/version.rb +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 152355917a6f63e309d2fa3c2493df04f689bae2
|
4
|
+
data.tar.gz: ffbb1cd4275783dce93875758383ac0df983ac72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7143e0ffc5d84ca3f8305840f299cd021281cc45df6cad2c78460d431f835a2483af3f4cc9b9a0c75557c837fc997e3151a4d5e4cb0f19c776bd1960509652bf
|
7
|
+
data.tar.gz: 4918277463d66e58a51314d268305a1529564966cdb645bd31b6e9770644ee3e0bb455cbaf05de493e9cdefacc523444ccd4680dce41994b2d59ca8fa5e2239c
|
data/CHANGELOG.md
CHANGED
@@ -4,30 +4,15 @@
|
|
4
4
|
|
5
5
|
## [Unreleased (beta)]
|
6
6
|
|
7
|
-
## [0.
|
7
|
+
## [0.15.0.beta1] - 2018-08-15
|
8
8
|
|
9
|
-
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.
|
9
|
+
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.15.0.beta1
|
10
10
|
|
11
|
-
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.14.
|
12
|
-
|
13
|
-
### Fixed
|
14
|
-
|
15
|
-
- Sampling priority from request headers not being used (#521)
|
16
|
-
|
17
|
-
|
18
|
-
## [0.14.1] - 2018-08-21
|
19
|
-
|
20
|
-
Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.14.1
|
21
|
-
|
22
|
-
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0...v0.14.1
|
11
|
+
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0...v0.15.0.beta1
|
23
12
|
|
24
13
|
### Changed
|
25
14
|
|
26
|
-
-
|
27
|
-
|
28
|
-
### Fixed
|
29
|
-
|
30
|
-
- Sequel 'not a valid integration' error (#514, #516) (@steveh)
|
15
|
+
- Reduced locking to improve multithreaded performance (#506)
|
31
16
|
|
32
17
|
## [0.14.0] - 2018-08-14
|
33
18
|
|
@@ -485,9 +470,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
485
470
|
|
486
471
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
487
472
|
|
488
|
-
[Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.
|
489
|
-
[Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.
|
490
|
-
[0.14.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0...v0.14.1
|
473
|
+
[Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0...master
|
474
|
+
[Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0...0.15-dev
|
491
475
|
[0.14.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.13.2...v0.14.0
|
492
476
|
[0.14.0.rc1]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0.beta2...v0.14.0.rc1
|
493
477
|
[0.14.0.beta2]: https://github.com/DataDog/dd-trace-rb/compare/v0.14.0.beta1...v0.14.0.beta2
|
data/lib/ddtrace.rb
CHANGED
@@ -44,29 +44,29 @@ module Datadog
|
|
44
44
|
end
|
45
45
|
|
46
46
|
require 'ddtrace/contrib/base'
|
47
|
+
require 'ddtrace/contrib/integration'
|
48
|
+
require 'ddtrace/contrib/rack/patcher'
|
49
|
+
require 'ddtrace/contrib/rails/patcher'
|
47
50
|
require 'ddtrace/contrib/active_model_serializers/patcher'
|
48
51
|
require 'ddtrace/contrib/active_record/integration'
|
49
|
-
require 'ddtrace/contrib/
|
50
|
-
require 'ddtrace/contrib/dalli/patcher'
|
51
|
-
require 'ddtrace/contrib/delayed_job/patcher'
|
52
|
+
require 'ddtrace/contrib/sequel/patcher'
|
52
53
|
require 'ddtrace/contrib/elasticsearch/patcher'
|
53
|
-
require 'ddtrace/contrib/excon/patcher'
|
54
54
|
require 'ddtrace/contrib/faraday/patcher'
|
55
55
|
require 'ddtrace/contrib/grape/patcher'
|
56
56
|
require 'ddtrace/contrib/graphql/patcher'
|
57
57
|
require 'ddtrace/contrib/grpc/patcher'
|
58
|
+
require 'ddtrace/contrib/redis/patcher'
|
58
59
|
require 'ddtrace/contrib/http/patcher'
|
59
|
-
require 'ddtrace/contrib/
|
60
|
+
require 'ddtrace/contrib/aws/patcher'
|
61
|
+
require 'ddtrace/contrib/sucker_punch/patcher'
|
62
|
+
require 'ddtrace/contrib/rest_client/integration'
|
60
63
|
require 'ddtrace/contrib/mongodb/patcher'
|
61
|
-
require 'ddtrace/contrib/
|
62
|
-
require 'ddtrace/contrib/racecar/patcher'
|
63
|
-
require 'ddtrace/contrib/rack/patcher'
|
64
|
-
require 'ddtrace/contrib/rails/patcher'
|
64
|
+
require 'ddtrace/contrib/dalli/patcher'
|
65
65
|
require 'ddtrace/contrib/rake/patcher'
|
66
|
-
require 'ddtrace/contrib/redis/patcher'
|
67
66
|
require 'ddtrace/contrib/resque/patcher'
|
68
|
-
require 'ddtrace/contrib/
|
69
|
-
require 'ddtrace/contrib/
|
67
|
+
require 'ddtrace/contrib/delayed_job/patcher'
|
68
|
+
require 'ddtrace/contrib/racecar/patcher'
|
70
69
|
require 'ddtrace/contrib/sidekiq/patcher'
|
71
|
-
require 'ddtrace/contrib/
|
70
|
+
require 'ddtrace/contrib/excon/patcher'
|
71
|
+
require 'ddtrace/contrib/mysql2/patcher'
|
72
72
|
require 'ddtrace/monkey'
|
data/lib/ddtrace/buffer.rb
CHANGED
@@ -8,7 +8,7 @@ module Datadog
|
|
8
8
|
def initialize(max_size)
|
9
9
|
@max_size = max_size
|
10
10
|
|
11
|
-
@mutex = Mutex.new
|
11
|
+
@mutex = Mutex.new
|
12
12
|
@traces = []
|
13
13
|
@closed = false
|
14
14
|
end
|
@@ -16,30 +16,20 @@ module Datadog
|
|
16
16
|
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
17
17
|
# even if the buffer is full. In that case, a random trace is discarded.
|
18
18
|
def push(trace)
|
19
|
-
@
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@traces << trace
|
24
|
-
else
|
25
|
-
# we should replace a random trace with the new one
|
26
|
-
@traces[rand(len)] = trace
|
27
|
-
end
|
28
|
-
end
|
19
|
+
return if @closed
|
20
|
+
len = @traces.length
|
21
|
+
@traces.delete_at(rand(len)) if len >= @max_size && @max_size > 0
|
22
|
+
@traces << trace
|
29
23
|
end
|
30
24
|
|
31
25
|
# Return the current number of stored traces.
|
32
26
|
def length
|
33
|
-
@
|
34
|
-
return @traces.length
|
35
|
-
end
|
27
|
+
@traces.length
|
36
28
|
end
|
37
29
|
|
38
30
|
# Return if the buffer is empty.
|
39
31
|
def empty?
|
40
|
-
@
|
41
|
-
return @traces.empty?
|
42
|
-
end
|
32
|
+
@traces.empty?
|
43
33
|
end
|
44
34
|
|
45
35
|
# Stored traces are returned and the local buffer is reset.
|
@@ -52,9 +42,7 @@ module Datadog
|
|
52
42
|
end
|
53
43
|
|
54
44
|
def close
|
55
|
-
@
|
56
|
-
@closed = true
|
57
|
-
end
|
45
|
+
@closed = true
|
58
46
|
end
|
59
47
|
end
|
60
48
|
end
|
data/lib/ddtrace/context.rb
CHANGED
@@ -13,16 +13,14 @@ module Datadog
|
|
13
13
|
# \Context, it will be related to the original trace.
|
14
14
|
#
|
15
15
|
# This data structure is thread-safe.
|
16
|
-
# rubocop:disable Metrics/ClassLength
|
17
16
|
class Context
|
18
17
|
# 100k spans is about a 100Mb footprint
|
19
18
|
DEFAULT_MAX_LENGTH = 100_000
|
20
19
|
|
21
20
|
attr_reader :max_length
|
22
21
|
|
23
|
-
# Initialize a new
|
22
|
+
# Initialize a new \Context.
|
24
23
|
def initialize(options = {})
|
25
|
-
@mutex = Mutex.new
|
26
24
|
# max_length is the amount of spans above which, for a given trace,
|
27
25
|
# the context will simply drop and ignore spans, avoiding high memory usage.
|
28
26
|
@max_length = options.fetch(:max_length, DEFAULT_MAX_LENGTH)
|
@@ -30,82 +28,56 @@ module Datadog
|
|
30
28
|
end
|
31
29
|
|
32
30
|
def trace_id
|
33
|
-
@
|
34
|
-
@parent_trace_id
|
35
|
-
end
|
31
|
+
@parent_trace_id
|
36
32
|
end
|
37
33
|
|
38
34
|
def span_id
|
39
|
-
@
|
40
|
-
@parent_span_id
|
41
|
-
end
|
35
|
+
@parent_span_id
|
42
36
|
end
|
43
37
|
|
44
|
-
|
45
|
-
@mutex.synchronize do
|
46
|
-
@sampling_priority
|
47
|
-
end
|
48
|
-
end
|
38
|
+
attr_reader :sampling_priority
|
49
39
|
|
50
|
-
|
51
|
-
@mutex.synchronize do
|
52
|
-
@sampling_priority = priority
|
53
|
-
end
|
54
|
-
end
|
40
|
+
attr_writer :sampling_priority
|
55
41
|
|
56
42
|
# Return the last active span that corresponds to the last inserted
|
57
43
|
# item in the trace list. This cannot be considered as the current active
|
58
44
|
# span in asynchronous environments, because some spans can be closed
|
59
45
|
# earlier while child spans still need to finish their traced execution.
|
60
|
-
|
61
|
-
@mutex.synchronize do
|
62
|
-
return @current_span
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def current_root_span
|
67
|
-
@mutex.synchronize do
|
68
|
-
return @current_root_span
|
69
|
-
end
|
70
|
-
end
|
46
|
+
attr_reader :current_span, :current_root_span
|
71
47
|
|
72
48
|
# Add a span to the context trace list, keeping it as the last active span.
|
73
49
|
def add_span(span)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
span.context = self
|
89
|
-
end
|
50
|
+
# If hitting the hard limit, just drop spans. This is really a rare case
|
51
|
+
# as it means despite the soft limit, the hard limit is reached, so the trace
|
52
|
+
# by default has 10000 spans, all of which belong to unfinished parts of a
|
53
|
+
# larger trace. This is a catch-all to reduce global memory usage.
|
54
|
+
if @max_length > 0 && @trace.length >= @max_length
|
55
|
+
Datadog::Tracer.log.debug("context full, ignoring span #{span.name}")
|
56
|
+
# Detach the span from any context, it's being dropped and ignored.
|
57
|
+
span.context = nil
|
58
|
+
return
|
59
|
+
end
|
60
|
+
set_current_span(span)
|
61
|
+
@current_root_span = span if @trace.empty?
|
62
|
+
@trace << span
|
63
|
+
span.context = self
|
90
64
|
end
|
91
65
|
|
92
66
|
# Mark a span as a finished, increasing the internal counter to prevent
|
93
67
|
# cycles inside _trace list.
|
94
68
|
def close_span(span)
|
95
|
-
@
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
Datadog::Tracer.log.debug("unfinished span: #{s}") unless s.finished?
|
108
|
-
end
|
69
|
+
@finished_spans += 1
|
70
|
+
# Current span is only meaningful for linear tree-like traces,
|
71
|
+
# in other cases, this is just broken and one should rely
|
72
|
+
# on per-instrumentation code to retrieve handle parent/child relations.
|
73
|
+
set_current_span(span.parent)
|
74
|
+
return if span.tracer.nil?
|
75
|
+
return unless Datadog::Tracer.debug_logging
|
76
|
+
if span.parent.nil? && !check_finished_spans
|
77
|
+
opened_spans = @trace.length - @finished_spans
|
78
|
+
Datadog::Tracer.log.debug("root span #{span.name} closed but has #{opened_spans} unfinished spans:")
|
79
|
+
@trace.each do |s|
|
80
|
+
Datadog::Tracer.log.debug("unfinished span: #{s}") unless s.finished?
|
109
81
|
end
|
110
82
|
end
|
111
83
|
end
|
@@ -113,17 +85,13 @@ module Datadog
|
|
113
85
|
# Returns if the trace for the current Context is finished or not. A \Context
|
114
86
|
# is considered finished if all spans in this context are finished.
|
115
87
|
def finished?
|
116
|
-
|
117
|
-
return check_finished_spans
|
118
|
-
end
|
88
|
+
check_finished_spans
|
119
89
|
end
|
120
90
|
|
121
91
|
# Returns true if the context is sampled, that is, if it should be kept
|
122
92
|
# and sent to the trace agent.
|
123
93
|
def sampled?
|
124
|
-
@
|
125
|
-
return @sampled
|
126
|
-
end
|
94
|
+
@sampled
|
127
95
|
end
|
128
96
|
|
129
97
|
# Returns both the trace list generated in the current context and
|
@@ -133,26 +101,22 @@ module Datadog
|
|
133
101
|
#
|
134
102
|
# This operation is thread-safe.
|
135
103
|
def get
|
136
|
-
@
|
137
|
-
|
138
|
-
sampled = @sampled
|
104
|
+
trace = @trace
|
105
|
+
sampled = @sampled
|
139
106
|
|
140
|
-
|
107
|
+
attach_sampling_priority if sampled && @sampling_priority
|
141
108
|
|
142
|
-
|
143
|
-
|
109
|
+
# still return sampled attribute, even if context is not finished
|
110
|
+
return nil, sampled unless check_finished_spans()
|
144
111
|
|
145
|
-
|
146
|
-
|
147
|
-
end
|
112
|
+
reset
|
113
|
+
[trace, sampled]
|
148
114
|
end
|
149
115
|
|
150
116
|
# Return a string representation of the context.
|
151
117
|
def to_s
|
152
|
-
|
153
|
-
|
154
|
-
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
155
|
-
end
|
118
|
+
# rubocop:disable Metrics/LineLength
|
119
|
+
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
156
120
|
end
|
157
121
|
|
158
122
|
private
|
@@ -194,45 +158,37 @@ module Datadog
|
|
194
158
|
|
195
159
|
# Return the start time of the root span, or nil if there are no spans or this is undefined.
|
196
160
|
def start_time
|
197
|
-
@
|
198
|
-
|
199
|
-
@trace[0].start_time
|
200
|
-
end
|
161
|
+
return nil if @trace.empty?
|
162
|
+
@trace[0].start_time
|
201
163
|
end
|
202
164
|
|
203
165
|
# Return the length of the current trace held by this context.
|
204
166
|
def length
|
205
|
-
@
|
206
|
-
@trace.length
|
207
|
-
end
|
167
|
+
@trace.length
|
208
168
|
end
|
209
169
|
|
210
170
|
# Iterate on each span within the trace. This is thread safe.
|
211
171
|
def each_span
|
212
|
-
@
|
213
|
-
|
214
|
-
yield span
|
215
|
-
end
|
172
|
+
@trace.each do |span|
|
173
|
+
yield span
|
216
174
|
end
|
217
175
|
end
|
218
176
|
|
219
177
|
# Delete any span matching the condition. This is thread safe.
|
220
178
|
def delete_span_if
|
221
|
-
@
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
@finished_spans -= 1 if finished
|
233
|
-
end
|
234
|
-
delete_span
|
179
|
+
@trace.delete_if do |span|
|
180
|
+
finished = span.finished?
|
181
|
+
delete_span = yield span
|
182
|
+
if delete_span
|
183
|
+
# We need to detach the span from the context, else, some code
|
184
|
+
# finishing it afterwards would mess up with the number of
|
185
|
+
# finished_spans and possibly cause other side effects.
|
186
|
+
span.context = nil
|
187
|
+
# Acknowledge there's one span less to finish, if needed.
|
188
|
+
# It's very important to keep this balanced.
|
189
|
+
@finished_spans -= 1 if finished
|
235
190
|
end
|
191
|
+
delete_span
|
236
192
|
end
|
237
193
|
end
|
238
194
|
end
|
data/lib/ddtrace/registry.rb
CHANGED
data/lib/ddtrace/sampler.rb
CHANGED
@@ -98,32 +98,14 @@ module Datadog
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def sample(span)
|
101
|
-
|
102
|
-
return
|
103
|
-
|
104
|
-
|
105
|
-
span.context.sampling_priority = if sampled
|
106
|
-
Datadog::Ext::Priority::AUTO_KEEP
|
107
|
-
else
|
108
|
-
Datadog::Ext::Priority::AUTO_REJECT
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def_delegators :@post_sampler, :update
|
114
|
-
|
115
|
-
private
|
116
|
-
|
117
|
-
def sampled_by_upstream(span)
|
118
|
-
span.sampled = priority_keep?(span.context.sampling_priority)
|
119
|
-
end
|
101
|
+
span.context.sampling_priority = Datadog::Ext::Priority::AUTO_REJECT if span.context
|
102
|
+
return unless @base_sampler.sample(span)
|
103
|
+
return unless @post_sampler.sample(span)
|
104
|
+
span.context.sampling_priority = Datadog::Ext::Priority::AUTO_KEEP if span.context
|
120
105
|
|
121
|
-
|
122
|
-
sampling_priority == Datadog::Ext::Priority::USER_KEEP || sampling_priority == Datadog::Ext::Priority::AUTO_KEEP
|
106
|
+
true
|
123
107
|
end
|
124
108
|
|
125
|
-
|
126
|
-
@base_sampler.sample(span) && @post_sampler.sample(span)
|
127
|
-
end
|
109
|
+
def_delegators :@post_sampler, :update
|
128
110
|
end
|
129
111
|
end
|
data/lib/ddtrace/tracer.rb
CHANGED
data/lib/ddtrace/transport.rb
CHANGED
@@ -68,7 +68,6 @@ module Datadog
|
|
68
68
|
@count_client_error = 0
|
69
69
|
@count_server_error = 0
|
70
70
|
@count_internal_error = 0
|
71
|
-
@count_consecutive_errors = 0
|
72
71
|
end
|
73
72
|
|
74
73
|
# route the send to the right endpoint
|
@@ -110,7 +109,7 @@ module Datadog
|
|
110
109
|
response = Net::HTTP.start(@hostname, @port, read_timeout: TIMEOUT) { |http| http.request(request) }
|
111
110
|
handle_response(response)
|
112
111
|
rescue StandardError => e
|
113
|
-
|
112
|
+
Datadog::Tracer.log.error(e.message)
|
114
113
|
500
|
115
114
|
end.tap do
|
116
115
|
yield(response) if block_given?
|
@@ -171,22 +170,21 @@ module Datadog
|
|
171
170
|
|
172
171
|
if success?(status_code)
|
173
172
|
Datadog::Tracer.log.debug('Payload correctly sent to the trace agent.')
|
174
|
-
@mutex.synchronize { @count_consecutive_errors = 0 }
|
175
173
|
@mutex.synchronize { @count_success += 1 }
|
176
174
|
elsif downgrade?(status_code)
|
177
175
|
Datadog::Tracer.log.debug("calling the endpoint but received #{status_code}; downgrading the API")
|
178
176
|
elsif client_error?(status_code)
|
179
|
-
|
177
|
+
Datadog::Tracer.log.error("Client error: #{response.message}")
|
180
178
|
@mutex.synchronize { @count_client_error += 1 }
|
181
179
|
elsif server_error?(status_code)
|
182
|
-
|
180
|
+
Datadog::Tracer.log.error("Server error: #{response.message}")
|
181
|
+
@mutex.synchronize { @count_server_error += 1 }
|
183
182
|
end
|
184
183
|
|
185
184
|
status_code
|
186
185
|
rescue StandardError => e
|
187
|
-
|
186
|
+
Datadog::Tracer.log.error(e.message)
|
188
187
|
@mutex.synchronize { @count_internal_error += 1 }
|
189
|
-
|
190
188
|
500
|
191
189
|
end
|
192
190
|
|
@@ -203,16 +201,6 @@ module Datadog
|
|
203
201
|
|
204
202
|
private
|
205
203
|
|
206
|
-
def log_error_once(*args)
|
207
|
-
if @count_consecutive_errors > 0
|
208
|
-
Datadog::Tracer.log.debug(*args)
|
209
|
-
else
|
210
|
-
Datadog::Tracer.log.error(*args)
|
211
|
-
end
|
212
|
-
|
213
|
-
@mutex.synchronize { @count_consecutive_errors += 1 }
|
214
|
-
end
|
215
|
-
|
216
204
|
def process_callback(action, response)
|
217
205
|
return unless @response_callback && @response_callback.respond_to?(:call)
|
218
206
|
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -435,12 +435,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
435
435
|
version: 1.9.1
|
436
436
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
437
437
|
requirements:
|
438
|
-
- - "
|
438
|
+
- - ">"
|
439
439
|
- !ruby/object:Gem::Version
|
440
|
-
version:
|
440
|
+
version: 1.3.1
|
441
441
|
requirements: []
|
442
442
|
rubyforge_project:
|
443
|
-
rubygems_version: 2.
|
443
|
+
rubygems_version: 2.6.14
|
444
444
|
signing_key:
|
445
445
|
specification_version: 4
|
446
446
|
summary: Datadog tracing code for your Ruby applications
|