ddtrace 0.42.0 → 0.43.0

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.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
  3. data/.github/workflows/create-next-milestone.yml +20 -0
  4. data/.simplecov +1 -1
  5. data/Appraisals +160 -132
  6. data/CHANGELOG.md +36 -0
  7. data/CONTRIBUTING.md +1 -1
  8. data/Rakefile +39 -0
  9. data/docs/DevelopmentGuide.md +2 -2
  10. data/docs/GettingStarted.md +71 -1
  11. data/lib/ddtrace.rb +2 -0
  12. data/lib/ddtrace/configuration.rb +20 -4
  13. data/lib/ddtrace/configuration/settings.rb +4 -2
  14. data/lib/ddtrace/context.rb +18 -0
  15. data/lib/ddtrace/context_provider.rb +12 -1
  16. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
  17. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
  18. data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
  19. data/lib/ddtrace/contrib/active_support/notifications/event.rb +10 -0
  20. data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
  21. data/lib/ddtrace/contrib/aws/patcher.rb +0 -1
  22. data/lib/ddtrace/contrib/configurable.rb +2 -0
  23. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +4 -5
  24. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +38 -0
  25. data/lib/ddtrace/contrib/cucumber/ext.rb +19 -0
  26. data/lib/ddtrace/contrib/cucumber/formatter.rb +104 -0
  27. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
  28. data/lib/ddtrace/contrib/cucumber/integration.rb +40 -0
  29. data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
  30. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
  31. data/lib/ddtrace/contrib/delayed_job/plugin.rb +3 -1
  32. data/lib/ddtrace/contrib/excon/middleware.rb +7 -1
  33. data/lib/ddtrace/contrib/faraday/patcher.rb +1 -1
  34. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
  35. data/lib/ddtrace/contrib/grape/endpoint.rb +19 -4
  36. data/lib/ddtrace/contrib/http/instrumentation.rb +2 -2
  37. data/lib/ddtrace/contrib/httprb/instrumentation.rb +2 -2
  38. data/lib/ddtrace/contrib/kafka/event.rb +1 -1
  39. data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
  40. data/lib/ddtrace/contrib/que/tracer.rb +2 -1
  41. data/lib/ddtrace/contrib/rails/patcher.rb +5 -2
  42. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
  43. data/lib/ddtrace/contrib/resque/resque_job.rb +1 -1
  44. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +38 -0
  45. data/lib/ddtrace/contrib/rspec/example.rb +61 -0
  46. data/lib/ddtrace/contrib/rspec/example_group.rb +61 -0
  47. data/lib/ddtrace/contrib/rspec/ext.rb +19 -0
  48. data/lib/ddtrace/contrib/rspec/integration.rb +41 -0
  49. data/lib/ddtrace/contrib/rspec/patcher.rb +25 -0
  50. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  51. data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -1
  52. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
  53. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -1
  54. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
  55. data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -20
  56. data/lib/ddtrace/contrib/status_code_matcher.rb +67 -0
  57. data/lib/ddtrace/ext/app_types.rb +1 -0
  58. data/lib/ddtrace/ext/ci.rb +265 -0
  59. data/lib/ddtrace/ext/distributed.rb +8 -2
  60. data/lib/ddtrace/ext/git.rb +12 -0
  61. data/lib/ddtrace/ext/runtime.rb +1 -0
  62. data/lib/ddtrace/ext/test.rb +24 -0
  63. data/lib/ddtrace/runtime/identity.rb +4 -5
  64. data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
  65. data/lib/ddtrace/tracer.rb +14 -1
  66. data/lib/ddtrace/utils.rb +10 -11
  67. data/lib/ddtrace/utils/forking.rb +52 -0
  68. data/lib/ddtrace/version.rb +1 -1
  69. data/lib/ddtrace/writer.rb +19 -1
  70. 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
- PROPAGATION_INJECT_STYLE_ENV = 'DD_PROPAGATION_INJECT_STYLE'.freeze
24
- PROPAGATION_EXTRACT_STYLE_ENV = 'DD_PROPAGATION_EXTRACT_STYLE'.freeze
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
@@ -10,6 +10,7 @@ module Datadog
10
10
  RUBY_ENGINE = ::RUBY_ENGINE # e.g. 'ruby', 'jruby', 'truffleruby'
11
11
  TRACER_VERSION = Datadog::VERSION::STRING
12
12
 
13
+ TAG_ID = 'runtime-id'.freeze
13
14
  TAG_LANG = 'language'.freeze
14
15
 
15
16
  # Metrics
@@ -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
- if Process.pid != @pid
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 form the bucket.
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
- return false if @rate.zero?
55
- return true if @rate < 0
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
- # on this bucket.
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,
@@ -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] || DEFAULT_ON_ERROR).call(span, e)
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?
@@ -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! if was_forked?
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.reset!
19
- @pid = Process.pid
20
- @rnd = Random.new
20
+ def self.id_rng
21
+ @id_rng ||= Random.new
21
22
  end
22
23
 
23
- def self.was_forked?
24
- Process.pid != @pid
24
+ def self.reset!
25
+ @id_rng = Random.new
25
26
  end
26
27
 
27
- private_class_method :reset!, :was_forked?
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
@@ -1,7 +1,7 @@
1
1
  module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 42
4
+ MINOR = 43
5
5
  PATCH = 0
6
6
  PRE = nil
7
7
 
@@ -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
- else
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.42.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-10-21 00:00:00.000000000 Z
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
- rubygems_version: 3.0.3
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