ddtrace 0.15.0.internaltracinfeature1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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