ddtrace 0.37.0 → 0.42.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +56 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +1 -0
- data/.simplecov +38 -0
- data/Appraisals +186 -11
- data/CHANGELOG.md +188 -1
- data/CONTRIBUTING.md +1 -1
- data/Rakefile +518 -482
- data/ddtrace.gemspec +3 -0
- data/docker-compose.yml +2 -2
- data/docs/DevelopmentGuide.md +26 -0
- data/docs/GettingStarted.md +188 -78
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/buffer.rb +259 -52
- data/lib/ddtrace/configuration.rb +39 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/configuration/options.rb +3 -1
- data/lib/ddtrace/configuration/settings.rb +32 -4
- data/lib/ddtrace/context_provider.rb +6 -5
- 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/events/sql.rb +4 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- 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/subscription.rb +3 -3
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/aws/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +1 -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/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +37 -15
- 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 +4 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +4 -2
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +4 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/middleware.rb +4 -0
- data/lib/ddtrace/contrib/extensions.rb +11 -1
- 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 +9 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +12 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/endpoint.rb +6 -4
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +6 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- 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 +4 -0
- 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 +163 -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/subscribers.rb +4 -0
- 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 +4 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/presto/ext.rb +5 -2
- data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -0
- 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/event.rb +4 -0
- 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 +12 -2
- data/lib/ddtrace/contrib/rails/ext.rb +6 -2
- 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 +26 -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/tags.rb +4 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- 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 +6 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +3 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
- data/lib/ddtrace/contrib/sequel/ext.rb +6 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +35 -6
- 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/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/integration.rb +8 -0
- data/lib/ddtrace/ext/runtime.rb +1 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/opentracer/distributed_headers.rb +1 -1
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/propagation/grpc_propagator.rb +18 -6
- data/lib/ddtrace/runtime/metrics.rb +24 -6
- data/lib/ddtrace/sampler.rb +4 -2
- data/lib/ddtrace/span.rb +162 -27
- data/lib/ddtrace/tracer.rb +24 -18
- data/lib/ddtrace/transport/http.rb +15 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +16 -2
- 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/http/statistics.rb +14 -1
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/transport/traces.rb +7 -2
- data/lib/ddtrace/utils.rb +7 -3
- data/lib/ddtrace/version.rb +1 -1
- 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 +81 -2
@@ -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)
|
@@ -20,8 +20,14 @@ module Datadog
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def open
|
23
|
-
#
|
24
|
-
|
23
|
+
# DEV Initializing +Net::HTTP+ directly help us avoid expensive
|
24
|
+
# options processing done in +Net::HTTP.start+:
|
25
|
+
# https://github.com/ruby/ruby/blob/b2d96abb42abbe2e01f010ffc9ac51f0f9a50002/lib/net/http.rb#L614-L618
|
26
|
+
req = ::Net::HTTP.new(hostname, port, nil)
|
27
|
+
|
28
|
+
req.open_timeout = req.read_timeout = timeout
|
29
|
+
|
30
|
+
req.start do |http|
|
25
31
|
yield(http)
|
26
32
|
end
|
27
33
|
end
|
@@ -47,6 +53,10 @@ module Datadog
|
|
47
53
|
Response.new(http_response)
|
48
54
|
end
|
49
55
|
|
56
|
+
def url
|
57
|
+
"http://#{hostname}:#{port}?timeout=#{timeout}"
|
58
|
+
end
|
59
|
+
|
50
60
|
# Raised when called with an unknown HTTP method
|
51
61
|
class UnknownHTTPMethod < StandardError
|
52
62
|
attr_reader :verb
|
@@ -104,6 +114,10 @@ module Datadog
|
|
104
114
|
return super if http_response.nil?
|
105
115
|
code.between?(500, 599)
|
106
116
|
end
|
117
|
+
|
118
|
+
def inspect
|
119
|
+
"#{super}, http_response:#{http_response}"
|
120
|
+
end
|
107
121
|
end
|
108
122
|
end
|
109
123
|
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
|
@@ -18,11 +18,24 @@ module Datadog
|
|
18
18
|
# Add status code tag to api.responses metric
|
19
19
|
if metrics.key?(:api_responses)
|
20
20
|
(metrics[:api_responses].options[:tags] ||= []).tap do |tags|
|
21
|
-
tags <<
|
21
|
+
tags << metrics_tag_value(response.code)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# The most common status code on a healthy tracer
|
30
|
+
STATUS_CODE_200 = 'status_code:200'.freeze
|
31
|
+
|
32
|
+
def metrics_tag_value(status_code)
|
33
|
+
if status_code == 200
|
34
|
+
STATUS_CODE_200 # DEV Saves string concatenation/creation for common case
|
35
|
+
else
|
36
|
+
"status_code:#{status_code}"
|
37
|
+
end
|
38
|
+
end
|
26
39
|
end
|
27
40
|
end
|
28
41
|
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
|
@@ -57,7 +57,12 @@ module Datadog
|
|
57
57
|
# @return [Enumerable[Array[Bytes,Integer]]] list of encoded chunks: each containing a byte array and
|
58
58
|
# number of traces
|
59
59
|
def encode_in_chunks(traces)
|
60
|
-
encoded_traces = traces.
|
60
|
+
encoded_traces = if traces.respond_to?(:filter_map)
|
61
|
+
# DEV Supported since Ruby 2.7, saves an intermediate object creation
|
62
|
+
traces.filter_map { |t| encode_one(t) }
|
63
|
+
else
|
64
|
+
traces.map { |t| encode_one(t) }.reject(&:nil?)
|
65
|
+
end
|
61
66
|
|
62
67
|
Datadog::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
|
63
68
|
[encoder.join(chunk), chunk.size]
|
@@ -86,7 +91,7 @@ module Datadog
|
|
86
91
|
module_function
|
87
92
|
|
88
93
|
def encode_trace(encoder, trace)
|
89
|
-
encoder.encode(trace
|
94
|
+
encoder.encode(trace)
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
data/lib/ddtrace/utils.rb
CHANGED
@@ -3,7 +3,7 @@ require 'ddtrace/utils/database'
|
|
3
3
|
module Datadog
|
4
4
|
# Utils contains low-level utilities, typically to provide pseudo-random trace IDs.
|
5
5
|
module Utils
|
6
|
-
|
6
|
+
EMPTY_STRING = ''.encode(::Encoding::UTF_8).freeze
|
7
7
|
# We use a custom random number generator because we want no interference
|
8
8
|
# with the default one. Using the default prng, we could break code that
|
9
9
|
# would rely on srand/rand sequences.
|
@@ -12,7 +12,7 @@ module Datadog
|
|
12
12
|
def self.next_id
|
13
13
|
reset! if was_forked?
|
14
14
|
|
15
|
-
@rnd.rand(Datadog::Span::
|
15
|
+
@rnd.rand(Datadog::Span::RUBY_MAX_ID)
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.reset!
|
@@ -53,13 +53,17 @@ module Datadog
|
|
53
53
|
str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
54
54
|
elsif str.encoding == ::Encoding::UTF_8
|
55
55
|
str
|
56
|
+
elsif str.empty?
|
57
|
+
# DEV Optimization as `nil.to_s` is a very common source for an empty string,
|
58
|
+
# DEV but it comes encoded as US_ASCII.
|
59
|
+
EMPTY_STRING
|
56
60
|
else
|
57
61
|
str.encode(::Encoding::UTF_8)
|
58
62
|
end
|
59
63
|
rescue => e
|
60
64
|
Datadog.logger.debug("Error encoding string in UTF-8: #{e}")
|
61
65
|
|
62
|
-
options.fetch(:placeholder,
|
66
|
+
options.fetch(:placeholder, EMPTY_STRING)
|
63
67
|
end
|
64
68
|
end
|
65
69
|
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.42.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-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.4.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: concurrent-ruby
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,20 @@ dependencies:
|
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '1.1'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ruby-prof
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.4'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.4'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: minitest
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -332,6 +360,20 @@ dependencies:
|
|
332
360
|
- - "~>"
|
333
361
|
- !ruby/object:Gem::Version
|
334
362
|
version: 0.4.9.2
|
363
|
+
- !ruby/object:Gem::Dependency
|
364
|
+
name: simplecov
|
365
|
+
requirement: !ruby/object:Gem::Requirement
|
366
|
+
requirements:
|
367
|
+
- - "~>"
|
368
|
+
- !ruby/object:Gem::Version
|
369
|
+
version: '0.17'
|
370
|
+
type: :development
|
371
|
+
prerelease: false
|
372
|
+
version_requirements: !ruby/object:Gem::Requirement
|
373
|
+
requirements:
|
374
|
+
- - "~>"
|
375
|
+
- !ruby/object:Gem::Version
|
376
|
+
version: '0.17'
|
335
377
|
- !ruby/object:Gem::Dependency
|
336
378
|
name: warning
|
337
379
|
requirement: !ruby/object:Gem::Requirement
|
@@ -373,6 +415,7 @@ files:
|
|
373
415
|
- ".gitlab-ci.yml"
|
374
416
|
- ".rspec"
|
375
417
|
- ".rubocop.yml"
|
418
|
+
- ".simplecov"
|
376
419
|
- ".yardopts"
|
377
420
|
- Appraisals
|
378
421
|
- CHANGELOG.md
|
@@ -546,7 +589,29 @@ files:
|
|
546
589
|
- lib/ddtrace/contrib/http/integration.rb
|
547
590
|
- lib/ddtrace/contrib/http/patcher.rb
|
548
591
|
- lib/ddtrace/contrib/http_annotation_helper.rb
|
592
|
+
- lib/ddtrace/contrib/httprb/configuration/settings.rb
|
593
|
+
- lib/ddtrace/contrib/httprb/ext.rb
|
594
|
+
- lib/ddtrace/contrib/httprb/instrumentation.rb
|
595
|
+
- lib/ddtrace/contrib/httprb/integration.rb
|
596
|
+
- lib/ddtrace/contrib/httprb/patcher.rb
|
549
597
|
- lib/ddtrace/contrib/integration.rb
|
598
|
+
- lib/ddtrace/contrib/kafka/configuration/settings.rb
|
599
|
+
- lib/ddtrace/contrib/kafka/consumer_event.rb
|
600
|
+
- lib/ddtrace/contrib/kafka/consumer_group_event.rb
|
601
|
+
- lib/ddtrace/contrib/kafka/event.rb
|
602
|
+
- lib/ddtrace/contrib/kafka/events.rb
|
603
|
+
- lib/ddtrace/contrib/kafka/events/connection/request.rb
|
604
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb
|
605
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_message.rb
|
606
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb
|
607
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb
|
608
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb
|
609
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb
|
610
|
+
- lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb
|
611
|
+
- lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb
|
612
|
+
- lib/ddtrace/contrib/kafka/ext.rb
|
613
|
+
- lib/ddtrace/contrib/kafka/integration.rb
|
614
|
+
- lib/ddtrace/contrib/kafka/patcher.rb
|
550
615
|
- lib/ddtrace/contrib/mongodb/configuration/settings.rb
|
551
616
|
- lib/ddtrace/contrib/mongodb/ext.rb
|
552
617
|
- lib/ddtrace/contrib/mongodb/instrumentation.rb
|
@@ -566,10 +631,16 @@ files:
|
|
566
631
|
- lib/ddtrace/contrib/presto/instrumentation.rb
|
567
632
|
- lib/ddtrace/contrib/presto/integration.rb
|
568
633
|
- lib/ddtrace/contrib/presto/patcher.rb
|
634
|
+
- lib/ddtrace/contrib/que/configuration/settings.rb
|
635
|
+
- lib/ddtrace/contrib/que/ext.rb
|
636
|
+
- lib/ddtrace/contrib/que/integration.rb
|
637
|
+
- lib/ddtrace/contrib/que/patcher.rb
|
638
|
+
- lib/ddtrace/contrib/que/tracer.rb
|
569
639
|
- lib/ddtrace/contrib/racecar/configuration/settings.rb
|
570
640
|
- lib/ddtrace/contrib/racecar/event.rb
|
571
641
|
- lib/ddtrace/contrib/racecar/events.rb
|
572
642
|
- lib/ddtrace/contrib/racecar/events/batch.rb
|
643
|
+
- lib/ddtrace/contrib/racecar/events/consume.rb
|
573
644
|
- lib/ddtrace/contrib/racecar/events/message.rb
|
574
645
|
- lib/ddtrace/contrib/racecar/ext.rb
|
575
646
|
- lib/ddtrace/contrib/racecar/integration.rb
|
@@ -584,6 +655,7 @@ files:
|
|
584
655
|
- lib/ddtrace/contrib/rails/ext.rb
|
585
656
|
- lib/ddtrace/contrib/rails/framework.rb
|
586
657
|
- lib/ddtrace/contrib/rails/integration.rb
|
658
|
+
- lib/ddtrace/contrib/rails/log_injection.rb
|
587
659
|
- lib/ddtrace/contrib/rails/middlewares.rb
|
588
660
|
- lib/ddtrace/contrib/rails/patcher.rb
|
589
661
|
- lib/ddtrace/contrib/rails/railtie.rb
|
@@ -640,6 +712,11 @@ files:
|
|
640
712
|
- lib/ddtrace/contrib/sinatra/patcher.rb
|
641
713
|
- lib/ddtrace/contrib/sinatra/tracer.rb
|
642
714
|
- lib/ddtrace/contrib/sinatra/tracer_middleware.rb
|
715
|
+
- lib/ddtrace/contrib/sneakers/configuration/settings.rb
|
716
|
+
- lib/ddtrace/contrib/sneakers/ext.rb
|
717
|
+
- lib/ddtrace/contrib/sneakers/integration.rb
|
718
|
+
- lib/ddtrace/contrib/sneakers/patcher.rb
|
719
|
+
- lib/ddtrace/contrib/sneakers/tracer.rb
|
643
720
|
- lib/ddtrace/contrib/sucker_punch/configuration/settings.rb
|
644
721
|
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
645
722
|
- lib/ddtrace/contrib/sucker_punch/ext.rb
|
@@ -647,6 +724,7 @@ files:
|
|
647
724
|
- lib/ddtrace/contrib/sucker_punch/integration.rb
|
648
725
|
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
649
726
|
- lib/ddtrace/correlation.rb
|
727
|
+
- lib/ddtrace/diagnostics/environment_logger.rb
|
650
728
|
- lib/ddtrace/diagnostics/health.rb
|
651
729
|
- lib/ddtrace/distributed_tracing/headers/b3.rb
|
652
730
|
- lib/ddtrace/distributed_tracing/headers/b3_single.rb
|
@@ -666,6 +744,7 @@ files:
|
|
666
744
|
- lib/ddtrace/ext/errors.rb
|
667
745
|
- lib/ddtrace/ext/forced_tracing.rb
|
668
746
|
- lib/ddtrace/ext/http.rb
|
747
|
+
- lib/ddtrace/ext/integration.rb
|
669
748
|
- lib/ddtrace/ext/manual_tracing.rb
|
670
749
|
- lib/ddtrace/ext/metrics.rb
|
671
750
|
- lib/ddtrace/ext/net.rb
|