ddtrace 0.33.1 → 0.34.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -0
  3. data/Appraisals +29 -5
  4. data/CHANGELOG.md +23 -1
  5. data/Rakefile +72 -11
  6. data/docker-compose.yml +20 -0
  7. data/docs/GettingStarted.md +63 -10
  8. data/lib/ddtrace.rb +4 -0
  9. data/lib/ddtrace/analytics.rb +7 -0
  10. data/lib/ddtrace/configuration/base.rb +2 -1
  11. data/lib/ddtrace/configuration/option.rb +9 -1
  12. data/lib/ddtrace/configuration/option_definition.rb +0 -4
  13. data/lib/ddtrace/configuration/settings.rb +78 -23
  14. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +3 -0
  15. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +4 -0
  16. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +3 -0
  17. data/lib/ddtrace/contrib/action_view/events/render_template.rb +3 -0
  18. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +3 -0
  19. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +6 -0
  20. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
  21. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +3 -0
  22. data/lib/ddtrace/contrib/analytics.rb +4 -0
  23. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
  24. data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
  25. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  26. data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
  27. data/lib/ddtrace/contrib/ethon/integration.rb +5 -0
  28. data/lib/ddtrace/contrib/excon/integration.rb +5 -0
  29. data/lib/ddtrace/contrib/excon/middleware.rb +12 -9
  30. data/lib/ddtrace/contrib/faraday/integration.rb +5 -0
  31. data/lib/ddtrace/contrib/faraday/middleware.rb +20 -32
  32. data/lib/ddtrace/contrib/faraday/patcher.rb +6 -1
  33. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  34. data/lib/ddtrace/contrib/grape/endpoint.rb +9 -0
  35. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +3 -0
  36. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  37. data/lib/ddtrace/contrib/http/instrumentation.rb +65 -21
  38. data/lib/ddtrace/contrib/http/integration.rb +5 -0
  39. data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
  40. data/lib/ddtrace/contrib/presto/configuration/settings.rb +8 -6
  41. data/lib/ddtrace/contrib/presto/instrumentation.rb +8 -8
  42. data/lib/ddtrace/contrib/racecar/event.rb +4 -0
  43. data/lib/ddtrace/contrib/rack/middlewares.rb +4 -0
  44. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -0
  45. data/lib/ddtrace/contrib/resque/resque_job.rb +4 -0
  46. data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
  47. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -0
  48. data/lib/ddtrace/contrib/sinatra/tracer.rb +3 -0
  49. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -0
  50. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
  51. data/lib/ddtrace/correlation.rb +12 -5
  52. data/lib/ddtrace/environment.rb +4 -0
  53. data/lib/ddtrace/event.rb +52 -0
  54. data/lib/ddtrace/ext/analytics.rb +1 -0
  55. data/lib/ddtrace/ext/correlation.rb +10 -0
  56. data/lib/ddtrace/ext/environment.rb +13 -0
  57. data/lib/ddtrace/metrics.rb +7 -0
  58. data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
  59. data/lib/ddtrace/opentelemetry/span.rb +33 -0
  60. data/lib/ddtrace/span.rb +2 -1
  61. data/lib/ddtrace/tracer.rb +13 -3
  62. data/lib/ddtrace/version.rb +2 -2
  63. data/lib/ddtrace/worker.rb +20 -0
  64. data/lib/ddtrace/workers/async.rb +165 -0
  65. data/lib/ddtrace/workers/loop.rb +105 -0
  66. data/lib/ddtrace/workers/polling.rb +48 -0
  67. data/lib/ddtrace/workers/queue.rb +39 -0
  68. metadata +15 -2
@@ -0,0 +1,105 @@
1
+ module Datadog
2
+ module Workers
3
+ # Adds looping behavior to workers, with a sleep
4
+ # interval between each loop.
5
+ module IntervalLoop
6
+ BACK_OFF_RATIO = 1.2
7
+ BACK_OFF_MAX = 5
8
+ BASE_INTERVAL = 1
9
+
10
+ def self.included(base)
11
+ base.send(:prepend, PrependedMethods)
12
+ end
13
+
14
+ # Methods that must be prepended
15
+ module PrependedMethods
16
+ def perform(*args)
17
+ perform_loop { super(*args) }
18
+ end
19
+ end
20
+
21
+ def stop_loop
22
+ mutex.synchronize do
23
+ return false unless run_loop?
24
+ @run_loop = false
25
+ shutdown.signal
26
+ end
27
+
28
+ true
29
+ end
30
+
31
+ def work_pending?
32
+ run_loop?
33
+ end
34
+
35
+ def run_loop?
36
+ @run_loop = false unless instance_variable_defined?(:@run_loop)
37
+ @run_loop == true
38
+ end
39
+
40
+ def loop_base_interval
41
+ @loop_base_interval ||= BASE_INTERVAL
42
+ end
43
+
44
+ def loop_back_off_ratio
45
+ @loop_back_off_ratio ||= BACK_OFF_RATIO
46
+ end
47
+
48
+ def loop_back_off_max
49
+ @loop_back_off_max ||= BACK_OFF_MAX
50
+ end
51
+
52
+ def loop_wait_time
53
+ @loop_wait_time ||= loop_base_interval
54
+ end
55
+
56
+ def loop_back_off?
57
+ false
58
+ end
59
+
60
+ def loop_back_off!(amount = nil)
61
+ @loop_wait_time = amount || [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
62
+ end
63
+
64
+ protected
65
+
66
+ attr_writer \
67
+ :loop_back_off_max,
68
+ :loop_back_off_ratio,
69
+ :loop_base_interval
70
+
71
+ def mutex
72
+ @mutex ||= Mutex.new
73
+ end
74
+
75
+ private
76
+
77
+ def perform_loop
78
+ @run_loop = true
79
+
80
+ loop do
81
+ if work_pending?
82
+ # Run the task
83
+ yield
84
+
85
+ # Reset the wait interval
86
+ loop_back_off!(loop_base_interval)
87
+ elsif loop_back_off?
88
+ # Back off the wait interval a bit
89
+ loop_back_off!
90
+ end
91
+
92
+ # Wait for an interval, unless shutdown has been signaled.
93
+ mutex.synchronize do
94
+ return unless run_loop? || work_pending?
95
+ shutdown.wait(mutex, loop_wait_time) if run_loop?
96
+ end
97
+ end
98
+ end
99
+
100
+ def shutdown
101
+ @shutdown ||= ConditionVariable.new
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,48 @@
1
+ require 'ddtrace/workers/async'
2
+ require 'ddtrace/workers/loop'
3
+
4
+ module Datadog
5
+ module Workers
6
+ # Adds polling (async looping) behavior to workers
7
+ module Polling
8
+ SHUTDOWN_TIMEOUT = 1
9
+
10
+ def self.included(base)
11
+ base.send(:include, Workers::IntervalLoop)
12
+ base.send(:include, Workers::Async::Thread)
13
+ base.send(:prepend, PrependedMethods)
14
+ end
15
+
16
+ # Methods that must be prepended
17
+ module PrependedMethods
18
+ def perform(*args)
19
+ super if enabled?
20
+ end
21
+ end
22
+
23
+ def stop(force_stop = false, timeout = SHUTDOWN_TIMEOUT)
24
+ if running?
25
+ # Attempt graceful stop and wait
26
+ stop_loop
27
+ graceful = join(timeout)
28
+
29
+ # If timeout and force stop...
30
+ !graceful && force_stop ? terminate : graceful
31
+ else
32
+ false
33
+ end
34
+ end
35
+
36
+ def enabled?
37
+ @enabled = true unless instance_variable_defined?(:@enabled)
38
+ @enabled
39
+ end
40
+
41
+ # Allow worker to be started
42
+ def enabled=(value)
43
+ # Coerce to boolean
44
+ @enabled = (value == true)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ module Datadog
2
+ module Workers
3
+ # Adds queue behavior to workers, with a buffer
4
+ # to which items can be queued then dequeued.
5
+ module Queue
6
+ def self.included(base)
7
+ base.send(:prepend, PrependedMethods)
8
+ end
9
+
10
+ # Methods that must be prepended
11
+ module PrependedMethods
12
+ def perform(*args)
13
+ super(*dequeue) if work_pending?
14
+ end
15
+ end
16
+
17
+ def buffer
18
+ @buffer ||= []
19
+ end
20
+
21
+ def enqueue(*args)
22
+ buffer.push(args)
23
+ end
24
+
25
+ def dequeue
26
+ buffer.shift
27
+ end
28
+
29
+ def work_pending?
30
+ !buffer.empty?
31
+ end
32
+
33
+ protected
34
+
35
+ attr_writer \
36
+ :buffer
37
+ end
38
+ end
39
+ 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.33.1
4
+ version: 0.34.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-03-09 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -424,6 +424,7 @@ files:
424
424
  - lib/ddtrace/contrib/concurrent_ruby/patcher.rb
425
425
  - lib/ddtrace/contrib/configurable.rb
426
426
  - lib/ddtrace/contrib/configuration/resolver.rb
427
+ - lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb
427
428
  - lib/ddtrace/contrib/configuration/settings.rb
428
429
  - lib/ddtrace/contrib/dalli/configuration/settings.rb
429
430
  - lib/ddtrace/contrib/dalli/ext.rb
@@ -459,6 +460,7 @@ files:
459
460
  - lib/ddtrace/contrib/faraday/integration.rb
460
461
  - lib/ddtrace/contrib/faraday/middleware.rb
461
462
  - lib/ddtrace/contrib/faraday/patcher.rb
463
+ - lib/ddtrace/contrib/faraday/rack_builder.rb
462
464
  - lib/ddtrace/contrib/grape/configuration/settings.rb
463
465
  - lib/ddtrace/contrib/grape/endpoint.rb
464
466
  - lib/ddtrace/contrib/grape/ext.rb
@@ -483,6 +485,7 @@ files:
483
485
  - lib/ddtrace/contrib/http/instrumentation.rb
484
486
  - lib/ddtrace/contrib/http/integration.rb
485
487
  - lib/ddtrace/contrib/http/patcher.rb
488
+ - lib/ddtrace/contrib/http_annotation_helper.rb
486
489
  - lib/ddtrace/contrib/integration.rb
487
490
  - lib/ddtrace/contrib/mongodb/configuration/settings.rb
488
491
  - lib/ddtrace/contrib/mongodb/ext.rb
@@ -593,10 +596,13 @@ files:
593
596
  - lib/ddtrace/encoding.rb
594
597
  - lib/ddtrace/environment.rb
595
598
  - lib/ddtrace/error.rb
599
+ - lib/ddtrace/event.rb
596
600
  - lib/ddtrace/ext/analytics.rb
597
601
  - lib/ddtrace/ext/app_types.rb
602
+ - lib/ddtrace/ext/correlation.rb
598
603
  - lib/ddtrace/ext/diagnostics.rb
599
604
  - lib/ddtrace/ext/distributed.rb
605
+ - lib/ddtrace/ext/environment.rb
600
606
  - lib/ddtrace/ext/errors.rb
601
607
  - lib/ddtrace/ext/forced_tracing.rb
602
608
  - lib/ddtrace/ext/http.rb
@@ -612,6 +618,8 @@ files:
612
618
  - lib/ddtrace/logger.rb
613
619
  - lib/ddtrace/metrics.rb
614
620
  - lib/ddtrace/monkey.rb
621
+ - lib/ddtrace/opentelemetry/extensions.rb
622
+ - lib/ddtrace/opentelemetry/span.rb
615
623
  - lib/ddtrace/opentracer.rb
616
624
  - lib/ddtrace/opentracer/binary_propagator.rb
617
625
  - lib/ddtrace/opentracer/carrier.rb
@@ -686,7 +694,12 @@ files:
686
694
  - lib/ddtrace/utils/time.rb
687
695
  - lib/ddtrace/vendor/active_record/connection_specification.rb
688
696
  - lib/ddtrace/version.rb
697
+ - lib/ddtrace/worker.rb
689
698
  - lib/ddtrace/workers.rb
699
+ - lib/ddtrace/workers/async.rb
700
+ - lib/ddtrace/workers/loop.rb
701
+ - lib/ddtrace/workers/polling.rb
702
+ - lib/ddtrace/workers/queue.rb
690
703
  - lib/ddtrace/writer.rb
691
704
  - tasks/release_gem.rake
692
705
  homepage: https://github.com/DataDog/dd-trace-rb