ddtrace 0.37.0 → 0.42.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 +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
|