ddtrace 0.9.2 → 0.10.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.
- checksums.yaml +4 -4
- data/.gitignore +2 -3
- data/Appraisals +1 -0
- data/ddtrace.gemspec +3 -0
- data/docs/GettingStarted.md +31 -8
- data/gemfiles/rails32_postgres_redis.gemfile +1 -0
- data/lib/ddtrace.rb +20 -34
- data/lib/ddtrace/buffer.rb +1 -7
- data/lib/ddtrace/configurable.rb +77 -0
- data/lib/ddtrace/configuration.rb +35 -0
- data/lib/ddtrace/configuration/proxy.rb +29 -0
- data/lib/ddtrace/configuration/resolver.rb +24 -0
- data/lib/ddtrace/context.rb +55 -7
- data/lib/ddtrace/contrib/active_record/patcher.rb +4 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +3 -0
- data/lib/ddtrace/contrib/base.rb +14 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +3 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +3 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +5 -6
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +3 -0
- data/lib/ddtrace/contrib/http/patcher.rb +22 -7
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +21 -35
- data/lib/ddtrace/contrib/rails/action_controller.rb +2 -2
- data/lib/ddtrace/contrib/rails/action_view.rb +2 -2
- data/lib/ddtrace/contrib/rails/active_record.rb +2 -2
- data/lib/ddtrace/contrib/rails/active_support.rb +2 -2
- data/lib/ddtrace/contrib/rails/framework.rb +36 -58
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -1
- data/lib/ddtrace/contrib/rails/patcher.rb +56 -0
- data/lib/ddtrace/contrib/rails/railtie.rb +18 -0
- data/lib/ddtrace/contrib/rails/utils.rb +1 -1
- data/lib/ddtrace/contrib/redis/patcher.rb +4 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
- data/lib/ddtrace/contrib/redis/tags.rb +1 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +9 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +6 -6
- data/lib/ddtrace/contrib/sidekiq/tracer.rb +11 -11
- data/lib/ddtrace/contrib/sinatra/tracer.rb +23 -63
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +3 -0
- data/lib/ddtrace/ext/distributed.rb +2 -0
- data/lib/ddtrace/ext/redis.rb +6 -0
- data/lib/ddtrace/monkey.rb +20 -37
- data/lib/ddtrace/propagation/distributed_headers.rb +48 -0
- data/lib/ddtrace/propagation/http_propagator.rb +28 -0
- data/lib/ddtrace/registry.rb +42 -0
- data/lib/ddtrace/registry/registerable.rb +20 -0
- data/lib/ddtrace/sampler.rb +61 -1
- data/lib/ddtrace/sync_writer.rb +36 -0
- data/lib/ddtrace/tracer.rb +23 -21
- data/lib/ddtrace/transport.rb +52 -15
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers.rb +33 -31
- data/lib/ddtrace/writer.rb +20 -1
- metadata +42 -3
- data/lib/ddtrace/distributed.rb +0 -38
data/lib/ddtrace/version.rb
CHANGED
data/lib/ddtrace/workers.rb
CHANGED
@@ -12,8 +12,9 @@ module Datadog
|
|
12
12
|
DEFAULT_TIMEOUT = 5
|
13
13
|
BACK_OFF_RATIO = 1.2
|
14
14
|
BACK_OFF_MAX = 5
|
15
|
+
SHUTDOWN_TIMEOUT = 1
|
15
16
|
|
16
|
-
attr_reader :trace_buffer, :service_buffer
|
17
|
+
attr_reader :trace_buffer, :service_buffer
|
17
18
|
|
18
19
|
def initialize(transport, buff_size, trace_task, service_task, interval)
|
19
20
|
@trace_task = trace_task
|
@@ -23,7 +24,8 @@ module Datadog
|
|
23
24
|
@trace_buffer = TraceBuffer.new(buff_size)
|
24
25
|
@service_buffer = TraceBuffer.new(buff_size)
|
25
26
|
@transport = transport
|
26
|
-
@
|
27
|
+
@shutdown = ConditionVariable.new
|
28
|
+
@mutex = Mutex.new
|
27
29
|
|
28
30
|
@worker = nil
|
29
31
|
@run = false
|
@@ -62,47 +64,32 @@ module Datadog
|
|
62
64
|
|
63
65
|
# Start the timer execution.
|
64
66
|
def start
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
while @run
|
71
|
-
@back_off = callback_traces ? @flush_interval : [@back_off * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
72
|
-
|
73
|
-
callback_services
|
74
|
-
|
75
|
-
sleep(@back_off) if @run
|
76
|
-
end
|
67
|
+
@mutex.synchronize do
|
68
|
+
return if @run
|
69
|
+
@run = true
|
70
|
+
Tracer.log.debug("Starting thread in the process: #{Process.pid}")
|
71
|
+
@worker = Thread.new { perform }
|
77
72
|
end
|
78
73
|
end
|
79
74
|
|
80
|
-
#
|
75
|
+
# Closes all available queues and waits for the trace and service buffer to flush
|
81
76
|
def stop
|
82
|
-
@
|
83
|
-
|
77
|
+
@mutex.synchronize do
|
78
|
+
return unless @run
|
84
79
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
@trace_buffer.close
|
90
|
-
@service_buffer.close
|
91
|
-
sleep(0.1)
|
92
|
-
timeout_time = Time.now + DEFAULT_TIMEOUT
|
93
|
-
while (!@trace_buffer.empty? || !@service_buffer.empty?) && Time.now <= timeout_time
|
94
|
-
sleep(0.05)
|
95
|
-
Datadog::Tracer.log.debug('Waiting for the buffers to clear before exiting')
|
80
|
+
@trace_buffer.close
|
81
|
+
@service_buffer.close
|
82
|
+
@run = false
|
83
|
+
@shutdown.signal
|
96
84
|
end
|
97
|
-
|
85
|
+
|
98
86
|
join
|
99
|
-
@shutting_down = false
|
100
87
|
true
|
101
88
|
end
|
102
89
|
|
103
90
|
# Block until executor shutdown is complete or until timeout seconds have passed.
|
104
91
|
def join
|
105
|
-
@worker.join(
|
92
|
+
@worker.join(SHUTDOWN_TIMEOUT)
|
106
93
|
end
|
107
94
|
|
108
95
|
# Enqueue an item in the trace internal buffer. This operation is thread-safe
|
@@ -116,6 +103,21 @@ module Datadog
|
|
116
103
|
return if service == {} # no use to send this, not worth it
|
117
104
|
@service_buffer.push(service)
|
118
105
|
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def perform
|
110
|
+
loop do
|
111
|
+
@back_off = callback_traces ? @flush_interval : [@back_off * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
112
|
+
|
113
|
+
callback_services
|
114
|
+
|
115
|
+
@mutex.synchronize do
|
116
|
+
return if !@run && @trace_buffer.empty? && @service_buffer.empty?
|
117
|
+
@shutdown.wait(@mutex, @back_off)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
119
121
|
end
|
120
122
|
end
|
121
123
|
end
|
data/lib/ddtrace/writer.rb
CHANGED
@@ -14,9 +14,20 @@ module Datadog
|
|
14
14
|
# writer and transport parameters
|
15
15
|
@buff_size = options.fetch(:buffer_size, 100)
|
16
16
|
@flush_interval = options.fetch(:flush_interval, 1)
|
17
|
+
transport_options = options.fetch(:transport_options, {})
|
18
|
+
|
19
|
+
# priority sampling
|
20
|
+
if options[:priority_sampler]
|
21
|
+
@priority_sampler = options[:priority_sampler]
|
22
|
+
transport_options[:api_version] ||= HTTPTransport::V4
|
23
|
+
transport_options[:response_callback] ||= method(:sampling_updater)
|
24
|
+
end
|
17
25
|
|
18
26
|
# transport and buffers
|
19
|
-
@transport = options.fetch(:transport
|
27
|
+
@transport = options.fetch(:transport) do
|
28
|
+
HTTPTransport.new(HOSTNAME, PORT, transport_options)
|
29
|
+
end
|
30
|
+
|
20
31
|
@services = {}
|
21
32
|
|
22
33
|
# handles the thread creation after an eventual fork
|
@@ -103,5 +114,13 @@ module Datadog
|
|
103
114
|
transport: @transport.stats
|
104
115
|
}
|
105
116
|
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def sampling_updater(response)
|
121
|
+
return unless response.is_a?(Net::HTTPOK)
|
122
|
+
service_rates = JSON.parse(response.body)
|
123
|
+
@priority_sampler.update(service_rates)
|
124
|
+
end
|
106
125
|
end
|
107
126
|
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.
|
4
|
+
version: 0.10.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: 2017-11-
|
11
|
+
date: 2017-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: addressable
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.4.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.4.0
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: redcarpet
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,12 +177,17 @@ files:
|
|
149
177
|
- gemfiles/rails5_postgres_sidekiq.gemfile
|
150
178
|
- lib/ddtrace.rb
|
151
179
|
- lib/ddtrace/buffer.rb
|
180
|
+
- lib/ddtrace/configurable.rb
|
181
|
+
- lib/ddtrace/configuration.rb
|
182
|
+
- lib/ddtrace/configuration/proxy.rb
|
183
|
+
- lib/ddtrace/configuration/resolver.rb
|
152
184
|
- lib/ddtrace/context.rb
|
153
185
|
- lib/ddtrace/contrib/active_record/patcher.rb
|
154
186
|
- lib/ddtrace/contrib/aws/instrumentation.rb
|
155
187
|
- lib/ddtrace/contrib/aws/parsed_context.rb
|
156
188
|
- lib/ddtrace/contrib/aws/patcher.rb
|
157
189
|
- lib/ddtrace/contrib/aws/services.rb
|
190
|
+
- lib/ddtrace/contrib/base.rb
|
158
191
|
- lib/ddtrace/contrib/dalli/instrumentation.rb
|
159
192
|
- lib/ddtrace/contrib/dalli/patcher.rb
|
160
193
|
- lib/ddtrace/contrib/dalli/quantize.rb
|
@@ -176,6 +209,8 @@ files:
|
|
176
209
|
- lib/ddtrace/contrib/rails/core_extensions.rb
|
177
210
|
- lib/ddtrace/contrib/rails/framework.rb
|
178
211
|
- lib/ddtrace/contrib/rails/middlewares.rb
|
212
|
+
- lib/ddtrace/contrib/rails/patcher.rb
|
213
|
+
- lib/ddtrace/contrib/rails/railtie.rb
|
179
214
|
- lib/ddtrace/contrib/rails/utils.rb
|
180
215
|
- lib/ddtrace/contrib/redis/patcher.rb
|
181
216
|
- lib/ddtrace/contrib/redis/quantize.rb
|
@@ -187,7 +222,6 @@ files:
|
|
187
222
|
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
188
223
|
- lib/ddtrace/contrib/sucker_punch/instrumentation.rb
|
189
224
|
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
190
|
-
- lib/ddtrace/distributed.rb
|
191
225
|
- lib/ddtrace/encoding.rb
|
192
226
|
- lib/ddtrace/error.rb
|
193
227
|
- lib/ddtrace/ext/app_types.rb
|
@@ -205,9 +239,14 @@ files:
|
|
205
239
|
- lib/ddtrace/pipeline.rb
|
206
240
|
- lib/ddtrace/pipeline/span_filter.rb
|
207
241
|
- lib/ddtrace/pipeline/span_processor.rb
|
242
|
+
- lib/ddtrace/propagation/distributed_headers.rb
|
243
|
+
- lib/ddtrace/propagation/http_propagator.rb
|
208
244
|
- lib/ddtrace/provider.rb
|
245
|
+
- lib/ddtrace/registry.rb
|
246
|
+
- lib/ddtrace/registry/registerable.rb
|
209
247
|
- lib/ddtrace/sampler.rb
|
210
248
|
- lib/ddtrace/span.rb
|
249
|
+
- lib/ddtrace/sync_writer.rb
|
211
250
|
- lib/ddtrace/tracer.rb
|
212
251
|
- lib/ddtrace/transport.rb
|
213
252
|
- lib/ddtrace/utils.rb
|
data/lib/ddtrace/distributed.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'ddtrace/span'
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
# Common code related to distributed tracing.
|
5
|
-
module Distributed
|
6
|
-
module_function
|
7
|
-
|
8
|
-
# Parses a trace_id and a parent_id, typically sent as headers in
|
9
|
-
# a distributed tracing context, and returns a couple of trace_id,parent_id
|
10
|
-
# which are garanteed to be both non-zero. This does not 100% ensure they
|
11
|
-
# are valid (after all, the caller could mess up data) but at least it
|
12
|
-
# sorts out most common errors, such as syntax, nil values, etc.
|
13
|
-
# Both headers must be set, else nil values are returned, for both.
|
14
|
-
# Reports problem on debug log.
|
15
|
-
def parse_trace_headers(trace_id_header, parent_id_header)
|
16
|
-
return nil, nil if trace_id_header.nil? || parent_id_header.nil?
|
17
|
-
trace_id = trace_id_header.to_i
|
18
|
-
parent_id = parent_id_header.to_i
|
19
|
-
if trace_id.zero?
|
20
|
-
Datadog::Tracer.log.debug("invalid trace_id header: #{trace_id_header}")
|
21
|
-
return nil, nil
|
22
|
-
end
|
23
|
-
if parent_id.zero?
|
24
|
-
Datadog::Tracer.log.debug("invalid parent_id header: #{parent_id_header}")
|
25
|
-
return nil, nil
|
26
|
-
end
|
27
|
-
if trace_id < 0 || trace_id >= Datadog::Span::MAX_ID
|
28
|
-
Datadog::Tracer.log.debug("trace_id out of range: #{trace_id_header}")
|
29
|
-
return nil, nil
|
30
|
-
end
|
31
|
-
if parent_id < 0 || parent_id >= Datadog::Span::MAX_ID
|
32
|
-
Datadog::Tracer.log.debug("parent_id out of range: #{parent_id_header}")
|
33
|
-
return nil, nil
|
34
|
-
end
|
35
|
-
[trace_id, parent_id]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|