ddtrace 0.35.2 → 0.40.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/.circleci/config.yml +59 -1
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.rubocop.yml +4 -0
- data/.simplecov +38 -0
- data/Appraisals +139 -12
- data/CHANGELOG.md +185 -1
- data/Rakefile +524 -464
- data/ddtrace.gemspec +6 -0
- data/docker-compose.yml +37 -2
- data/docs/DevelopmentGuide.md +16 -0
- data/docs/GettingStarted.md +192 -111
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/configuration.rb +36 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +27 -3
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +1 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
- data/lib/ddtrace/contrib/dalli/patcher.rb +1 -5
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/extensions.rb +39 -5
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
- data/lib/ddtrace/contrib/faraday/middleware.rb +5 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -3
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
- data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/http/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/instrumentation.rb +12 -7
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/patcher.rb +14 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/presto/ext.rb +5 -2
- data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +56 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rack/ext.rb +5 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +17 -12
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -11
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- data/lib/ddtrace/contrib/rails/framework.rb +52 -46
- data/lib/ddtrace/contrib/rails/integration.rb +1 -1
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/rake/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/redis/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/patcher.rb +1 -1
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
- data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +1 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/environment.rb +17 -3
- data/lib/ddtrace/ext/diagnostics.rb +3 -0
- data/lib/ddtrace/ext/environment.rb +2 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/pin.rb +39 -15
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/runtime/metrics.rb +18 -4
- data/lib/ddtrace/sampler.rb +2 -0
- data/lib/ddtrace/span.rb +10 -0
- data/lib/ddtrace/tracer.rb +15 -8
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers/async.rb +2 -2
- data/lib/ddtrace/workers/loop.rb +1 -1
- data/lib/ddtrace/workers/polling.rb +1 -1
- data/lib/ddtrace/workers/trace_writer.rb +3 -0
- data/lib/ddtrace/writer.rb +33 -12
- metadata +124 -4
|
@@ -10,12 +10,22 @@ module Datadog
|
|
|
10
10
|
@criteria = filter || block
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
# Note: this SpanFilter implementation only handles traces in which child spans appear
|
|
14
|
+
# after parent spans in the trace array. If in the future child spans can be before
|
|
15
|
+
# parent spans, then the code below will need to be updated.
|
|
13
16
|
def call(trace)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
deleted = Set.new
|
|
18
|
+
|
|
19
|
+
trace.delete_if do |span|
|
|
20
|
+
if deleted.include?(span.parent)
|
|
21
|
+
deleted << span
|
|
22
|
+
true
|
|
23
|
+
else
|
|
24
|
+
drop = drop_it?(span)
|
|
25
|
+
deleted << span if drop
|
|
26
|
+
drop
|
|
27
|
+
end
|
|
28
|
+
end
|
|
19
29
|
end
|
|
20
30
|
|
|
21
31
|
private
|
|
@@ -23,16 +33,6 @@ module Datadog
|
|
|
23
33
|
def drop_it?(span)
|
|
24
34
|
@criteria.call(span) rescue false
|
|
25
35
|
end
|
|
26
|
-
|
|
27
|
-
def clean_trace(black_list, trace)
|
|
28
|
-
current = black_list.shift
|
|
29
|
-
|
|
30
|
-
trace.delete(current)
|
|
31
|
-
|
|
32
|
-
trace.each do |span|
|
|
33
|
-
black_list << span if span.parent == current
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
|
@@ -55,10 +55,8 @@ module Datadog
|
|
|
55
55
|
|
|
56
56
|
def gc_metrics
|
|
57
57
|
Hash[
|
|
58
|
-
GC.stat.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
["#{Ext::Runtime::Metrics::METRIC_GC_PREFIX}.#{k}", v]
|
|
58
|
+
GC.stat.flat_map do |k, v|
|
|
59
|
+
nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v)
|
|
62
60
|
end
|
|
63
61
|
]
|
|
64
62
|
end
|
|
@@ -91,6 +89,22 @@ module Datadog
|
|
|
91
89
|
"#{Ext::Runtime::Metrics::TAG_SERVICE}:#{service}".freeze
|
|
92
90
|
end
|
|
93
91
|
end
|
|
92
|
+
|
|
93
|
+
def nested_gc_metric(prefix, k, v)
|
|
94
|
+
path = "#{prefix}.#{k}"
|
|
95
|
+
|
|
96
|
+
if v.is_a?(Hash)
|
|
97
|
+
v.flat_map do |key, value|
|
|
98
|
+
nested_gc_metric(path, key, value)
|
|
99
|
+
end
|
|
100
|
+
else
|
|
101
|
+
[[to_metric_name(path), v]]
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def to_metric_name(str)
|
|
106
|
+
str.downcase.gsub(/[-\s]/, '_')
|
|
107
|
+
end
|
|
94
108
|
end
|
|
95
109
|
end
|
|
96
110
|
end
|
data/lib/ddtrace/sampler.rb
CHANGED
data/lib/ddtrace/span.rb
CHANGED
|
@@ -107,6 +107,16 @@ module Datadog
|
|
|
107
107
|
Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
+
# Sets tags from given hash, for each key in hash it sets the tag with that key
|
|
111
|
+
# and associated value from the hash. It is shortcut for `set_tag`. Keys and values
|
|
112
|
+
# of the hash must be strings. Note that nested hashes are not supported.
|
|
113
|
+
# A valid example is:
|
|
114
|
+
#
|
|
115
|
+
# span.set_tags({ "http.method" => "GET", "user.id" => "234" })
|
|
116
|
+
def set_tags(tags)
|
|
117
|
+
tags.each { |k, v| set_tag(k, v) }
|
|
118
|
+
end
|
|
119
|
+
|
|
110
120
|
# This method removes a tag for the given key.
|
|
111
121
|
def clear_tag(key)
|
|
112
122
|
@meta.delete(key)
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -212,8 +212,8 @@ module Datadog
|
|
|
212
212
|
# child span
|
|
213
213
|
span.parent = parent # sets service, trace_id, parent_id, sampled
|
|
214
214
|
end
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
span.set_tags(@tags) unless @tags.empty?
|
|
216
|
+
span.set_tags(tags) unless tags.empty?
|
|
217
217
|
span.start_time = start_time
|
|
218
218
|
|
|
219
219
|
# this could at some point be optional (start_active_span vs start_manual_span)
|
|
@@ -255,9 +255,11 @@ module Datadog
|
|
|
255
255
|
# * +service+: the service name for this span
|
|
256
256
|
# * +resource+: the resource this span refers, or \name if it's missing
|
|
257
257
|
# * +span_type+: the type of the span (such as \http, \db and so on)
|
|
258
|
+
# * +child_of+: a \Span or a \Context instance representing the parent for this span.
|
|
259
|
+
# If not set, defaults to Tracer.call_context
|
|
258
260
|
# * +tags+: extra tags which should be added to the span.
|
|
259
261
|
def trace(name, options = {})
|
|
260
|
-
options[:child_of]
|
|
262
|
+
options[:child_of] ||= call_context
|
|
261
263
|
|
|
262
264
|
# call the finish only if a block is given; this ensures
|
|
263
265
|
# that a call to tracer.trace() without a block, returns
|
|
@@ -269,11 +271,16 @@ module Datadog
|
|
|
269
271
|
begin
|
|
270
272
|
begin
|
|
271
273
|
span = start_span(name, options)
|
|
272
|
-
# rubocop:disable Lint/UselessAssignment
|
|
273
274
|
rescue StandardError => e
|
|
274
|
-
Datadog.logger.debug(
|
|
275
|
+
Datadog.logger.debug("Failed to start span: #{e}")
|
|
275
276
|
ensure
|
|
276
|
-
|
|
277
|
+
# We should yield to the provided block when possible, as this
|
|
278
|
+
# block is application code that we don't want to hinder. We call:
|
|
279
|
+
# * `yield(span)` during normal execution.
|
|
280
|
+
# * `yield(nil)` if `start_span` fails with a runtime error.
|
|
281
|
+
# * We don't yield during a fatal error, as the application is likely trying to
|
|
282
|
+
# end its execution (either due to a system error or graceful shutdown).
|
|
283
|
+
return_value = yield(span) if span || e.is_a?(StandardError)
|
|
277
284
|
end
|
|
278
285
|
# rubocop:disable Lint/RescueException
|
|
279
286
|
# Here we really want to catch *any* exception, not only StandardError,
|
|
@@ -314,7 +321,7 @@ module Datadog
|
|
|
314
321
|
def record_context(context)
|
|
315
322
|
trace = @context_flush.consume!(context)
|
|
316
323
|
|
|
317
|
-
write(trace) if trace && !trace.empty?
|
|
324
|
+
write(trace) if @enabled && trace && !trace.empty?
|
|
318
325
|
end
|
|
319
326
|
|
|
320
327
|
# Return the current active span or +nil+.
|
|
@@ -335,7 +342,7 @@ module Datadog
|
|
|
335
342
|
# Send the trace to the writer to enqueue the spans list in the agent
|
|
336
343
|
# sending queue.
|
|
337
344
|
def write(trace)
|
|
338
|
-
return if @writer.nil?
|
|
345
|
+
return if @writer.nil?
|
|
339
346
|
|
|
340
347
|
if Datadog.configuration.diagnostics.debug
|
|
341
348
|
Datadog.logger.debug("Writing #{trace.length} spans (enabled: #{@enabled})")
|
|
@@ -10,6 +10,7 @@ require 'ddtrace/transport/http/api'
|
|
|
10
10
|
require 'ddtrace/transport/http/adapters/net'
|
|
11
11
|
require 'ddtrace/transport/http/adapters/test'
|
|
12
12
|
require 'ddtrace/transport/http/adapters/unix_socket'
|
|
13
|
+
require 'uri'
|
|
13
14
|
|
|
14
15
|
module Datadog
|
|
15
16
|
module Transport
|
|
@@ -75,13 +76,27 @@ module Datadog
|
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def default_hostname
|
|
79
|
+
return default_url.hostname if default_url
|
|
80
|
+
|
|
78
81
|
ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST, Datadog::Ext::Transport::HTTP::DEFAULT_HOST)
|
|
79
82
|
end
|
|
80
83
|
|
|
81
84
|
def default_port
|
|
85
|
+
return default_url.port if default_url
|
|
86
|
+
|
|
82
87
|
ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT, Datadog::Ext::Transport::HTTP::DEFAULT_PORT).to_i
|
|
83
88
|
end
|
|
84
89
|
|
|
90
|
+
def default_url
|
|
91
|
+
url_env = ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL, nil)
|
|
92
|
+
|
|
93
|
+
if url_env
|
|
94
|
+
uri_parsed = URI.parse(url_env)
|
|
95
|
+
|
|
96
|
+
uri_parsed if %w[http https].include?(uri_parsed.scheme)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
85
100
|
# Add adapters to registry
|
|
86
101
|
Builder::REGISTRY.set(Adapters::Net, :net_http)
|
|
87
102
|
Builder::REGISTRY.set(Adapters::Test, :test)
|
|
@@ -47,6 +47,10 @@ module Datadog
|
|
|
47
47
|
Response.new(http_response)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
+
def url
|
|
51
|
+
"http://#{hostname}:#{port}?timeout=#{timeout}"
|
|
52
|
+
end
|
|
53
|
+
|
|
50
54
|
# Raised when called with an unknown HTTP method
|
|
51
55
|
class UnknownHTTPMethod < StandardError
|
|
52
56
|
attr_reader :verb
|
|
@@ -104,6 +108,10 @@ module Datadog
|
|
|
104
108
|
return super if http_response.nil?
|
|
105
109
|
code.between?(500, 599)
|
|
106
110
|
end
|
|
111
|
+
|
|
112
|
+
def inspect
|
|
113
|
+
"#{super}, http_response:#{http_response}"
|
|
114
|
+
end
|
|
107
115
|
end
|
|
108
116
|
end
|
|
109
117
|
end
|
|
@@ -33,6 +33,8 @@ module Datadog
|
|
|
33
33
|
@status = status
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
def url; end
|
|
37
|
+
|
|
36
38
|
# Response for test adapter
|
|
37
39
|
class Response
|
|
38
40
|
include Datadog::Transport::Response
|
|
@@ -69,6 +71,10 @@ module Datadog
|
|
|
69
71
|
def server_error?
|
|
70
72
|
code.between?(500, 599)
|
|
71
73
|
end
|
|
74
|
+
|
|
75
|
+
def inspect
|
|
76
|
+
"#{super}, code:#{code}"
|
|
77
|
+
end
|
|
72
78
|
end
|
|
73
79
|
end
|
|
74
80
|
end
|
|
@@ -29,6 +29,13 @@ module Datadog
|
|
|
29
29
|
def internal_error?
|
|
30
30
|
nil
|
|
31
31
|
end
|
|
32
|
+
|
|
33
|
+
def inspect
|
|
34
|
+
"#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \
|
|
35
|
+
"not_found?:#{not_found?}, client_error?:#{client_error?}, " \
|
|
36
|
+
"server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \
|
|
37
|
+
"payload:#{payload}"
|
|
38
|
+
end
|
|
32
39
|
end
|
|
33
40
|
|
|
34
41
|
# A generic error response for internal errors
|
|
@@ -44,6 +51,10 @@ module Datadog
|
|
|
44
51
|
def internal_error?
|
|
45
52
|
true
|
|
46
53
|
end
|
|
54
|
+
|
|
55
|
+
def inspect
|
|
56
|
+
"#{super}, error_type:#{error.class} error:#{error}"
|
|
57
|
+
end
|
|
47
58
|
end
|
|
48
59
|
end
|
|
49
60
|
end
|
data/lib/ddtrace/version.rb
CHANGED
|
@@ -42,7 +42,7 @@ module Datadog
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def run_async?
|
|
45
|
-
|
|
45
|
+
return false unless instance_variable_defined?(:@run_async)
|
|
46
46
|
@run_async == true
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -55,7 +55,7 @@ module Datadog
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def error?
|
|
58
|
-
|
|
58
|
+
return false unless instance_variable_defined?(:@error)
|
|
59
59
|
!@error.nil?
|
|
60
60
|
end
|
|
61
61
|
|
data/lib/ddtrace/workers/loop.rb
CHANGED
|
@@ -72,6 +72,9 @@ module Datadog
|
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
# TODO: Register `Datadog::Diagnostics::EnvironmentLogger.log!`
|
|
76
|
+
# TODO: as a flush_completed subscriber when the `TraceWriter`
|
|
77
|
+
# TODO: instantiation code is implemented.
|
|
75
78
|
def flush_completed
|
|
76
79
|
@flush_completed ||= FlushCompleted.new
|
|
77
80
|
end
|
data/lib/ddtrace/writer.rb
CHANGED
|
@@ -7,6 +7,7 @@ require 'ddtrace/transport/http'
|
|
|
7
7
|
require 'ddtrace/transport/io'
|
|
8
8
|
require 'ddtrace/encoding'
|
|
9
9
|
require 'ddtrace/workers'
|
|
10
|
+
require 'ddtrace/diagnostics/environment_logger'
|
|
10
11
|
|
|
11
12
|
module Datadog
|
|
12
13
|
# Processor that sends traces and metadata to the agent
|
|
@@ -43,9 +44,18 @@ module Datadog
|
|
|
43
44
|
@worker = nil
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
# spawns a worker for spans; they share the same transport which is thread-safe
|
|
47
47
|
def start
|
|
48
|
-
@
|
|
48
|
+
@mutex_after_fork.synchronize do
|
|
49
|
+
pid = Process.pid
|
|
50
|
+
return if @worker && pid == @pid
|
|
51
|
+
@pid = pid
|
|
52
|
+
start_worker
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# spawns a worker for spans; they share the same transport which is thread-safe
|
|
58
|
+
def start_worker
|
|
49
59
|
@trace_handler = ->(items, transport) { send_spans(items, transport) }
|
|
50
60
|
@worker = Datadog::Workers::AsyncTransport.new(
|
|
51
61
|
transport: @transport,
|
|
@@ -57,14 +67,19 @@ module Datadog
|
|
|
57
67
|
@worker.start
|
|
58
68
|
end
|
|
59
69
|
|
|
60
|
-
# stops worker for spans.
|
|
61
70
|
def stop
|
|
62
|
-
|
|
71
|
+
@mutex_after_fork.synchronize { stop_worker }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def stop_worker
|
|
75
|
+
return if @worker.nil?
|
|
63
76
|
@worker.stop
|
|
64
77
|
@worker = nil
|
|
65
78
|
true
|
|
66
79
|
end
|
|
67
80
|
|
|
81
|
+
private :start_worker, :stop_worker
|
|
82
|
+
|
|
68
83
|
# flush spans to the trace-agent, handles spans only
|
|
69
84
|
def send_spans(traces, transport)
|
|
70
85
|
return true if traces.empty?
|
|
@@ -83,6 +98,8 @@ module Datadog
|
|
|
83
98
|
# Update priority sampler
|
|
84
99
|
update_priority_sampler(responses.last)
|
|
85
100
|
|
|
101
|
+
record_environment_information!(responses)
|
|
102
|
+
|
|
86
103
|
# Return if server error occurred.
|
|
87
104
|
!responses.find(&:server_error?)
|
|
88
105
|
end
|
|
@@ -106,13 +123,7 @@ module Datadog
|
|
|
106
123
|
#
|
|
107
124
|
# This check ensures that if a process doesn't own the current +Writer+, async workers
|
|
108
125
|
# will be initialized again (but only once for each process).
|
|
109
|
-
pid
|
|
110
|
-
if pid != @pid # avoid using Mutex when pids are equal
|
|
111
|
-
@mutex_after_fork.synchronize do
|
|
112
|
-
# we should start threads because the worker doesn't own this
|
|
113
|
-
start if pid != @pid
|
|
114
|
-
end
|
|
115
|
-
end
|
|
126
|
+
start if @worker.nil? || @pid != Process.pid
|
|
116
127
|
|
|
117
128
|
# TODO: Remove this, and have the tracer pump traces directly to runtime metrics
|
|
118
129
|
# instead of working through the trace writer.
|
|
@@ -121,7 +132,13 @@ module Datadog
|
|
|
121
132
|
Datadog.runtime_metrics.associate_with_span(trace.first)
|
|
122
133
|
end
|
|
123
134
|
|
|
124
|
-
@worker
|
|
135
|
+
worker_local = @worker
|
|
136
|
+
|
|
137
|
+
if worker_local
|
|
138
|
+
worker_local.enqueue_trace(trace)
|
|
139
|
+
else
|
|
140
|
+
Datadog.logger.debug('Writer either failed to start or was stopped before #write could complete')
|
|
141
|
+
end
|
|
125
142
|
end
|
|
126
143
|
|
|
127
144
|
# stats returns a dictionary of stats about the writer.
|
|
@@ -150,5 +167,9 @@ module Datadog
|
|
|
150
167
|
|
|
151
168
|
priority_sampler.update(response.service_rates)
|
|
152
169
|
end
|
|
170
|
+
|
|
171
|
+
def record_environment_information!(responses)
|
|
172
|
+
Diagnostics::EnvironmentLogger.log!(responses)
|
|
173
|
+
end
|
|
153
174
|
end
|
|
154
175
|
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.40.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-
|
|
11
|
+
date: 2020-09-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -122,6 +122,34 @@ dependencies:
|
|
|
122
122
|
- - '='
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: 5.10.1
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: minitest-around
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - '='
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 0.5.0
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - '='
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: 0.5.0
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: minitest-stub_any_instance
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - '='
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: 1.0.2
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - '='
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: 1.0.2
|
|
125
153
|
- !ruby/object:Gem::Dependency
|
|
126
154
|
name: appraisal
|
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -220,6 +248,48 @@ dependencies:
|
|
|
220
248
|
- - "~>"
|
|
221
249
|
- !ruby/object:Gem::Version
|
|
222
250
|
version: 2.4.0
|
|
251
|
+
- !ruby/object:Gem::Dependency
|
|
252
|
+
name: benchmark-ips
|
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
|
254
|
+
requirements:
|
|
255
|
+
- - "~>"
|
|
256
|
+
- !ruby/object:Gem::Version
|
|
257
|
+
version: '2.8'
|
|
258
|
+
type: :development
|
|
259
|
+
prerelease: false
|
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
+
requirements:
|
|
262
|
+
- - "~>"
|
|
263
|
+
- !ruby/object:Gem::Version
|
|
264
|
+
version: '2.8'
|
|
265
|
+
- !ruby/object:Gem::Dependency
|
|
266
|
+
name: benchmark-memory
|
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
|
268
|
+
requirements:
|
|
269
|
+
- - "~>"
|
|
270
|
+
- !ruby/object:Gem::Version
|
|
271
|
+
version: '0.1'
|
|
272
|
+
type: :development
|
|
273
|
+
prerelease: false
|
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
275
|
+
requirements:
|
|
276
|
+
- - "~>"
|
|
277
|
+
- !ruby/object:Gem::Version
|
|
278
|
+
version: '0.1'
|
|
279
|
+
- !ruby/object:Gem::Dependency
|
|
280
|
+
name: memory_profiler
|
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
|
282
|
+
requirements:
|
|
283
|
+
- - "~>"
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: '0.9'
|
|
286
|
+
type: :development
|
|
287
|
+
prerelease: false
|
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
+
requirements:
|
|
290
|
+
- - "~>"
|
|
291
|
+
- !ruby/object:Gem::Version
|
|
292
|
+
version: '0.9'
|
|
223
293
|
- !ruby/object:Gem::Dependency
|
|
224
294
|
name: redcarpet
|
|
225
295
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -262,6 +332,20 @@ dependencies:
|
|
|
262
332
|
- - "~>"
|
|
263
333
|
- !ruby/object:Gem::Version
|
|
264
334
|
version: 0.4.9.2
|
|
335
|
+
- !ruby/object:Gem::Dependency
|
|
336
|
+
name: simplecov
|
|
337
|
+
requirement: !ruby/object:Gem::Requirement
|
|
338
|
+
requirements:
|
|
339
|
+
- - "~>"
|
|
340
|
+
- !ruby/object:Gem::Version
|
|
341
|
+
version: '0.17'
|
|
342
|
+
type: :development
|
|
343
|
+
prerelease: false
|
|
344
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
345
|
+
requirements:
|
|
346
|
+
- - "~>"
|
|
347
|
+
- !ruby/object:Gem::Version
|
|
348
|
+
version: '0.17'
|
|
265
349
|
- !ruby/object:Gem::Dependency
|
|
266
350
|
name: warning
|
|
267
351
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -300,8 +384,10 @@ files:
|
|
|
300
384
|
- ".env"
|
|
301
385
|
- ".github/CODEOWNERS"
|
|
302
386
|
- ".gitignore"
|
|
387
|
+
- ".gitlab-ci.yml"
|
|
303
388
|
- ".rspec"
|
|
304
389
|
- ".rubocop.yml"
|
|
390
|
+
- ".simplecov"
|
|
305
391
|
- ".yardopts"
|
|
306
392
|
- Appraisals
|
|
307
393
|
- CHANGELOG.md
|
|
@@ -475,7 +561,29 @@ files:
|
|
|
475
561
|
- lib/ddtrace/contrib/http/integration.rb
|
|
476
562
|
- lib/ddtrace/contrib/http/patcher.rb
|
|
477
563
|
- lib/ddtrace/contrib/http_annotation_helper.rb
|
|
564
|
+
- lib/ddtrace/contrib/httprb/configuration/settings.rb
|
|
565
|
+
- lib/ddtrace/contrib/httprb/ext.rb
|
|
566
|
+
- lib/ddtrace/contrib/httprb/instrumentation.rb
|
|
567
|
+
- lib/ddtrace/contrib/httprb/integration.rb
|
|
568
|
+
- lib/ddtrace/contrib/httprb/patcher.rb
|
|
478
569
|
- lib/ddtrace/contrib/integration.rb
|
|
570
|
+
- lib/ddtrace/contrib/kafka/configuration/settings.rb
|
|
571
|
+
- lib/ddtrace/contrib/kafka/consumer_event.rb
|
|
572
|
+
- lib/ddtrace/contrib/kafka/consumer_group_event.rb
|
|
573
|
+
- lib/ddtrace/contrib/kafka/event.rb
|
|
574
|
+
- lib/ddtrace/contrib/kafka/events.rb
|
|
575
|
+
- lib/ddtrace/contrib/kafka/events/connection/request.rb
|
|
576
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb
|
|
577
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_message.rb
|
|
578
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb
|
|
579
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb
|
|
580
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb
|
|
581
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb
|
|
582
|
+
- lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb
|
|
583
|
+
- lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb
|
|
584
|
+
- lib/ddtrace/contrib/kafka/ext.rb
|
|
585
|
+
- lib/ddtrace/contrib/kafka/integration.rb
|
|
586
|
+
- lib/ddtrace/contrib/kafka/patcher.rb
|
|
479
587
|
- lib/ddtrace/contrib/mongodb/configuration/settings.rb
|
|
480
588
|
- lib/ddtrace/contrib/mongodb/ext.rb
|
|
481
589
|
- lib/ddtrace/contrib/mongodb/instrumentation.rb
|
|
@@ -495,10 +603,16 @@ files:
|
|
|
495
603
|
- lib/ddtrace/contrib/presto/instrumentation.rb
|
|
496
604
|
- lib/ddtrace/contrib/presto/integration.rb
|
|
497
605
|
- lib/ddtrace/contrib/presto/patcher.rb
|
|
606
|
+
- lib/ddtrace/contrib/que/configuration/settings.rb
|
|
607
|
+
- lib/ddtrace/contrib/que/ext.rb
|
|
608
|
+
- lib/ddtrace/contrib/que/integration.rb
|
|
609
|
+
- lib/ddtrace/contrib/que/patcher.rb
|
|
610
|
+
- lib/ddtrace/contrib/que/tracer.rb
|
|
498
611
|
- lib/ddtrace/contrib/racecar/configuration/settings.rb
|
|
499
612
|
- lib/ddtrace/contrib/racecar/event.rb
|
|
500
613
|
- lib/ddtrace/contrib/racecar/events.rb
|
|
501
614
|
- lib/ddtrace/contrib/racecar/events/batch.rb
|
|
615
|
+
- lib/ddtrace/contrib/racecar/events/consume.rb
|
|
502
616
|
- lib/ddtrace/contrib/racecar/events/message.rb
|
|
503
617
|
- lib/ddtrace/contrib/racecar/ext.rb
|
|
504
618
|
- lib/ddtrace/contrib/racecar/integration.rb
|
|
@@ -513,6 +627,7 @@ files:
|
|
|
513
627
|
- lib/ddtrace/contrib/rails/ext.rb
|
|
514
628
|
- lib/ddtrace/contrib/rails/framework.rb
|
|
515
629
|
- lib/ddtrace/contrib/rails/integration.rb
|
|
630
|
+
- lib/ddtrace/contrib/rails/log_injection.rb
|
|
516
631
|
- lib/ddtrace/contrib/rails/middlewares.rb
|
|
517
632
|
- lib/ddtrace/contrib/rails/patcher.rb
|
|
518
633
|
- lib/ddtrace/contrib/rails/railtie.rb
|
|
@@ -569,6 +684,11 @@ files:
|
|
|
569
684
|
- lib/ddtrace/contrib/sinatra/patcher.rb
|
|
570
685
|
- lib/ddtrace/contrib/sinatra/tracer.rb
|
|
571
686
|
- lib/ddtrace/contrib/sinatra/tracer_middleware.rb
|
|
687
|
+
- lib/ddtrace/contrib/sneakers/configuration/settings.rb
|
|
688
|
+
- lib/ddtrace/contrib/sneakers/ext.rb
|
|
689
|
+
- lib/ddtrace/contrib/sneakers/integration.rb
|
|
690
|
+
- lib/ddtrace/contrib/sneakers/patcher.rb
|
|
691
|
+
- lib/ddtrace/contrib/sneakers/tracer.rb
|
|
572
692
|
- lib/ddtrace/contrib/sucker_punch/configuration/settings.rb
|
|
573
693
|
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
|
574
694
|
- lib/ddtrace/contrib/sucker_punch/ext.rb
|
|
@@ -576,6 +696,7 @@ files:
|
|
|
576
696
|
- lib/ddtrace/contrib/sucker_punch/integration.rb
|
|
577
697
|
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
|
578
698
|
- lib/ddtrace/correlation.rb
|
|
699
|
+
- lib/ddtrace/diagnostics/environment_logger.rb
|
|
579
700
|
- lib/ddtrace/diagnostics/health.rb
|
|
580
701
|
- lib/ddtrace/distributed_tracing/headers/b3.rb
|
|
581
702
|
- lib/ddtrace/distributed_tracing/headers/b3_single.rb
|
|
@@ -713,8 +834,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
713
834
|
- !ruby/object:Gem::Version
|
|
714
835
|
version: 2.0.0
|
|
715
836
|
requirements: []
|
|
716
|
-
|
|
717
|
-
rubygems_version: 2.7.6.2
|
|
837
|
+
rubygems_version: 3.0.3
|
|
718
838
|
signing_key:
|
|
719
839
|
specification_version: 4
|
|
720
840
|
summary: Datadog tracing code for your Ruby applications
|