ddtrace 0.33.1 → 0.34.0

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