ddtrace 0.8.1 → 0.8.2

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
  SHA1:
3
- metadata.gz: 7416eda04ff6e9686b7409bc04a2208bf6b30a7f
4
- data.tar.gz: 7293c060f6b3bf6d2c53eaadffcedac89faa20f0
3
+ metadata.gz: 0fc0133019cee5e3bf12a664792a40ae95f320f7
4
+ data.tar.gz: 43f7412b5613d8fffc74ddd204bec29c81ac5118
5
5
  SHA512:
6
- metadata.gz: b6e80a1f921566158b2a6bb8efdfa79725c7a50876069ae74c1f1677eb4e424cdbf8c16d72eadad832ca9e25fd434f2dc17cfd23f5f19145bd09e1bbdbb97547
7
- data.tar.gz: ed535d01f21d1aa1095feed91259809a74c35651ccda8821fd9b7dba8548f445ea1e93fa1e0c98aaf7b9ce0fee903cd36c4837e319d1220cdd40e4dbdeb7cc50
6
+ metadata.gz: 9739cdc4f56336a81e6366b30658fa0f6670c403e7d5d2dd6014a3545f69fb4b3188acd0fb8b499a3a15e211f97ac3d50a81e5f3cc76cb9b8f612eb2778b18ac
7
+ data.tar.gz: 7b8c1ea6173c53e988548aca2a487357bf0022f23279e94c84097880c9a22866c3d0b9ef83ef34e18abfe85bdc12aa9760e55031b5ccd01020594ec78a2aa1a6
data/Appraisals CHANGED
@@ -124,7 +124,7 @@ if RUBY_VERSION >= '2.2.2' && RUBY_PLATFORM != 'java'
124
124
  else
125
125
  appraise 'contrib-old' do
126
126
  gem 'elasticsearch-transport'
127
- gem 'redis'
127
+ gem 'redis', '< 4.0.0'
128
128
  gem 'hiredis'
129
129
  gem 'rack', '1.4.7'
130
130
  gem 'rack-test'
@@ -112,7 +112,7 @@ If you wish to disable all Rails auto-instrumentation, you need to set the env v
112
112
 
113
113
  Eg, within Ruby:
114
114
 
115
- ENV['DISABLE_DATADOG_RAILS'] = 1 # this must be done before ddtrace is included at all
115
+ ENV['DISABLE_DATADOG_RAILS'] = "1" # this must be done before ddtrace is included at all
116
116
  require 'ddtrace'
117
117
 
118
118
  Or, shell syntax, before launching Rails:
@@ -167,6 +167,8 @@ retrieved at the Rack level.
167
167
  To start using the middleware in your generic Rack application, add it to your ``config.ru``:
168
168
 
169
169
  # config.ru example
170
+ require 'ddtrace/contrib/rack/middlewares'
171
+
170
172
  use Datadog::Contrib::Rack::TraceMiddleware
171
173
 
172
174
  app = proc do |env|
@@ -178,6 +180,9 @@ To start using the middleware in your generic Rack application, add it to your `
178
180
  Experimental distributed tracing support is available for this library.
179
181
  You need to set the ``:distributed_tracing_enabled`` option to true, for example:
180
182
 
183
+ # config.ru example
184
+ require 'ddtrace/contrib/rack/middlewares'
185
+
181
186
  use Datadog::Contrib::Rack::TraceMiddleware, distributed_tracing_enabled: true
182
187
 
183
188
  app = proc do |env|
@@ -192,6 +197,8 @@ See [distributed tracing](#Distributed_Tracing) for details.
192
197
  To modify the default middleware configuration, you can use middleware options as follows:
193
198
 
194
199
  # config.ru example
200
+ require 'ddtrace/contrib/rack/middlewares'
201
+
195
202
  Datadog.tracer.configure(
196
203
  enabled: true,
197
204
  hostname: localhost,
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "elasticsearch-transport"
6
- gem "redis"
6
+ gem "redis", "< 4.0.0"
7
7
  gem "hiredis"
8
8
  gem "rack", "1.4.7"
9
9
  gem "rack-test"
data/lib/ddtrace.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'ddtrace/monkey'
2
2
  require 'ddtrace/pin'
3
3
  require 'ddtrace/tracer'
4
+ require 'ddtrace/error'
4
5
 
5
6
  # \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
6
7
  module Datadog
@@ -40,7 +40,7 @@ module Datadog
40
40
 
41
41
  def configure
42
42
  # ensure that the configuration is executed only once
43
- return if @tracer && @service
43
+ return clean_context if @tracer && @service
44
44
 
45
45
  # retrieve the current tracer and service
46
46
  @tracer = @options.fetch(:tracer)
@@ -135,6 +135,15 @@ module Datadog
135
135
 
136
136
  [status, headers, response]
137
137
  end
138
+
139
+ private
140
+
141
+ # TODO: Remove this once we change how context propagation works. This
142
+ # ensures we clean thread-local variables on each HTTP request avoiding
143
+ # memory leaks.
144
+ def clean_context
145
+ @tracer.provider.context = Datadog::Context.new
146
+ end
138
147
  end
139
148
  end
140
149
  end
@@ -66,11 +66,7 @@ module Datadog
66
66
  else
67
67
  status = '500'
68
68
  end
69
- if status.starts_with?('5')
70
- span.status = 1
71
- span.set_tag(Datadog::Ext::Errors::TYPE, error[0])
72
- span.set_tag(Datadog::Ext::Errors::MSG, error[1])
73
- end
69
+ span.set_error(error) if status.starts_with?('5')
74
70
  end
75
71
  ensure
76
72
  span.start_time = start
@@ -74,13 +74,7 @@ module Datadog
74
74
  template_name = Datadog::Contrib::Rails::Utils.normalize_template_name(payload.fetch(:identifier))
75
75
  span.set_tag('rails.template_name', template_name)
76
76
  span.set_tag('rails.layout', payload.fetch(:layout))
77
-
78
- if payload[:exception]
79
- error = payload[:exception]
80
- span.status = 1
81
- span.set_tag(Datadog::Ext::Errors::TYPE, error[0])
82
- span.set_tag(Datadog::Ext::Errors::MSG, error[1])
83
- end
77
+ span.set_error(payload[:exception]) if payload[:exception]
84
78
  ensure
85
79
  span.start_time = start
86
80
  span.finish(finish)
@@ -102,13 +96,7 @@ module Datadog
102
96
  begin
103
97
  template_name = Datadog::Contrib::Rails::Utils.normalize_template_name(payload.fetch(:identifier))
104
98
  span.set_tag('rails.template_name', template_name)
105
-
106
- if payload[:exception]
107
- error = payload[:exception]
108
- span.status = 1
109
- span.set_tag(Datadog::Ext::Errors::TYPE, error[0])
110
- span.set_tag(Datadog::Ext::Errors::MSG, error[1])
111
- end
99
+ span.set_error(payload[:exception]) if payload[:exception]
112
100
  ensure
113
101
  span.start_time = start
114
102
  span.finish(finish)
@@ -97,13 +97,7 @@ module Datadog
97
97
  store, = *Array.wrap(::Rails.configuration.cache_store).flatten
98
98
  span.set_tag('rails.cache.backend', store)
99
99
  span.set_tag('rails.cache.key', payload.fetch(:key))
100
-
101
- if payload[:exception]
102
- error = payload[:exception]
103
- span.status = 1
104
- span.set_tag(Datadog::Ext::Errors::TYPE, error[0])
105
- span.set_tag(Datadog::Ext::Errors::MSG, error[1])
106
- end
100
+ span.set_error(payload[:exception]) if payload[:exception]
107
101
  ensure
108
102
  span.start_time = start
109
103
  span.finish(finish)
@@ -151,17 +151,7 @@ module Datadog
151
151
  span.resource = "#{request.request_method} #{@datadog_route}"
152
152
  span.set_tag('sinatra.route.path', @datadog_route)
153
153
  span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.status)
154
-
155
- if response.server_error?
156
- span.status = 1
157
-
158
- err = env['sinatra.error']
159
- if err
160
- span.set_tag(Datadog::Ext::Errors::TYPE, err.class)
161
- span.set_tag(Datadog::Ext::Errors::MSG, err.message)
162
- end
163
- end
164
-
154
+ span.set_error(env['sinatra.error']) if response.server_error?
165
155
  span.finish()
166
156
  ensure
167
157
  @datadog_request_span = nil
@@ -0,0 +1,37 @@
1
+ # Datadog global namespace
2
+ module Datadog
3
+ # Error is a value-object responsible for sanitizing/encapsulating error data
4
+ class Error
5
+ attr_reader :type, :message, :backtrace
6
+
7
+ def self.build_from(value)
8
+ case value
9
+ when Error then value
10
+ when Array then new(*value)
11
+ when Exception then new(value.class, value.message, value.backtrace)
12
+ when ContainsMessage then new(value.class, value.message)
13
+ else BlankError
14
+ end
15
+ end
16
+
17
+ def initialize(type = nil, message = nil, backtrace = nil)
18
+ backtrace = Array(backtrace).join("\n")
19
+ @type = sanitize(type)
20
+ @message = sanitize(message)
21
+ @backtrace = sanitize(backtrace)
22
+ end
23
+
24
+ private
25
+
26
+ def sanitize(value)
27
+ value = value.to_s
28
+
29
+ return value if value.encoding == ::Encoding::UTF_8
30
+
31
+ value.encode(::Encoding::UTF_8)
32
+ end
33
+
34
+ BlankError = Error.new
35
+ ContainsMessage = ->(v) { v.respond_to?(:message) }
36
+ end
37
+ end
@@ -1,6 +1,7 @@
1
1
  module Datadog
2
2
  module Ext
3
3
  module Errors
4
+ STATUS = 1
4
5
  MSG = 'error.msg'.freeze
5
6
  TYPE = 'error.type'.freeze
6
7
  STACK = 'error.stack'.freeze
@@ -8,6 +8,11 @@ module Datadog
8
8
  @context = Datadog::ThreadLocalContext.new
9
9
  end
10
10
 
11
+ # Sets the current context.
12
+ def context=(ctx)
13
+ @context.local = ctx
14
+ end
15
+
11
16
  # Return the current context.
12
17
  def context
13
18
  @context.local
data/lib/ddtrace/span.rb CHANGED
@@ -92,11 +92,12 @@ module Datadog
92
92
 
93
93
  # Mark the span with the given error.
94
94
  def set_error(e)
95
- return if e.nil?
96
- @status = 1
97
- @meta[Datadog::Ext::Errors::MSG] = e.message if e.respond_to?(:message) && e.message
98
- @meta[Datadog::Ext::Errors::TYPE] = e.class.to_s
99
- @meta[Datadog::Ext::Errors::STACK] = e.backtrace.join("\n") if e.respond_to?(:backtrace) && e.backtrace
95
+ e = Error.build_from(e)
96
+
97
+ @status = Ext::Errors::STATUS
98
+ set_tag(Ext::Errors::TYPE, e.type) unless e.type.empty?
99
+ set_tag(Ext::Errors::MSG, e.message) unless e.message.empty?
100
+ set_tag(Ext::Errors::STACK, e.backtrace) unless e.backtrace.empty?
100
101
  end
101
102
 
102
103
  # Mark the span finished at the current time and submit it.
@@ -18,7 +18,7 @@ module Datadog
18
18
  # of these function calls and sub-requests would be encapsulated within a single trace.
19
19
  # rubocop:disable Metrics/ClassLength
20
20
  class Tracer
21
- attr_reader :writer, :sampler, :services, :tags
21
+ attr_reader :writer, :sampler, :services, :tags, :provider
22
22
  attr_accessor :enabled
23
23
  attr_writer :default_service
24
24
 
@@ -2,7 +2,7 @@ module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 8
5
- PATCH = 1
5
+ PATCH = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  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.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-10 00:00:00.000000000 Z
11
+ date: 2017-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -158,6 +158,7 @@ files:
158
158
  - lib/ddtrace/contrib/sinatra/tracer.rb
159
159
  - lib/ddtrace/distributed.rb
160
160
  - lib/ddtrace/encoding.rb
161
+ - lib/ddtrace/error.rb
161
162
  - lib/ddtrace/ext/app_types.rb
162
163
  - lib/ddtrace/ext/cache.rb
163
164
  - lib/ddtrace/ext/distributed.rb
@@ -199,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
200
  version: '0'
200
201
  requirements: []
201
202
  rubyforge_project:
202
- rubygems_version: 2.6.12
203
+ rubygems_version: 2.4.5.2
203
204
  signing_key:
204
205
  specification_version: 4
205
206
  summary: Datadog tracing code for your Ruby applications