ddtrace 0.42.0 → 0.43.0

Sign up to get free protection for your applications and to get access to all the features.
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