ddtrace 0.42.0 → 0.43.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.simplecov +1 -1
- data/Appraisals +160 -132
- data/CHANGELOG.md +36 -0
- data/CONTRIBUTING.md +1 -1
- data/Rakefile +39 -0
- data/docs/DevelopmentGuide.md +2 -2
- data/docs/GettingStarted.md +71 -1
- data/lib/ddtrace.rb +2 -0
- data/lib/ddtrace/configuration.rb +20 -4
- data/lib/ddtrace/configuration/settings.rb +4 -2
- data/lib/ddtrace/context.rb +18 -0
- data/lib/ddtrace/context_provider.rb +12 -1
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +10 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +0 -1
- data/lib/ddtrace/contrib/configurable.rb +2 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +4 -5
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +19 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +104 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +40 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +3 -1
- data/lib/ddtrace/contrib/excon/middleware.rb +7 -1
- data/lib/ddtrace/contrib/faraday/patcher.rb +1 -1
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +19 -4
- data/lib/ddtrace/contrib/http/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +2 -1
- data/lib/ddtrace/contrib/rails/patcher.rb +5 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +1 -1
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +38 -0
- data/lib/ddtrace/contrib/rspec/example.rb +61 -0
- data/lib/ddtrace/contrib/rspec/example_group.rb +61 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +19 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +41 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +25 -0
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -1
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -20
- data/lib/ddtrace/contrib/status_code_matcher.rb +67 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +265 -0
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +12 -0
- data/lib/ddtrace/ext/runtime.rb +1 -0
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/runtime/identity.rb +4 -5
- data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
- data/lib/ddtrace/tracer.rb +14 -1
- data/lib/ddtrace/utils.rb +10 -11
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/writer.rb +19 -1
- metadata +23 -31
@@ -20,8 +20,14 @@ module Datadog
|
|
20
20
|
PROPAGATION_STYLE_DATADOG = 'Datadog'.freeze
|
21
21
|
PROPAGATION_STYLE_B3 = 'B3'.freeze
|
22
22
|
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'B3 single header'.freeze
|
23
|
-
|
24
|
-
|
23
|
+
PROPAGATION_STYLE_INJECT_ENV = 'DD_PROPAGATION_STYLE_INJECT'.freeze
|
24
|
+
PROPAGATION_STYLE_EXTRACT_ENV = 'DD_PROPAGATION_STYLE_EXTRACT'.freeze
|
25
|
+
# Note: the below inject/extract values are deprecated and were defined erronously
|
26
|
+
# they were never part of the datadog language client standard or documentation
|
27
|
+
# some users may already be relying on them, but we should look to remove these in the future
|
28
|
+
# or before 1.0.
|
29
|
+
PROPAGATION_INJECT_STYLE_ENV_OLD = 'DD_PROPAGATION_INJECT_STYLE'.freeze
|
30
|
+
PROPAGATION_EXTRACT_STYLE_ENV_OLD = 'DD_PROPAGATION_EXTRACT_STYLE'.freeze
|
25
31
|
|
26
32
|
# gRPC metadata keys for distributed tracing. https://github.com/grpc/grpc-go/blob/v1.10.x/Documentation/grpc-metadata.md
|
27
33
|
GRPC_METADATA_TRACE_ID = 'x-datadog-trace-id'.freeze
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Ext
|
3
|
+
# Defines constants for Git tags
|
4
|
+
module Git
|
5
|
+
TAG_BRANCH = 'git.branch'.freeze
|
6
|
+
TAG_COMMIT_SHA = 'git.commit.sha'.freeze
|
7
|
+
TAG_DEPRECATED_COMMIT_SHA = 'git.commit_sha'.freeze
|
8
|
+
TAG_REPOSITORY_URL = 'git.repository_url'.freeze
|
9
|
+
TAG_TAG = 'git.tag'.freeze
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/ddtrace/ext/runtime.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Ext
|
3
|
+
# Defines constants for test tags
|
4
|
+
module Test
|
5
|
+
TAG_ARGUMENTS = 'test.arguments'.freeze
|
6
|
+
TAG_FRAMEWORK = 'test.framework'.freeze
|
7
|
+
TAG_NAME = 'test.name'.freeze
|
8
|
+
TAG_SKIP_REASON = 'test.skip_reason'.freeze
|
9
|
+
TAG_STATUS = 'test.status'.freeze
|
10
|
+
TAG_SUITE = 'test.suite'.freeze
|
11
|
+
TAG_TRAITS = 'test.traits'.freeze
|
12
|
+
TAG_TYPE = 'test.type'.freeze
|
13
|
+
|
14
|
+
# TODO: is there a better place for SPAN_KIND?
|
15
|
+
TAG_SPAN_KIND = 'span.kind'.freeze
|
16
|
+
|
17
|
+
module Status
|
18
|
+
PASS = 'pass'.freeze
|
19
|
+
FAIL = 'fail'.freeze
|
20
|
+
SKIP = 'skip'.freeze
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
require 'securerandom'
|
2
2
|
require 'ddtrace/ext/runtime'
|
3
|
+
require 'ddtrace/utils/forking'
|
3
4
|
|
4
5
|
module Datadog
|
5
6
|
module Runtime
|
6
7
|
# For runtime identity
|
7
8
|
module Identity
|
9
|
+
extend Datadog::Utils::Forking
|
10
|
+
|
8
11
|
module_function
|
9
12
|
|
10
13
|
# Retrieves number of classes from runtime
|
11
14
|
def id
|
12
|
-
@pid ||= Process.pid
|
13
15
|
@id ||= SecureRandom.uuid
|
14
16
|
|
15
17
|
# Check if runtime has changed, e.g. forked.
|
16
|
-
|
17
|
-
@pid = Process.pid
|
18
|
-
@id = SecureRandom.uuid
|
19
|
-
end
|
18
|
+
after_fork! { @id = SecureRandom.uuid }
|
20
19
|
|
21
20
|
@id
|
22
21
|
end
|
@@ -38,6 +38,10 @@ module Datadog
|
|
38
38
|
@tokens = max_tokens
|
39
39
|
@total_messages = 0
|
40
40
|
@conforming_messages = 0
|
41
|
+
@prev_conforming_messages = nil
|
42
|
+
@prev_total_messages = nil
|
43
|
+
@current_window = nil
|
44
|
+
|
41
45
|
@last_refill = Utils::Time.get_time
|
42
46
|
end
|
43
47
|
|
@@ -47,28 +51,17 @@ module Datadog
|
|
47
51
|
# If it does, return +true+ and remove +size+
|
48
52
|
# tokens from the bucket.
|
49
53
|
# If it does not, return +false+ without affecting
|
50
|
-
# the tokens
|
54
|
+
# the tokens from the bucket.
|
51
55
|
#
|
52
56
|
# @return [Boolean] +true+ if message conforms with current bucket limit
|
53
57
|
def allow?(size)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
refill_since_last_message
|
58
|
-
|
59
|
-
increment_total_count
|
60
|
-
|
61
|
-
return false if @tokens < size
|
62
|
-
|
63
|
-
increment_conforming_count
|
64
|
-
|
65
|
-
@tokens -= size
|
66
|
-
|
67
|
-
true
|
58
|
+
allowed = should_allow?(size)
|
59
|
+
update_rate_counts(allowed)
|
60
|
+
allowed
|
68
61
|
end
|
69
62
|
|
70
63
|
# Ratio of 'conformance' per 'total messages' checked
|
71
|
-
#
|
64
|
+
# averaged for the past 2 buckets
|
72
65
|
#
|
73
66
|
# Returns +1.0+ when no messages have been checked yet.
|
74
67
|
#
|
@@ -77,6 +70,20 @@ module Datadog
|
|
77
70
|
return 0.0 if @rate.zero?
|
78
71
|
return 1.0 if @rate < 0 || @total_messages.zero?
|
79
72
|
|
73
|
+
return current_window_rate if @prev_conforming_messages.nil? || @prev_total_messages.nil?
|
74
|
+
|
75
|
+
(@conforming_messages.to_f + @prev_conforming_messages.to_f) / (@total_messages + @prev_total_messages)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Ratio of 'conformance' per 'total messages' checked
|
79
|
+
# on this bucket
|
80
|
+
#
|
81
|
+
# Returns +1.0+ when no messages have been checked yet.
|
82
|
+
#
|
83
|
+
# @return [Float] Conformance ratio, between +[0,1]+
|
84
|
+
def current_window_rate
|
85
|
+
return 1.0 if @total_messages.zero?
|
86
|
+
|
80
87
|
@conforming_messages.to_f / @total_messages
|
81
88
|
end
|
82
89
|
|
@@ -91,6 +98,8 @@ module Datadog
|
|
91
98
|
now = Utils::Time.get_time
|
92
99
|
elapsed = now - @last_refill
|
93
100
|
|
101
|
+
# Update the number of available tokens, but ensure we do not exceed the max
|
102
|
+
# we return the min of tokens + rate*elapsed, or max tokens
|
94
103
|
refill_tokens(@rate * elapsed)
|
95
104
|
|
96
105
|
@last_refill = now
|
@@ -108,6 +117,46 @@ module Datadog
|
|
108
117
|
def increment_conforming_count
|
109
118
|
@conforming_messages += 1
|
110
119
|
end
|
120
|
+
|
121
|
+
def should_allow?(size)
|
122
|
+
# rate limit of 0 blocks everything
|
123
|
+
return false if @rate.zero?
|
124
|
+
|
125
|
+
# negative rate limit disables rate limiting
|
126
|
+
return true if @rate < 0
|
127
|
+
|
128
|
+
refill_since_last_message
|
129
|
+
|
130
|
+
# if tokens < 1 we don't allow?
|
131
|
+
return false if @tokens < size
|
132
|
+
|
133
|
+
@tokens -= size
|
134
|
+
|
135
|
+
true
|
136
|
+
end
|
137
|
+
|
138
|
+
# Sets and Updates the past two 1 second windows for which
|
139
|
+
# the rate limiter must compute it's rate over and updates
|
140
|
+
# the total count, and conforming message count if +allowed+
|
141
|
+
def update_rate_counts(allowed)
|
142
|
+
now = Utils::Time.get_time
|
143
|
+
|
144
|
+
# No tokens have been seen yet, start a new window
|
145
|
+
if @current_window.nil?
|
146
|
+
@current_window = now
|
147
|
+
# If more than 1 second has past since last window, reset
|
148
|
+
elsif now - @current_window >= 1
|
149
|
+
@prev_conforming_messages = @conforming_messages
|
150
|
+
@prev_total_messages = @total_messages
|
151
|
+
@conforming_messages = 0
|
152
|
+
@total_messages = 0
|
153
|
+
@current_window = now
|
154
|
+
end
|
155
|
+
|
156
|
+
increment_conforming_count if allowed
|
157
|
+
|
158
|
+
increment_total_count
|
159
|
+
end
|
111
160
|
end
|
112
161
|
|
113
162
|
# \RateLimiter that accepts all resources,
|
data/lib/ddtrace/tracer.rb
CHANGED
@@ -7,6 +7,7 @@ require 'ddtrace/span'
|
|
7
7
|
require 'ddtrace/context'
|
8
8
|
require 'ddtrace/logger'
|
9
9
|
require 'ddtrace/writer'
|
10
|
+
require 'ddtrace/runtime/identity'
|
10
11
|
require 'ddtrace/sampler'
|
11
12
|
require 'ddtrace/sampling'
|
12
13
|
require 'ddtrace/correlation'
|
@@ -201,6 +202,7 @@ module Datadog
|
|
201
202
|
# root span
|
202
203
|
@sampler.sample!(span)
|
203
204
|
span.set_tag('system.pid', Process.pid)
|
205
|
+
span.set_tag(Datadog::Ext::Runtime::TAG_ID, Datadog::Runtime::Identity.id)
|
204
206
|
|
205
207
|
if ctx && ctx.trace_id
|
206
208
|
span.trace_id = ctx.trace_id
|
@@ -287,8 +289,19 @@ module Datadog
|
|
287
289
|
# and it is user code which should be executed no matter what.
|
288
290
|
# It's not a problem since we re-raise it afterwards so for example a
|
289
291
|
# SignalException::Interrupt would still bubble up.
|
292
|
+
# rubocop:disable Metrics/BlockNesting
|
290
293
|
rescue Exception => e
|
291
|
-
(options[:on_error]
|
294
|
+
if (on_error_handler = options[:on_error]) && on_error_handler.respond_to?(:call)
|
295
|
+
begin
|
296
|
+
on_error_handler.call(span, e)
|
297
|
+
rescue
|
298
|
+
Datadog.logger.debug('Custom on_error handler failed, falling back to default')
|
299
|
+
DEFAULT_ON_ERROR.call(span, e)
|
300
|
+
end
|
301
|
+
else
|
302
|
+
Datadog.logger.debug('Custom on_error handler must be a callable, falling back to default') if on_error_handler
|
303
|
+
DEFAULT_ON_ERROR.call(span, e)
|
304
|
+
end
|
292
305
|
raise e
|
293
306
|
ensure
|
294
307
|
span.finish unless span.nil?
|
data/lib/ddtrace/utils.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'ddtrace/utils/database'
|
2
|
+
require 'ddtrace/utils/forking'
|
2
3
|
|
3
4
|
module Datadog
|
4
5
|
# Utils contains low-level utilities, typically to provide pseudo-random trace IDs.
|
5
6
|
module Utils
|
7
|
+
extend Utils::Forking
|
8
|
+
|
6
9
|
EMPTY_STRING = ''.encode(::Encoding::UTF_8).freeze
|
7
10
|
# We use a custom random number generator because we want no interference
|
8
11
|
# with the default one. Using the default prng, we could break code that
|
@@ -10,23 +13,19 @@ module Datadog
|
|
10
13
|
|
11
14
|
# Return a span id
|
12
15
|
def self.next_id
|
13
|
-
reset!
|
14
|
-
|
15
|
-
@rnd.rand(Datadog::Span::RUBY_MAX_ID)
|
16
|
+
after_fork! { reset! }
|
17
|
+
id_rng.rand(Datadog::Span::RUBY_MAX_ID)
|
16
18
|
end
|
17
19
|
|
18
|
-
def self.
|
19
|
-
@
|
20
|
-
@rnd = Random.new
|
20
|
+
def self.id_rng
|
21
|
+
@id_rng ||= Random.new
|
21
22
|
end
|
22
23
|
|
23
|
-
def self.
|
24
|
-
|
24
|
+
def self.reset!
|
25
|
+
@id_rng = Random.new
|
25
26
|
end
|
26
27
|
|
27
|
-
private_class_method :
|
28
|
-
|
29
|
-
reset!
|
28
|
+
private_class_method :id_rng, :reset!
|
30
29
|
|
31
30
|
def self.truncate(value, size, omission = '...'.freeze)
|
32
31
|
string = value.to_s
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Utils
|
3
|
+
# Helper methods for managing forking behavior
|
4
|
+
module Forking
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:prepend, ClassExtensions) if base.is_a?(Class)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.extended(base)
|
10
|
+
# Explicitly update PID here because there's a case where
|
11
|
+
# the code path that lazily updates the PID may not be exercised
|
12
|
+
# until after a fork occurs, thus causing the event to be missed.
|
13
|
+
# By eagerly setting this, we avoid this scenario.
|
14
|
+
base.update_fork_pid!
|
15
|
+
end
|
16
|
+
|
17
|
+
def after_fork!
|
18
|
+
if forked?
|
19
|
+
yield
|
20
|
+
update_fork_pid!
|
21
|
+
true
|
22
|
+
else
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def forked?
|
28
|
+
Process.pid != fork_pid
|
29
|
+
end
|
30
|
+
|
31
|
+
def update_fork_pid!
|
32
|
+
@fork_pid = Process.pid
|
33
|
+
end
|
34
|
+
|
35
|
+
def fork_pid
|
36
|
+
@fork_pid ||= Process.pid
|
37
|
+
end
|
38
|
+
|
39
|
+
# Adds additional functionality for Classes that implement Forking
|
40
|
+
module ClassExtensions
|
41
|
+
# Addresses an edge case where forking before invoking #update_fork_pid! on the
|
42
|
+
# object will cause forking to not be detected in the fork when it should have.
|
43
|
+
#
|
44
|
+
# This wrapper prevents this by initializing the fork PID when the object is created.
|
45
|
+
def initialize(*args, &block)
|
46
|
+
super
|
47
|
+
update_fork_pid!
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/ddtrace/version.rb
CHANGED
data/lib/ddtrace/writer.rb
CHANGED
@@ -42,13 +42,22 @@ module Datadog
|
|
42
42
|
|
43
43
|
# one worker for traces
|
44
44
|
@worker = nil
|
45
|
+
|
46
|
+
# Once stopped, this writer instance cannot be restarted.
|
47
|
+
# This allow for graceful shutdown, while preventing
|
48
|
+
# the host application from inadvertently start new
|
49
|
+
# threads during shutdown.
|
50
|
+
@stopped = false
|
45
51
|
end
|
46
52
|
|
47
53
|
def start
|
48
54
|
@mutex_after_fork.synchronize do
|
55
|
+
return false if @stopped
|
56
|
+
|
49
57
|
pid = Process.pid
|
50
58
|
return if @worker && pid == @pid
|
51
59
|
@pid = pid
|
60
|
+
|
52
61
|
start_worker
|
53
62
|
true
|
54
63
|
end
|
@@ -67,14 +76,23 @@ module Datadog
|
|
67
76
|
@worker.start
|
68
77
|
end
|
69
78
|
|
79
|
+
# Gracefully shuts down this writer.
|
80
|
+
#
|
81
|
+
# Once stopped methods calls won't fail, but
|
82
|
+
# no internal work will be performed.
|
83
|
+
#
|
84
|
+
# It is not possible to restart a stopped writer instance.
|
70
85
|
def stop
|
71
86
|
@mutex_after_fork.synchronize { stop_worker }
|
72
87
|
end
|
73
88
|
|
74
89
|
def stop_worker
|
90
|
+
@stopped = true
|
91
|
+
|
75
92
|
return if @worker.nil?
|
76
93
|
@worker.stop
|
77
94
|
@worker = nil
|
95
|
+
|
78
96
|
true
|
79
97
|
end
|
80
98
|
|
@@ -136,7 +154,7 @@ module Datadog
|
|
136
154
|
|
137
155
|
if worker_local
|
138
156
|
worker_local.enqueue_trace(trace)
|
139
|
-
|
157
|
+
elsif !@stopped
|
140
158
|
Datadog.logger.debug('Writer either failed to start or was stopped before #write could complete')
|
141
159
|
end
|
142
160
|
end
|
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.43.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: 2020-
|
11
|
+
date: 2020-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -122,20 +122,6 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.1'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: ruby-prof
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.4'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '1.4'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: minitest
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -374,20 +360,6 @@ dependencies:
|
|
374
360
|
- - "~>"
|
375
361
|
- !ruby/object:Gem::Version
|
376
362
|
version: '0.17'
|
377
|
-
- !ruby/object:Gem::Dependency
|
378
|
-
name: warning
|
379
|
-
requirement: !ruby/object:Gem::Requirement
|
380
|
-
requirements:
|
381
|
-
- - "~>"
|
382
|
-
- !ruby/object:Gem::Version
|
383
|
-
version: '1'
|
384
|
-
type: :development
|
385
|
-
prerelease: false
|
386
|
-
version_requirements: !ruby/object:Gem::Requirement
|
387
|
-
requirements:
|
388
|
-
- - "~>"
|
389
|
-
- !ruby/object:Gem::Version
|
390
|
-
version: '1'
|
391
363
|
description: |
|
392
364
|
ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
|
393
365
|
as they flow across web servers, databases and microservices so that developers
|
@@ -411,6 +383,8 @@ files:
|
|
411
383
|
- ".dockerignore"
|
412
384
|
- ".env"
|
413
385
|
- ".github/CODEOWNERS"
|
386
|
+
- ".github/workflows/add-milestone-to-pull-requests.yml"
|
387
|
+
- ".github/workflows/create-next-milestone.yml"
|
414
388
|
- ".gitignore"
|
415
389
|
- ".gitlab-ci.yml"
|
416
390
|
- ".rspec"
|
@@ -529,6 +503,12 @@ files:
|
|
529
503
|
- lib/ddtrace/contrib/configuration/resolver.rb
|
530
504
|
- lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb
|
531
505
|
- lib/ddtrace/contrib/configuration/settings.rb
|
506
|
+
- lib/ddtrace/contrib/cucumber/configuration/settings.rb
|
507
|
+
- lib/ddtrace/contrib/cucumber/ext.rb
|
508
|
+
- lib/ddtrace/contrib/cucumber/formatter.rb
|
509
|
+
- lib/ddtrace/contrib/cucumber/instrumentation.rb
|
510
|
+
- lib/ddtrace/contrib/cucumber/integration.rb
|
511
|
+
- lib/ddtrace/contrib/cucumber/patcher.rb
|
532
512
|
- lib/ddtrace/contrib/dalli/configuration/settings.rb
|
533
513
|
- lib/ddtrace/contrib/dalli/ext.rb
|
534
514
|
- lib/ddtrace/contrib/dalli/instrumentation.rb
|
@@ -685,6 +665,12 @@ files:
|
|
685
665
|
- lib/ddtrace/contrib/rest_client/integration.rb
|
686
666
|
- lib/ddtrace/contrib/rest_client/patcher.rb
|
687
667
|
- lib/ddtrace/contrib/rest_client/request_patch.rb
|
668
|
+
- lib/ddtrace/contrib/rspec/configuration/settings.rb
|
669
|
+
- lib/ddtrace/contrib/rspec/example.rb
|
670
|
+
- lib/ddtrace/contrib/rspec/example_group.rb
|
671
|
+
- lib/ddtrace/contrib/rspec/ext.rb
|
672
|
+
- lib/ddtrace/contrib/rspec/integration.rb
|
673
|
+
- lib/ddtrace/contrib/rspec/patcher.rb
|
688
674
|
- lib/ddtrace/contrib/sequel/configuration/settings.rb
|
689
675
|
- lib/ddtrace/contrib/sequel/database.rb
|
690
676
|
- lib/ddtrace/contrib/sequel/dataset.rb
|
@@ -717,6 +703,7 @@ files:
|
|
717
703
|
- lib/ddtrace/contrib/sneakers/integration.rb
|
718
704
|
- lib/ddtrace/contrib/sneakers/patcher.rb
|
719
705
|
- lib/ddtrace/contrib/sneakers/tracer.rb
|
706
|
+
- lib/ddtrace/contrib/status_code_matcher.rb
|
720
707
|
- lib/ddtrace/contrib/sucker_punch/configuration/settings.rb
|
721
708
|
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
722
709
|
- lib/ddtrace/contrib/sucker_punch/ext.rb
|
@@ -737,12 +724,14 @@ files:
|
|
737
724
|
- lib/ddtrace/event.rb
|
738
725
|
- lib/ddtrace/ext/analytics.rb
|
739
726
|
- lib/ddtrace/ext/app_types.rb
|
727
|
+
- lib/ddtrace/ext/ci.rb
|
740
728
|
- lib/ddtrace/ext/correlation.rb
|
741
729
|
- lib/ddtrace/ext/diagnostics.rb
|
742
730
|
- lib/ddtrace/ext/distributed.rb
|
743
731
|
- lib/ddtrace/ext/environment.rb
|
744
732
|
- lib/ddtrace/ext/errors.rb
|
745
733
|
- lib/ddtrace/ext/forced_tracing.rb
|
734
|
+
- lib/ddtrace/ext/git.rb
|
746
735
|
- lib/ddtrace/ext/http.rb
|
747
736
|
- lib/ddtrace/ext/integration.rb
|
748
737
|
- lib/ddtrace/ext/manual_tracing.rb
|
@@ -752,6 +741,7 @@ files:
|
|
752
741
|
- lib/ddtrace/ext/runtime.rb
|
753
742
|
- lib/ddtrace/ext/sampling.rb
|
754
743
|
- lib/ddtrace/ext/sql.rb
|
744
|
+
- lib/ddtrace/ext/test.rb
|
755
745
|
- lib/ddtrace/ext/transport.rb
|
756
746
|
- lib/ddtrace/forced_tracing.rb
|
757
747
|
- lib/ddtrace/logger.rb
|
@@ -830,6 +820,7 @@ files:
|
|
830
820
|
- lib/ddtrace/transport/traces.rb
|
831
821
|
- lib/ddtrace/utils.rb
|
832
822
|
- lib/ddtrace/utils/database.rb
|
823
|
+
- lib/ddtrace/utils/forking.rb
|
833
824
|
- lib/ddtrace/utils/time.rb
|
834
825
|
- lib/ddtrace/vendor/active_record/connection_specification.rb
|
835
826
|
- lib/ddtrace/version.rb
|
@@ -863,7 +854,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
863
854
|
- !ruby/object:Gem::Version
|
864
855
|
version: 2.0.0
|
865
856
|
requirements: []
|
866
|
-
|
857
|
+
rubyforge_project:
|
858
|
+
rubygems_version: 2.2.5
|
867
859
|
signing_key:
|
868
860
|
specification_version: 4
|
869
861
|
summary: Datadog tracing code for your Ruby applications
|