ddtrace 0.15.0.internaltracinfeature1 → 0.15.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6700cc19b4e8774fd5704faae484af128420ad0dbea55eea1834a066bb4b00a
4
- data.tar.gz: 167719d0a22192b44c94f11ef6a0f16f42de17b8c15afe6490e0e133858e0048
3
+ metadata.gz: 83a0125cb996a905f1d25812abb1f64d4703b4ba870b378dbb746675322ea7f4
4
+ data.tar.gz: 98dbbbffe51a7912106269183b12f41fea114f1b7fa7dc42e3266ad910ba57ff
5
5
  SHA512:
6
- metadata.gz: 1d82cd8c84a8f4df0b50d0d4d6d6e5a90b7d4c6638694f1fafd11e7fdcbcdfbf4ef3aab200cf56aa8a04d218fb06f985f14b618c9ad2e6be5cf3c89a28fb86db
7
- data.tar.gz: a34c49958997bc2fdc0b50f09718f3675e11d4d91268bc8b0bed4ca40f3b7096ed56cbee1818e3b65af28a52d9f2435fbcb75f974e240e121829be29b62ac23a
6
+ metadata.gz: 4f750d5f3418be21196ee9109f1faa9eb904baf7bd5d4f8eb07b00e6bce5f1b7dc393e080a4be53e350bbfbeedf3216823b4b58df7720fa64688fb9c1ab10f64
7
+ data.tar.gz: 4c056618940a40462006828d0ede6613a51e78c062555544605480f540a471747a9fb76c9ee496dc3b9b82f7595a77df4a933d14eed3db18457a61c9c76ff880
@@ -14,37 +14,27 @@ module Datadog
14
14
 
15
15
  module_function
16
16
 
17
- def tracing_transport?(req, address, port, transport)
17
+ def should_skip_tracing?(req, address, port, transport, pin)
18
18
  # we don't want to trace our own call to the API (they use net/http)
19
19
  # when we know the host & port (from the URI) we use it, else (most-likely
20
20
  # called with a block) rely on the URL at the end.
21
21
  if req.respond_to?(:uri) && req.uri
22
22
  if req.uri.host.to_s == transport.hostname.to_s &&
23
23
  req.uri.port.to_i == transport.port.to_i
24
- true
24
+ return true
25
25
  end
26
26
  elsif address && port &&
27
27
  address.to_s == transport.hostname.to_s &&
28
28
  port.to_i == transport.port.to_i
29
- true
29
+ return true
30
30
  end
31
- end
32
-
33
- def tracing_recursive_request?(tracer)
34
31
  # we don't want a "shotgun" effect with two nested traces for one
35
32
  # logical get, and request is likely to call itself recursively
36
- active = tracer.active_span
33
+ active = pin.tracer.active_span()
37
34
  return true if active && (active.name == NAME)
38
35
  false
39
36
  end
40
37
 
41
- # @deprecated This method will be removed in 1.0
42
- def should_skip_tracing?(req, address, port, transport, pin)
43
- Datadog::Tracer.log.error('should_skip_tracing? will be deprecated in 1.0')
44
-
45
- tracing_transport?(req, address, port, transport) || tracing_recursive_request?(pin.tracer)
46
- end
47
-
48
38
  def should_skip_distributed_tracing?(pin)
49
39
  if pin.config && pin.config.key?(:distributed_tracing)
50
40
  return !pin.config[:distributed_tracing]
@@ -109,15 +99,12 @@ module Datadog
109
99
  end
110
100
 
111
101
  def request(req, body = nil, &block) # :yield: +response+
112
- transport = Datadog.configuration[:http][:tracer].writer.transport
113
- if Datadog::Contrib::HTTP.tracing_transport?(req, @address, @port, transport)
114
- return request_without_datadog(req, body, &block)
115
- end
116
-
117
102
  pin = datadog_pin
118
103
  return request_without_datadog(req, body, &block) unless pin && pin.tracer
119
104
 
120
- if Datadog::Contrib::HTTP.tracing_recursive_request?(pin.tracer)
105
+ transport = pin.tracer.writer.transport
106
+
107
+ if Datadog::Contrib::HTTP.should_skip_tracing?(req, @address, @port, transport, pin)
121
108
  return request_without_datadog(req, body, &block)
122
109
  end
123
110
 
@@ -20,7 +20,7 @@ module Datadog
20
20
  # rubocop:disable Metrics/ClassLength
21
21
  class Tracer
22
22
  attr_reader :sampler, :services, :tags, :provider
23
- attr_accessor :enabled, :writer, :internal_traces
23
+ attr_accessor :enabled, :writer
24
24
  attr_writer :default_service
25
25
 
26
26
  ALLOWED_SPAN_OPTIONS = [:service, :resource, :span_type].freeze
@@ -102,7 +102,6 @@ module Datadog
102
102
  @provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
103
103
 
104
104
  @context_flush = options[:partial_flush] ? Datadog::ContextFlush.new(options) : nil
105
- @internal_traces = options[:internal_traces] || false
106
105
 
107
106
  @mutex = Mutex.new
108
107
  @services = {}
@@ -124,7 +123,6 @@ module Datadog
124
123
  enabled = options.fetch(:enabled, nil)
125
124
  hostname = options.fetch(:hostname, nil)
126
125
  port = options.fetch(:port, nil)
127
- @internal_traces = options.fetch(:internal_traces, false)
128
126
 
129
127
  # Those are rare "power-user" options.
130
128
  sampler = options.fetch(:sampler, nil)
@@ -3,7 +3,6 @@ require 'net/http'
3
3
 
4
4
  require 'ddtrace/encoding'
5
5
  require 'ddtrace/version'
6
- require 'ddtrace/utils'
7
6
 
8
7
  module Datadog
9
8
  # Transport class that handles the spans delivery to the
@@ -11,9 +10,6 @@ module Datadog
11
10
  # so that the Transport is thread-safe.
12
11
  # rubocop:disable Metrics/ClassLength
13
12
  class HTTPTransport
14
- include Datadog::Utils::InternalTraces
15
- self.internal_trace_service = 'datadog.transport'.freeze
16
-
17
13
  attr_accessor :hostname, :port
18
14
  attr_reader :traces_endpoint, :services_endpoint
19
15
 
@@ -49,12 +45,6 @@ module Datadog
49
45
 
50
46
  private_constant :API
51
47
 
52
- CONTENT_TYPE = 'Content-Type'.freeze
53
- DATADOG_META_LANG = 'Datadog-Meta-Lang'.freeze
54
- DATADOG_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
55
- DATADOG_META_LANG_INTERPRETER = 'Datadog-Meta-Lang-Interpreter'.freeze
56
- DATADOG_META_TRACER_VERSION = 'Datadog-Meta-Tracer-Version'.freeze
57
-
58
48
  def initialize(hostname, port, options = {})
59
49
  api_version = options.fetch(:api_version, V3)
60
50
 
@@ -66,11 +56,11 @@ module Datadog
66
56
 
67
57
  # overwrite the Content-type with the one chosen in the Encoder
68
58
  @headers = options.fetch(:headers, {})
69
- @headers[CONTENT_TYPE] = @encoder.content_type
70
- @headers[DATADOG_META_LANG] = 'ruby'.freeze
71
- @headers[DATADOG_META_LANG_VERSION] = RUBY_VERSION
72
- @headers[DATADOG_META_LANG_INTERPRETER] = RUBY_INTERPRETER
73
- @headers[DATADOG_META_TRACER_VERSION] = Datadog::VERSION::STRING
59
+ @headers['Content-Type'] = @encoder.content_type
60
+ @headers['Datadog-Meta-Lang'] = 'ruby'
61
+ @headers['Datadog-Meta-Lang-Version'] = RUBY_VERSION
62
+ @headers['Datadog-Meta-Lang-Interpreter'] = RUBY_INTERPRETER
63
+ @headers['Datadog-Meta-Tracer-Version'] = Datadog::VERSION::STRING
74
64
 
75
65
  # stats
76
66
  @mutex = Mutex.new
@@ -83,27 +73,28 @@ module Datadog
83
73
 
84
74
  # route the send to the right endpoint
85
75
  def send(endpoint, data)
86
- internal_span_when(-> { do_trace?(data) }, 'datadog.send'.freeze) do
87
- case endpoint
88
- when :services
89
- status_code = send_services(data)
90
- when :traces
91
- status_code = send_traces(data)
92
- else
93
- with_active_internal_span { |s| s.set_error(RuntimeError.new("Unsupported endpoint: #{endpoint}")) }
94
-
95
- Datadog::Tracer.log.error("Unsupported endpoint: #{endpoint}")
96
- return nil
76
+ case endpoint
77
+ when :services
78
+ payload = @encoder.encode_services(data)
79
+ status_code = post(@api[:services_endpoint], payload) do |response|
80
+ process_callback(:services, response)
97
81
  end
98
-
99
- if downgrade?(status_code)
100
- internal_child_span('datadog.send.downgrade'.freeze) do
101
- downgrade!
102
- send(endpoint, data)
103
- end
104
- else
105
- status_code
82
+ when :traces
83
+ count = data.length
84
+ payload = @encoder.encode_traces(data)
85
+ status_code = post(@api[:traces_endpoint], payload, count) do |response|
86
+ process_callback(:traces, response)
106
87
  end
88
+ else
89
+ Datadog::Tracer.log.error("Unsupported endpoint: #{endpoint}")
90
+ return nil
91
+ end
92
+
93
+ if downgrade?(status_code)
94
+ downgrade!
95
+ send(endpoint, data)
96
+ else
97
+ status_code
107
98
  end
108
99
  end
109
100
 
@@ -115,11 +106,10 @@ module Datadog
115
106
  headers = headers.merge(@headers)
116
107
  request = Net::HTTP::Post.new(url, headers)
117
108
  request.body = data
109
+
118
110
  response = Net::HTTP.start(@hostname, @port, read_timeout: TIMEOUT) { |http| http.request(request) }
119
111
  handle_response(response)
120
112
  rescue StandardError => e
121
- with_active_internal_span { |s| s.set_error(e) }
122
-
123
113
  log_error_once(e.message)
124
114
  500
125
115
  end.tap do
@@ -136,7 +126,7 @@ module Datadog
136
126
 
137
127
  @api = API.fetch(fallback_version)
138
128
  @encoder = @api[:encoder].new
139
- @headers[CONTENT_TYPE] = @encoder.content_type
129
+ @headers['Content-Type'] = @encoder.content_type
140
130
  end
141
131
  end
142
132
 
@@ -178,10 +168,9 @@ module Datadog
178
168
  # function is handled within the HTTP mutex.synchronize so it's thread-safe.
179
169
  def handle_response(response)
180
170
  status_code = response.code.to_i
181
- with_active_internal_span { |s| s.set_tag('response.code', status_code) }
182
171
 
183
172
  if success?(status_code)
184
- Datadog::Tracer.log.debug('Payload correctly sent to the trace agent.'.freeze)
173
+ Datadog::Tracer.log.debug('Payload correctly sent to the trace agent.')
185
174
  @mutex.synchronize { @count_consecutive_errors = 0 }
186
175
  @mutex.synchronize { @count_success += 1 }
187
176
  elsif downgrade?(status_code)
@@ -197,7 +186,6 @@ module Datadog
197
186
  rescue StandardError => e
198
187
  log_error_once(e.message)
199
188
  @mutex.synchronize { @count_internal_error += 1 }
200
- with_active_internal_span { |s| s.set_error(e) }
201
189
 
202
190
  500
203
191
  end
@@ -215,54 +203,6 @@ module Datadog
215
203
 
216
204
  private
217
205
 
218
- def do_trace?(data)
219
- # Create the span if we already are traced
220
- return true if Datadog.tracer.active_span
221
- # Don't trace empty data
222
- return false unless data
223
-
224
- # over 3 traces means that we most certainly send more than only internal traces
225
- return true if data.length > 3
226
-
227
- # all spans in all traces shouldn't be only 'datadog.internal' spans
228
- !data.respond_to?(:all?) || data.all? do |trace|
229
- !trace.respond_to?(:none?) || trace.none? do |span|
230
- span.respond_to?(:get_tag) && span.get_tag(Utils::InternalTraces::INTERNAL_TAG)
231
- end
232
- end
233
- end
234
-
235
- def send_traces(data)
236
- count = data.length
237
-
238
- payload = internal_child_span('datadog.encode.traces'.freeze) do
239
- with_active_internal_span { |s| s.set_tag('traces.count'.freeze, count) }
240
- @encoder.encode_traces(data)
241
- end
242
-
243
- internal_child_span('datadog.traces.post'.freeze) do
244
- post(@api[:traces_endpoint], payload, count) do |response|
245
- internal_child_span('datadog.traces.response_callback'.freeze) do
246
- process_callback(:traces, response)
247
- end
248
- end
249
- end
250
- end
251
-
252
- def send_services(data)
253
- payload = internal_child_span('datadog.services.encode'.freeze) do
254
- @encoder.encode_services(data)
255
- end
256
-
257
- internal_child_span('datadog.services.post'.freeze) do
258
- post(@api[:services_endpoint], payload) do |response|
259
- internal_child_span('datadog.services.response_callback'.freeze) do
260
- process_callback(:services, response)
261
- end
262
- end
263
- end
264
- end
265
-
266
206
  def log_error_once(*args)
267
207
  if @count_consecutive_errors > 0
268
208
  Datadog::Tracer.log.debug(*args)
data/lib/ddtrace/utils.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'ddtrace/utils/database'
2
- require 'ddtrace/utils/internal_traces'
3
2
 
4
3
  module Datadog
5
4
  # Utils contains low-level utilities, typically to provide pseudo-random trace IDs.
@@ -3,7 +3,7 @@ module Datadog
3
3
  MAJOR = 0
4
4
  MINOR = 15
5
5
  PATCH = 0
6
- PRE = 'internaltracinfeature1'
6
+ PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
9
9
  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.15.0.internaltracinfeature1
4
+ version: 0.15.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: 2018-09-26 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -420,7 +420,6 @@ files:
420
420
  - lib/ddtrace/transport.rb
421
421
  - lib/ddtrace/utils.rb
422
422
  - lib/ddtrace/utils/database.rb
423
- - lib/ddtrace/utils/internal_traces.rb
424
423
  - lib/ddtrace/vendor/active_record/connection_specification.rb
425
424
  - lib/ddtrace/version.rb
426
425
  - lib/ddtrace/workers.rb
@@ -441,9 +440,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
441
440
  version: 1.9.1
442
441
  required_rubygems_version: !ruby/object:Gem::Requirement
443
442
  requirements:
444
- - - ">"
443
+ - - ">="
445
444
  - !ruby/object:Gem::Version
446
- version: 1.3.1
445
+ version: '0'
447
446
  requirements: []
448
447
  rubyforge_project:
449
448
  rubygems_version: 2.7.7
@@ -1,53 +0,0 @@
1
- module Datadog
2
- module Utils
3
- # Traces generated by the client internals
4
- module InternalTraces
5
- def self.included(klass)
6
- klass.extend(ClassMethods)
7
- end
8
-
9
- # ClassMethods
10
- module ClassMethods
11
- attr_writer :internal_trace_service
12
-
13
- def internal_trace_service
14
- @internal_trace_service ||= 'datadog.unknown'.freeze
15
- end
16
- end
17
-
18
- INTERNAL_TAG = 'datadog.internal'.freeze
19
-
20
- def internal_span(name, *args)
21
- return yield unless Datadog.tracer.internal_traces
22
-
23
- Datadog.tracer.trace(name, *args) do |span|
24
- span.set_tag(INTERNAL_TAG, true)
25
- span.service = self.class.internal_trace_service
26
- yield
27
- end
28
- end
29
-
30
- def internal_span_when(condition, name, *args, &block)
31
- return yield unless Datadog.tracer.internal_traces
32
-
33
- condition = condition.call if condition.respond_to?(:send)
34
- return yield unless condition
35
-
36
- internal_span(name, *args, &block)
37
- end
38
-
39
- def internal_child_span(name, *args, &block)
40
- return yield unless Datadog.tracer.internal_traces
41
-
42
- internal_span_when(-> { Datadog.tracer.active_span }, name, *args, &block)
43
- end
44
-
45
- def with_active_internal_span
46
- return unless Datadog.tracer.internal_traces
47
-
48
- span = Datadog.tracer.active_span
49
- yield(span) if span && span.get_tag(INTERNAL_TAG)
50
- end
51
- end
52
- end
53
- end