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
@@ -2,6 +2,41 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.43.0] - 2020-11-18
6
+
7
+ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.43.0
8
+
9
+ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.42.0...v0.43.0
10
+
11
+ ### Added
12
+
13
+ - Background job custom error handlers (#1212) (@norbertnytko)
14
+ - Add "multi" methods instrumentation for Rails cache (#1217) (@michaelkl)
15
+ - Support custom error status codes for Grape (#1238)
16
+ - Cucumber integration (#1216)
17
+ - RSpec integration (#1234)
18
+ - Validation to `:on_error` argument on `Datadog::Tracer#trace` (#1220)
19
+
20
+ ### Changed
21
+
22
+ - Update `TokenBucket#effective_rate` calculation (#1236)
23
+
24
+ ### Fixed
25
+
26
+ - Avoid writer reinitialization during shutdown (#1235, #1248)
27
+ - Fix configuration multiplexing (#1204, #1227)
28
+ - Fix misnamed B3 distributed headers (#1226, #1229)
29
+ - Correct span type for AWS SDK (#1233)
30
+ - Correct span type for internal Pin on HTTP clients (#1239)
31
+ - Reset trace context after fork (#1225)
32
+
33
+ ### Refactored
34
+
35
+ - Improvements to test suite (#1232, #1244)
36
+ - Improvements to documentation (#1243, #1218) (@cjford)
37
+
38
+ ### Removed
39
+
5
40
  ## [0.42.0] - 2020-10-21
6
41
 
7
42
  Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.42.0
@@ -1458,6 +1493,7 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
1458
1493
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
1459
1494
 
1460
1495
  [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v0.41.0...master
1496
+ [0.43.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.42.0...v0.43.0
1461
1497
  [0.41.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.40.0...v0.41.0
1462
1498
  [0.40.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.39.0...v0.40.0
1463
1499
  [0.39.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.38.0...v0.39.0
@@ -76,7 +76,7 @@ We also recommend that you share in your description:
76
76
 
77
77
  Pull requests will be reviewed and added to [our Community project](https://github.com/DataDog/dd-trace-rb/projects/2).
78
78
 
79
- For more information on common topics such as debugging locally, or how to write new integrations, check out [our development guide](https://github.com/DataDog/dd-trace-rb/docs/DevelopmentGuide.md). If at any point you have a question or need assistance with your pull request, feel free to mention a project member! We're always happy to help contributors with their pull requests.
79
+ For more information on common topics such as debugging locally, or how to write new integrations, check out [our development guide](https://github.com/DataDog/dd-trace-rb/blob/master/docs/DevelopmentGuide.md). If at any point you have a question or need assistance with your pull request, feel free to mention a project member! We're always happy to help contributors with their pull requests.
80
80
 
81
81
  ## Final word
82
82
 
data/Rakefile CHANGED
@@ -85,6 +85,7 @@ namespace :spec do
85
85
  :active_support,
86
86
  :aws,
87
87
  :concurrent_ruby,
88
+ :cucumber,
88
89
  :dalli,
89
90
  :delayed_job,
90
91
  :elasticsearch,
@@ -107,6 +108,7 @@ namespace :spec do
107
108
  :redis,
108
109
  :resque,
109
110
  :rest_client,
111
+ :rspec,
110
112
  :sequel,
111
113
  :shoryuken,
112
114
  :sidekiq,
@@ -234,6 +236,7 @@ task :ci do
234
236
  declare 'bundle exec appraisal contrib-old rake spec:redis'
235
237
  declare 'bundle exec appraisal contrib-old rake spec:resque'
236
238
  declare 'bundle exec appraisal contrib-old rake spec:rest_client'
239
+ declare 'bundle exec appraisal contrib-old rake spec:rspec'
237
240
  declare 'bundle exec appraisal contrib-old rake spec:sequel'
238
241
  declare 'bundle exec appraisal contrib-old rake spec:sidekiq'
239
242
  declare 'bundle exec appraisal contrib-old rake spec:sinatra'
@@ -281,6 +284,7 @@ task :ci do
281
284
  declare 'bundle exec appraisal contrib-old rake spec:faraday'
282
285
  declare 'bundle exec appraisal contrib-old rake spec:http'
283
286
  declare 'bundle exec appraisal contrib-old rake spec:httprb'
287
+ declare 'bundle exec appraisal contrib-old rake spec:kafka'
284
288
  declare 'bundle exec appraisal contrib-old rake spec:mongodb'
285
289
  declare 'bundle exec appraisal contrib-old rake spec:mysql2'
286
290
  declare 'bundle exec appraisal contrib-old rake spec:presto'
@@ -289,6 +293,7 @@ task :ci do
289
293
  declare 'bundle exec appraisal contrib-old rake spec:redis'
290
294
  declare 'bundle exec appraisal contrib-old rake spec:resque'
291
295
  declare 'bundle exec appraisal contrib-old rake spec:rest_client'
296
+ declare 'bundle exec appraisal contrib-old rake spec:rspec'
292
297
  declare 'bundle exec appraisal contrib-old rake spec:sequel'
293
298
  declare 'bundle exec appraisal contrib-old rake spec:sidekiq'
294
299
  declare 'bundle exec appraisal contrib-old rake spec:sinatra'
@@ -346,6 +351,7 @@ task :ci do
346
351
  declare 'bundle exec appraisal contrib rake spec:grpc'
347
352
  declare 'bundle exec appraisal contrib rake spec:http'
348
353
  declare 'bundle exec appraisal contrib rake spec:httprb'
354
+ declare 'bundle exec appraisal contrib rake spec:kafka'
349
355
  declare 'bundle exec appraisal contrib rake spec:mongodb'
350
356
  declare 'bundle exec appraisal contrib rake spec:mysql2'
351
357
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -356,6 +362,7 @@ task :ci do
356
362
  declare 'bundle exec appraisal contrib rake spec:redis'
357
363
  declare 'bundle exec appraisal contrib rake spec:resque'
358
364
  declare 'bundle exec appraisal contrib rake spec:rest_client'
365
+ declare 'bundle exec appraisal contrib rake spec:rspec'
359
366
  declare 'bundle exec appraisal contrib rake spec:sequel'
360
367
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
361
368
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -419,6 +426,7 @@ task :ci do
419
426
  declare 'bundle exec appraisal contrib rake spec:grpc'
420
427
  declare 'bundle exec appraisal contrib rake spec:http'
421
428
  declare 'bundle exec appraisal contrib rake spec:httprb'
429
+ declare 'bundle exec appraisal contrib rake spec:kafka'
422
430
  declare 'bundle exec appraisal contrib rake spec:mongodb'
423
431
  declare 'bundle exec appraisal contrib rake spec:mysql2'
424
432
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -429,6 +437,7 @@ task :ci do
429
437
  declare 'bundle exec appraisal contrib rake spec:redis'
430
438
  declare 'bundle exec appraisal contrib rake spec:resque'
431
439
  declare 'bundle exec appraisal contrib rake spec:rest_client'
440
+ declare 'bundle exec appraisal contrib rake spec:rspec'
432
441
  declare 'bundle exec appraisal contrib rake spec:sequel'
433
442
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
434
443
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -499,6 +508,7 @@ task :ci do
499
508
  declare 'bundle exec appraisal contrib rake spec:grpc'
500
509
  declare 'bundle exec appraisal contrib rake spec:http'
501
510
  declare 'bundle exec appraisal contrib rake spec:httprb'
511
+ declare 'bundle exec appraisal contrib rake spec:kafka'
502
512
  declare 'bundle exec appraisal contrib rake spec:mongodb'
503
513
  declare 'bundle exec appraisal contrib rake spec:mysql2'
504
514
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -509,6 +519,7 @@ task :ci do
509
519
  declare 'bundle exec appraisal contrib rake spec:redis'
510
520
  declare 'bundle exec appraisal contrib rake spec:resque'
511
521
  declare 'bundle exec appraisal contrib rake spec:rest_client'
522
+ declare 'bundle exec appraisal contrib rake spec:rspec'
512
523
  declare 'bundle exec appraisal contrib rake spec:sequel'
513
524
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
514
525
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -533,6 +544,10 @@ task :ci do
533
544
  # explicitly test resque-2x compatability
534
545
  declare 'bundle exec appraisal resque2-redis3 rake spec:resque'
535
546
  declare 'bundle exec appraisal resque2-redis4 rake spec:resque'
547
+
548
+ # explicitly test cucumber compatibility
549
+ declare 'bundle exec appraisal cucumber3 rake spec:cucumber'
550
+ declare 'bundle exec appraisal cucumber4 rake spec:cucumber'
536
551
  end
537
552
  elsif Gem::Version.new('2.5.0') <= Gem::Version.new(RUBY_VERSION) \
538
553
  && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.6.0')
@@ -551,6 +566,7 @@ task :ci do
551
566
  declare 'bundle exec appraisal contrib rake spec:active_support'
552
567
  declare 'bundle exec appraisal contrib rake spec:aws'
553
568
  declare 'bundle exec appraisal contrib rake spec:concurrent_ruby'
569
+ declare 'bundle exec appraisal contrib rake spec:cucumber'
554
570
  declare 'bundle exec appraisal contrib rake spec:dalli'
555
571
  declare 'bundle exec appraisal contrib rake spec:delayed_job'
556
572
  declare 'bundle exec appraisal contrib rake spec:elasticsearch'
@@ -562,6 +578,7 @@ task :ci do
562
578
  declare 'bundle exec appraisal contrib rake spec:grpc' if RUBY_PLATFORM != 'java' # protobuf not supported
563
579
  declare 'bundle exec appraisal contrib rake spec:http'
564
580
  declare 'bundle exec appraisal contrib rake spec:httprb'
581
+ declare 'bundle exec appraisal contrib rake spec:kafka'
565
582
  declare 'bundle exec appraisal contrib rake spec:mongodb'
566
583
  declare 'bundle exec appraisal contrib rake spec:mysql2' if RUBY_PLATFORM != 'java' # built-in jdbc is used instead
567
584
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -572,6 +589,7 @@ task :ci do
572
589
  declare 'bundle exec appraisal contrib rake spec:redis'
573
590
  declare 'bundle exec appraisal contrib rake spec:resque'
574
591
  declare 'bundle exec appraisal contrib rake spec:rest_client'
592
+ declare 'bundle exec appraisal contrib rake spec:rspec'
575
593
  declare 'bundle exec appraisal contrib rake spec:sequel'
576
594
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
577
595
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -606,6 +624,11 @@ task :ci do
606
624
  # explicitly test resque-2x compatability
607
625
  declare 'bundle exec appraisal resque2-redis3 rake spec:resque'
608
626
  declare 'bundle exec appraisal resque2-redis4 rake spec:resque'
627
+
628
+ # explicitly test cucumber compatibility
629
+ declare 'bundle exec appraisal cucumber3 rake spec:cucumber'
630
+ declare 'bundle exec appraisal cucumber4 rake spec:cucumber'
631
+ declare 'bundle exec appraisal cucumber5 rake spec:cucumber'
609
632
  elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION) \
610
633
  && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
611
634
  # Main library
@@ -625,6 +648,7 @@ task :ci do
625
648
  declare 'bundle exec appraisal contrib rake spec:active_support'
626
649
  declare 'bundle exec appraisal contrib rake spec:aws'
627
650
  declare 'bundle exec appraisal contrib rake spec:concurrent_ruby'
651
+ declare 'bundle exec appraisal contrib rake spec:cucumber'
628
652
  declare 'bundle exec appraisal contrib rake spec:dalli'
629
653
  declare 'bundle exec appraisal contrib rake spec:delayed_job'
630
654
  declare 'bundle exec appraisal contrib rake spec:elasticsearch'
@@ -636,6 +660,7 @@ task :ci do
636
660
  declare 'bundle exec appraisal contrib rake spec:grpc'
637
661
  declare 'bundle exec appraisal contrib rake spec:http'
638
662
  declare 'bundle exec appraisal contrib rake spec:httprb'
663
+ declare 'bundle exec appraisal contrib rake spec:kafka'
639
664
  declare 'bundle exec appraisal contrib rake spec:mongodb'
640
665
  declare 'bundle exec appraisal contrib rake spec:mysql2'
641
666
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -646,6 +671,7 @@ task :ci do
646
671
  declare 'bundle exec appraisal contrib rake spec:redis'
647
672
  declare 'bundle exec appraisal contrib rake spec:resque'
648
673
  declare 'bundle exec appraisal contrib rake spec:rest_client'
674
+ declare 'bundle exec appraisal contrib rake spec:rspec'
649
675
  declare 'bundle exec appraisal contrib rake spec:sequel'
650
676
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
651
677
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -680,6 +706,11 @@ task :ci do
680
706
  # explicitly test resque-2x compatability
681
707
  declare 'bundle exec appraisal resque2-redis3 rake spec:resque'
682
708
  declare 'bundle exec appraisal resque2-redis4 rake spec:resque'
709
+
710
+ # explicitly test cucumber compatibility
711
+ declare 'bundle exec appraisal cucumber3 rake spec:cucumber'
712
+ declare 'bundle exec appraisal cucumber4 rake spec:cucumber'
713
+ declare 'bundle exec appraisal cucumber5 rake spec:cucumber'
683
714
  end
684
715
  elsif Gem::Version.new('2.7.0') <= Gem::Version.new(RUBY_VERSION)
685
716
  # Main library
@@ -699,6 +730,7 @@ task :ci do
699
730
  declare 'bundle exec appraisal contrib rake spec:active_support'
700
731
  declare 'bundle exec appraisal contrib rake spec:aws'
701
732
  declare 'bundle exec appraisal contrib rake spec:concurrent_ruby'
733
+ declare 'bundle exec appraisal contrib rake spec:cucumber'
702
734
  declare 'bundle exec appraisal contrib rake spec:dalli'
703
735
  declare 'bundle exec appraisal contrib rake spec:delayed_job'
704
736
  declare 'bundle exec appraisal contrib rake spec:elasticsearch'
@@ -710,6 +742,7 @@ task :ci do
710
742
  declare 'bundle exec appraisal contrib rake spec:grpc'
711
743
  declare 'bundle exec appraisal contrib rake spec:http'
712
744
  declare 'bundle exec appraisal contrib rake spec:httprb'
745
+ declare 'bundle exec appraisal contrib rake spec:kafka'
713
746
  declare 'bundle exec appraisal contrib rake spec:mongodb'
714
747
  declare 'bundle exec appraisal contrib rake spec:mysql2'
715
748
  declare 'bundle exec appraisal contrib rake spec:presto'
@@ -720,6 +753,7 @@ task :ci do
720
753
  declare 'bundle exec appraisal contrib rake spec:redis'
721
754
  declare 'bundle exec appraisal contrib rake spec:resque'
722
755
  declare 'bundle exec appraisal contrib rake spec:rest_client'
756
+ declare 'bundle exec appraisal contrib rake spec:rspec'
723
757
  declare 'bundle exec appraisal contrib rake spec:sequel'
724
758
  declare 'bundle exec appraisal contrib rake spec:shoryuken'
725
759
  declare 'bundle exec appraisal contrib rake spec:sidekiq'
@@ -752,6 +786,11 @@ task :ci do
752
786
  # explicitly test resque-2x compatability
753
787
  declare 'bundle exec appraisal resque2-redis3 rake spec:resque'
754
788
  declare 'bundle exec appraisal resque2-redis4 rake spec:resque'
789
+
790
+ # explicitly test cucumber compatibility
791
+ declare 'bundle exec appraisal cucumber3 rake spec:cucumber'
792
+ declare 'bundle exec appraisal cucumber4 rake spec:cucumber'
793
+ declare 'bundle exec appraisal cucumber5 rake spec:cucumber'
755
794
  end
756
795
  end
757
796
  end
@@ -151,9 +151,9 @@ To get started quickly, it's perfectly fine to copy-paste an existing integratio
151
151
 
152
152
  Once you have it working in your application, you can [add unit tests](#writing-tests), [run them locally](#running-tests), and [check for code quality](#checking-code-quality) using Docker Compose.
153
153
 
154
- Then [open a pull request](https://github.com/DataDog/dd-trace-rb/CONTRIBUTING.md#have-a-patch) and be sure to add the following to the description:
154
+ Then [open a pull request](../CONTRIBUTING.md#have-a-patch) and be sure to add the following to the description:
155
155
 
156
- - [Documentation](https://github.com/DataDog/dd-trace-rb/docs/GettingStarted.md) for the integration, including versions supported.
156
+ - [Documentation](./GettingStarted.md) for the integration, including versions supported.
157
157
  - Links to the repository/website of the library being integrated
158
158
  - Screenshots showing a sample trace
159
159
  - Any additional code snippets, sample apps, benchmarks, or other resources that demonstrate its implementation are a huge plus!
@@ -34,6 +34,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
34
34
  - [Active Support](#active-support)
35
35
  - [AWS](#aws)
36
36
  - [Concurrent Ruby](#concurrent-ruby)
37
+ - [Cucumber](#cucumber)
37
38
  - [Dalli](#dalli)
38
39
  - [DelayedJob](#delayedjob)
39
40
  - [Elasticsearch](#elasticsearch)
@@ -338,6 +339,7 @@ For a list of available integrations, and their configuration options, please re
338
339
  | Active Support | `active_support` | `>= 3.0` | `>= 3.0` | *[Link](#active-support)* | *[Link](https://github.com/rails/rails/tree/master/activesupport)* |
339
340
  | AWS | `aws` | `>= 2.0` | `>= 2.0` | *[Link](#aws)* | *[Link](https://github.com/aws/aws-sdk-ruby)* |
340
341
  | Concurrent Ruby | `concurrent_ruby` | `>= 0.9` | `>= 0.9` | *[Link](#concurrent-ruby)* | *[Link](https://github.com/ruby-concurrency/concurrent-ruby)* |
342
+ | Cucumber | `cucumber` | `>= 3.0` | `>= 1.7.16` | *[Link](#cucumber)* | *[Link](https://github.com/cucumber/cucumber-ruby)* |
341
343
  | Dalli | `dalli` | `>= 2.0` | `>= 2.0` | *[Link](#dalli)* | *[Link](https://github.com/petergoldstein/dalli)* |
342
344
  | DelayedJob | `delayed_job` | `>= 4.1` | `>= 4.1` | *[Link](#delayedjob)* | *[Link](https://github.com/collectiveidea/delayed_job)* |
343
345
  | Elasticsearch | `elasticsearch` | `>= 1.0` | `>= 1.0` | *[Link](#elasticsearch)* | *[Link](https://github.com/elastic/elasticsearch-ruby)* |
@@ -590,6 +592,42 @@ Where `options` is an optional `Hash` that accepts the following parameters:
590
592
  | --- | ----------- | ------- |
591
593
  | `service_name` | Service name used for `concurrent-ruby` instrumentation | `'concurrent-ruby'` |
592
594
 
595
+ ### Cucumber
596
+
597
+ Cucumber integration will trace all executions of scenarios and steps when using `cucumber` framework.
598
+
599
+ To activate your integration, use the `Datadog.configure` method:
600
+
601
+ ```ruby
602
+ require 'cucumber'
603
+ require 'ddtrace'
604
+
605
+ # Configure default Cucumber integration
606
+ Datadog.configure do |c|
607
+ c.use :cucumber, options
608
+ end
609
+
610
+ # Example of how to attach tags from scenario to active span
611
+ Around do |scenario, block|
612
+ active_span = Datadog.configuration[:cucumber][:tracer].active_span
613
+ unless active_span.nil?
614
+ scenario.tags.filter { |tag| tag.include? ':' }.each do |tag|
615
+ active_span.set_tag(*tag.name.split(':', 2))
616
+ end
617
+ end
618
+ block.call
619
+ end
620
+ ```
621
+
622
+ Where `options` is an optional `Hash` that accepts the following parameters:
623
+
624
+ | Key | Description | Default |
625
+ | --- | ----------- | ------- |
626
+ | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `true` |
627
+ | `enabled` | Defines whether Cucumber tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
628
+ | `service_name` | Service name used for `cucumber` instrumentation. | `'cucumber'` |
629
+ | `operation_name` | Operation name used for `cucumber` instrumentation. Useful if you want rename automatic trace metrics e.g. `trace.#{operation_name}.errors`. | `'cucumber.test'` |
630
+
593
631
  ### Dalli
594
632
 
595
633
  Dalli integration will trace all calls to your `memcached` server:
@@ -636,6 +674,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
636
674
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
637
675
  | `service_name` | Service name used for `DelayedJob` instrumentation | `'delayed_job'` |
638
676
  | `client_service_name` | Service name used for client-side `DelayedJob` instrumentation | `'delayed_job-client'` |
677
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
639
678
 
640
679
  ### Elasticsearch
641
680
 
@@ -816,6 +855,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
816
855
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
817
856
  | `enabled` | Defines whether Grape should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
818
857
  | `service_name` | Service name used for `grape` instrumentation | `'grape'` |
858
+ | `error_statuses`| Defines a status code or range of status codes which should be marked as errors. `'404,405,500-599'` or `[404,405,'500-599']` | `nil` |
819
859
 
820
860
  ### GraphQL
821
861
 
@@ -1136,6 +1176,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1136
1176
  | `service_name` | Service name used for `que` instrumentation | `'que'` |
1137
1177
  | `tag_args` | Enable tagging of a job's args field. `true` for on, `false` for off. | `false` |
1138
1178
  | `tag_data` | Enable tagging of a job's data field. `true` for on, `false` for off. | `false` |
1179
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
1139
1180
 
1140
1181
  ### Racecar
1141
1182
 
@@ -1436,6 +1477,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1436
1477
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
1437
1478
  | `service_name` | Service name used for `resque` instrumentation | `'resque'` |
1438
1479
  | `workers` | An array including all worker classes you want to trace (e.g. `[MyJob]`) | `[]` |
1480
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
1439
1481
 
1440
1482
  ### Rest Client
1441
1483
 
@@ -1458,6 +1500,31 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1458
1500
  | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
1459
1501
  | `service_name` | Service name for `rest_client` instrumentation. | `'rest_client'` |
1460
1502
 
1503
+ ## RSpec
1504
+
1505
+ RSpec integration will trace all executions of example groups and examples when using `rspec` test framework.
1506
+
1507
+ To activate your integration, use the `Datadog.configure` method:
1508
+
1509
+ ```ruby
1510
+ require 'rspec'
1511
+ require 'ddtrace'
1512
+
1513
+ # Configure default RSpec integration
1514
+ Datadog.configure do |c|
1515
+ c.use :rspec, options
1516
+ end
1517
+ ```
1518
+
1519
+ Where `options` is an optional `Hash` that accepts the following parameters:
1520
+
1521
+ | Key | Description | Default |
1522
+ | --- | ----------- | ------- |
1523
+ | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `true` |
1524
+ | `enabled` | Defines whether RSpec tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
1525
+ | `service_name` | Service name used for `rspec` instrumentation. | `'rspec'` |
1526
+ | `operation_name` | Operation name used for `rspec` instrumentation. Useful if you want rename automatic trace metrics e.g. `trace.#{operation_name}.errors`. | `'rspec.example'` |
1527
+
1461
1528
  ### Sequel
1462
1529
 
1463
1530
  The Sequel integration traces queries made to your database.
@@ -1526,6 +1593,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1526
1593
  | --- | ----------- | ------- |
1527
1594
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1528
1595
  | `service_name` | Service name used for `shoryuken` instrumentation | `'shoryuken'` |
1596
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
1529
1597
 
1530
1598
  ### Sidekiq
1531
1599
 
@@ -1549,6 +1617,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1549
1617
  | `client_service_name` | Service name used for client-side `sidekiq` instrumentation | `'sidekiq-client'` |
1550
1618
  | `service_name` | Service name used for server-side `sidekiq` instrumentation | `'sidekiq'` |
1551
1619
  | `tag_args` | Enable tagging of job arguments. `true` for on, `false` for off. | `false` |
1620
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
1552
1621
 
1553
1622
  ### Sinatra
1554
1623
 
@@ -1636,6 +1705,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1636
1705
  | `enabled` | Defines whether Sneakers should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
1637
1706
  | `service_name` | Service name used for `sneakers` instrumentation | `'sneakers'` |
1638
1707
  | `tag_body` | Enable tagging of job message. `true` for on, `false` for off. | `false` |
1708
+ | `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
1639
1709
 
1640
1710
  ### Sucker Punch
1641
1711
 
@@ -2050,7 +2120,7 @@ _Note:_ For `lograge` users who have also defined `lograge.custom_options` in an
2050
2120
 
2051
2121
  ##### Manual (Lograge)
2052
2122
 
2053
- After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
2123
+ After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
2054
2124
 
2055
2125
  ```ruby
2056
2126
  config.lograge.custom_options = lambda do |event|
@@ -45,6 +45,7 @@ require 'ddtrace/contrib/active_record/integration'
45
45
  require 'ddtrace/contrib/active_support/integration'
46
46
  require 'ddtrace/contrib/aws/integration'
47
47
  require 'ddtrace/contrib/concurrent_ruby/integration'
48
+ require 'ddtrace/contrib/cucumber/integration'
48
49
  require 'ddtrace/contrib/dalli/integration'
49
50
  require 'ddtrace/contrib/delayed_job/integration'
50
51
  require 'ddtrace/contrib/elasticsearch/integration'
@@ -69,6 +70,7 @@ require 'ddtrace/contrib/rake/integration'
69
70
  require 'ddtrace/contrib/redis/integration'
70
71
  require 'ddtrace/contrib/resque/integration'
71
72
  require 'ddtrace/contrib/rest_client/integration'
73
+ require 'ddtrace/contrib/rspec/integration'
72
74
  require 'ddtrace/contrib/sequel/integration'
73
75
  require 'ddtrace/contrib/shoryuken/integration'
74
76
  require 'ddtrace/contrib/sidekiq/integration'
@@ -55,11 +55,27 @@ module Datadog
55
55
  end
56
56
  end
57
57
 
58
+ # Gracefully shuts down all components.
59
+ #
60
+ # Components will still respond to method calls as usual,
61
+ # but might not internally perform their work after shutdown.
62
+ #
63
+ # This avoids errors being raised across the host application
64
+ # during shutdown, while allowing for graceful decommission of resources.
65
+ #
66
+ # Components won't be automatically reinitialized after a shutdown.
58
67
  def shutdown!
59
- if instance_variable_defined?(:@components) && @components
60
- components.shutdown!
61
- @components = nil
62
- end
68
+ components.shutdown! if instance_variable_defined?(:@components) && @components
69
+ end
70
+
71
+ # Gracefully shuts down the tracer and disposes of component references,
72
+ # allowing execution to start anew.
73
+ #
74
+ # In contrast with +#shutdown!+, components will be automatically
75
+ # reinitialized after a reset.
76
+ def reset!
77
+ shutdown!
78
+ @components = nil
63
79
  end
64
80
 
65
81
  protected