ddtrace 0.35.1 → 0.39.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 +3 -1
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +26 -0
- data/.rubocop.yml +4 -0
- data/Appraisals +52 -11
- data/CHANGELOG.md +135 -1
- data/Rakefile +109 -75
- data/ddtrace.gemspec +5 -0
- data/docker-compose.yml +37 -2
- data/docs/GettingStarted.md +146 -82
- data/lib/ddtrace.rb +3 -0
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/options.rb +1 -1
- 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/action_controller/instrumentation.rb +7 -0
- 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 +20 -1
- 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/circuit_breaker.rb +8 -32
- 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 +13 -8
- 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/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/ext.rb +5 -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 +15 -12
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +20 -13
- data/lib/ddtrace/contrib/rails/ext.rb +5 -2
- data/lib/ddtrace/contrib/rails/framework.rb +52 -46
- data/lib/ddtrace/contrib/rails/integration.rb +1 -1
- 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/ext.rb +5 -2
- 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/trace_writer.rb +3 -0
- data/lib/ddtrace/writer.rb +33 -12
- metadata +114 -29
data/lib/ddtrace/environment.rb
CHANGED
@@ -6,20 +6,34 @@ module Datadog
|
|
6
6
|
# Defines helper methods for environment
|
7
7
|
module Helpers
|
8
8
|
def env_to_bool(var, default = nil)
|
9
|
-
|
9
|
+
var = decode_array(var)
|
10
|
+
var && ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
|
11
|
+
end
|
12
|
+
|
13
|
+
def env_to_int(var, default = nil)
|
14
|
+
var = decode_array(var)
|
15
|
+
var && ENV.key?(var) ? ENV[var].to_i : default
|
10
16
|
end
|
11
17
|
|
12
18
|
def env_to_float(var, default = nil)
|
13
|
-
|
19
|
+
var = decode_array(var)
|
20
|
+
var && ENV.key?(var) ? ENV[var].to_f : default
|
14
21
|
end
|
15
22
|
|
16
23
|
def env_to_list(var, default = [])
|
17
|
-
|
24
|
+
var = decode_array(var)
|
25
|
+
if var && ENV.key?(var)
|
18
26
|
ENV[var].split(',').map(&:strip)
|
19
27
|
else
|
20
28
|
default
|
21
29
|
end
|
22
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def decode_array(var)
|
35
|
+
var.is_a?(Array) ? var.find { |env_var| ENV.key?(env_var) } : var
|
36
|
+
end
|
23
37
|
end
|
24
38
|
|
25
39
|
extend Helpers
|
@@ -6,6 +6,7 @@ module Datadog
|
|
6
6
|
DEFAULT_PORT = 8126
|
7
7
|
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
|
8
8
|
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
|
9
|
+
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'.freeze
|
9
10
|
HEADER_CONTAINER_ID = 'Datadog-Container-ID'.freeze
|
10
11
|
HEADER_META_LANG = 'Datadog-Meta-Lang'.freeze
|
11
12
|
HEADER_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
|
data/lib/ddtrace/logger.rb
CHANGED
data/lib/ddtrace/pin.rb
CHANGED
@@ -12,26 +12,36 @@ module Datadog
|
|
12
12
|
obj.datadog_pin
|
13
13
|
end
|
14
14
|
|
15
|
-
attr_reader :service_name
|
16
15
|
attr_accessor :app
|
17
|
-
attr_accessor :tags
|
18
16
|
attr_accessor :app_type
|
19
|
-
attr_accessor :name
|
20
|
-
attr_accessor :tracer
|
21
17
|
attr_accessor :config
|
18
|
+
attr_accessor :name
|
19
|
+
attr_accessor :service_name
|
20
|
+
attr_accessor :tags
|
21
|
+
attr_reader :tracer
|
22
|
+
attr_accessor :writer
|
23
|
+
|
24
|
+
alias service= service_name=
|
25
|
+
alias service service_name
|
22
26
|
|
23
27
|
def initialize(service_name, options = {})
|
28
|
+
deprecation_warning unless options[:tracer].is_a?(Proc) || options[:tracer].nil?
|
29
|
+
|
24
30
|
@app = options[:app]
|
25
|
-
@tags = options[:tags]
|
26
31
|
@app_type = options[:app_type]
|
27
|
-
@name = nil # this would rarely be overriden as it's really span-specific
|
28
|
-
@tracer = options[:tracer] || Datadog.tracer
|
29
32
|
@config = options[:config]
|
30
|
-
|
33
|
+
@name = nil # this would rarely be overriden as it's really span-specific
|
34
|
+
@service_name = service_name
|
35
|
+
@tags = options[:tags]
|
36
|
+
@tracer = options[:tracer]
|
37
|
+
end
|
38
|
+
|
39
|
+
def tracer
|
40
|
+
@tracer.is_a?(Proc) ? @tracer.call : (@tracer || Datadog.tracer)
|
31
41
|
end
|
32
42
|
|
33
43
|
def enabled?
|
34
|
-
return
|
44
|
+
return tracer.enabled if tracer
|
35
45
|
false
|
36
46
|
end
|
37
47
|
|
@@ -56,15 +66,29 @@ module Datadog
|
|
56
66
|
obj.datadog_pin = self
|
57
67
|
end
|
58
68
|
|
59
|
-
def
|
60
|
-
|
69
|
+
def to_s
|
70
|
+
"Pin(service:#{service},app:#{app},app_type:#{app_type},name:#{name})"
|
61
71
|
end
|
62
72
|
|
63
|
-
|
64
|
-
alias service service_name
|
73
|
+
private
|
65
74
|
|
66
|
-
|
67
|
-
|
75
|
+
DEPRECATION_WARNING = %(
|
76
|
+
Explicitly providing a tracer instance is DEPRECATED.
|
77
|
+
It's recommended to not provide an explicit tracer instance
|
78
|
+
and let Datadog::Pin resolve the correct tracer internally.
|
79
|
+
).freeze
|
80
|
+
|
81
|
+
def deprecation_warning
|
82
|
+
log_deprecation_warning('Datadog::Pin.new')
|
83
|
+
end
|
84
|
+
|
85
|
+
include Datadog::Patcher
|
86
|
+
|
87
|
+
def log_deprecation_warning(method_name)
|
88
|
+
# Only log each deprecation warning once (safeguard against log spam)
|
89
|
+
do_once(method_name) do
|
90
|
+
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
91
|
+
end
|
68
92
|
end
|
69
93
|
end
|
70
94
|
|
@@ -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
|