scout_apm 2.1.13 → 2.1.14
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/CHANGELOG.markdown +6 -0
- data/lib/scout_apm/instant/middleware.rb +3 -0
- data/lib/scout_apm/instruments/active_record.rb +3 -1
- data/lib/scout_apm/instruments/net_http.rb +7 -2
- data/lib/scout_apm/tracked_request.rb +58 -3
- data/lib/scout_apm/version.rb +1 -1
- data/scout_apm.gemspec +1 -0
- data/test/unit/instruments/net_http_test.rb +21 -0
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: faa58ca3a2800e8aade5ade08a31d2c5db1e5a7d
|
4
|
+
data.tar.gz: ceb42f746d3b72eb84610522eeee9247fd68cf81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b692efc8a697ffb71657d9c2493c1c4fd2bc003f5970155339654679832d6b7fd9da95d26bc0d2b46c153980da697532376556556ff8b2ba10140cc5fb398180
|
7
|
+
data.tar.gz: 3ae789a0000e598a39bce414c4955d13fa354e38f716d53ddb6041160a89fc9a500c3f1d1144095e0487722eedc2951cb6681e8db4f8917bf162adbc52112b51
|
data/CHANGELOG.markdown
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 2.1.14
|
2
|
+
|
3
|
+
* Add TrackedRequest#ignore_request! to entirely ignore and stop capturing a
|
4
|
+
certain request. Use in your code by calling:
|
5
|
+
ScoutApm::RequestManager.lookup.ignore_request!
|
6
|
+
|
1
7
|
# 2.1.13
|
2
8
|
|
3
9
|
* Rework Delayed Job instrumentation to not interfere with other instruments.
|
@@ -50,6 +50,9 @@ module ScoutApm
|
|
50
50
|
if ScoutApm::Agent.instance.config.value('dev_trace')
|
51
51
|
if response.respond_to?(:body)
|
52
52
|
req = ScoutApm::RequestManager.lookup
|
53
|
+
|
54
|
+
return [status, headers, response] if req.ignoring_request?
|
55
|
+
|
53
56
|
slow_converter = LayerConverters::SlowRequestConverter.new(req)
|
54
57
|
trace = slow_converter.call
|
55
58
|
if trace
|
@@ -62,8 +62,10 @@ module ScoutApm
|
|
62
62
|
layer = req.current_layer
|
63
63
|
if layer && layer.type == "ActiveRecord"
|
64
64
|
layer.annotate_layer(payload)
|
65
|
-
|
65
|
+
elsif layer
|
66
66
|
ScoutApm::Agent.instance.logger.debug("Expected layer type: ActiveRecord, got #{layer && layer.type}")
|
67
|
+
else
|
68
|
+
# noop, no layer at all. We're probably ignoring this req.
|
67
69
|
end
|
68
70
|
end
|
69
71
|
end
|
@@ -22,12 +22,17 @@ module ScoutApm
|
|
22
22
|
include ScoutApm::Tracer
|
23
23
|
|
24
24
|
def request_with_scout_instruments(*args,&block)
|
25
|
-
|
26
|
-
self.class.instrument("HTTP", "request", :desc => url) do
|
25
|
+
self.class.instrument("HTTP", "request", :desc => request_scout_description(args.first)) do
|
27
26
|
request_without_scout_instruments(*args, &block)
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
30
|
+
def request_scout_description(req)
|
31
|
+
path = req.path
|
32
|
+
path = path.path if path.respond_to?(:path)
|
33
|
+
(@address + path.split('?').first)[0..99]
|
34
|
+
end
|
35
|
+
|
31
36
|
alias request_without_scout_instruments request
|
32
37
|
alias request request_with_scout_instruments
|
33
38
|
end
|
@@ -57,9 +57,9 @@ module ScoutApm
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def start_layer(layer)
|
60
|
-
if ignoring_children?
|
61
|
-
|
62
|
-
|
60
|
+
return if ignoring_children?
|
61
|
+
|
62
|
+
return ignoring_start_layer if ignoring_request?
|
63
63
|
|
64
64
|
start_request(layer) unless @root_layer
|
65
65
|
@layers[-1].add_child(layer) if @layers.any?
|
@@ -69,6 +69,8 @@ module ScoutApm
|
|
69
69
|
def stop_layer
|
70
70
|
return if ignoring_children?
|
71
71
|
|
72
|
+
return ignoring_stop_layer if ignoring_request?
|
73
|
+
|
72
74
|
layer = @layers.pop
|
73
75
|
|
74
76
|
# Safeguard against a mismatch in the layer tracking in an instrument.
|
@@ -110,6 +112,8 @@ module ScoutApm
|
|
110
112
|
|
111
113
|
BACKTRACE_BLACKLIST = ["Controller", "Job"]
|
112
114
|
def capture_backtrace?(layer)
|
115
|
+
return if ignoring_request?
|
116
|
+
|
113
117
|
# Never capture backtraces for this kind of layer. The backtrace will
|
114
118
|
# always be 100% framework code.
|
115
119
|
return false if BACKTRACE_BLACKLIST.include?(layer.type)
|
@@ -210,6 +214,8 @@ module ScoutApm
|
|
210
214
|
end
|
211
215
|
|
212
216
|
def instant?
|
217
|
+
return false if ignoring_request?
|
218
|
+
|
213
219
|
instant_key
|
214
220
|
end
|
215
221
|
|
@@ -222,6 +228,8 @@ module ScoutApm
|
|
222
228
|
def record!
|
223
229
|
@recorded = true
|
224
230
|
|
231
|
+
return if ignoring_request?
|
232
|
+
|
225
233
|
# Bail out early if the user asked us to ignore this uri
|
226
234
|
return if ScoutApm::Agent.instance.ignored_uris.ignore?(annotations[:uri])
|
227
235
|
|
@@ -271,6 +279,8 @@ module ScoutApm
|
|
271
279
|
|
272
280
|
# Only call this after the request is complete
|
273
281
|
def unique_name
|
282
|
+
return nil if ignoring_request?
|
283
|
+
|
274
284
|
@unique_name ||= begin
|
275
285
|
scope_layer = LayerConverters::ConverterBase.new(self).scope_layer
|
276
286
|
if scope_layer
|
@@ -285,6 +295,8 @@ module ScoutApm
|
|
285
295
|
# Used to know when we should just create a new one (don't attempt to add
|
286
296
|
# data to an already-recorded request). See RequestManager
|
287
297
|
def recorded?
|
298
|
+
return ignoring_recorded? if ignoring_request?
|
299
|
+
|
288
300
|
@recorded
|
289
301
|
end
|
290
302
|
|
@@ -333,5 +345,48 @@ module ScoutApm
|
|
333
345
|
def backtrace_threshold
|
334
346
|
dev_trace ? 0.05 : 0.5 # the minimum threshold in seconds to record the backtrace for a metric.
|
335
347
|
end
|
348
|
+
|
349
|
+
################################################################################
|
350
|
+
# Ignoring the rest of a request
|
351
|
+
################################################################################
|
352
|
+
|
353
|
+
# At any point in the request, calling code or instrumentation can call
|
354
|
+
# `ignore_request!` to immediately stop recording any information about new
|
355
|
+
# layers, and delete any existing layer info. This class will still exist,
|
356
|
+
# and respond to methods as normal, but `record!` won't be called, and no
|
357
|
+
# data will be recorded.
|
358
|
+
|
359
|
+
def ignore_request!
|
360
|
+
return if @ignoring_request
|
361
|
+
|
362
|
+
# Set instance variable
|
363
|
+
@ignoring_request = true
|
364
|
+
|
365
|
+
# Store data we'll need
|
366
|
+
@ignoring_depth = @layers.length
|
367
|
+
|
368
|
+
# Clear data
|
369
|
+
@layers = []
|
370
|
+
@root_layer = nil
|
371
|
+
@call_set = nil
|
372
|
+
@annotations = {}
|
373
|
+
@instant_key = nil
|
374
|
+
end
|
375
|
+
|
376
|
+
def ignoring_request?
|
377
|
+
@ignoring_request
|
378
|
+
end
|
379
|
+
|
380
|
+
def ignoring_start_layer
|
381
|
+
@ignoring_depth += 1
|
382
|
+
end
|
383
|
+
|
384
|
+
def ignoring_stop_layer
|
385
|
+
@ignoring_depth -= 1
|
386
|
+
end
|
387
|
+
|
388
|
+
def ignoring_recorded?
|
389
|
+
@ignoring_depth <= 0
|
390
|
+
end
|
336
391
|
end
|
337
392
|
end
|
data/lib/scout_apm/version.rb
CHANGED
data/scout_apm.gemspec
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'scout_apm/instruments/net_http'
|
4
|
+
|
5
|
+
require 'addressable'
|
6
|
+
|
7
|
+
class NetHttpTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
ScoutApm::Instruments::NetHttp.new.install
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_request_scout_description_for_uri
|
13
|
+
req = Net::HTTP::Get.new(URI('http://example.org/here'))
|
14
|
+
assert_equal '/here', Net::HTTP.new('').request_scout_description(req)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_request_scout_description_for_addressable
|
18
|
+
req = Net::HTTP::Get.new(Addressable::URI.parse('http://example.org/here'))
|
19
|
+
assert_equal '/here', Net::HTTP.new('').request_scout_description(req)
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout_apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Haynes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-11-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: addressable
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: Monitors Ruby apps and reports detailed metrics on performance to Scout.
|
99
113
|
email:
|
100
114
|
- support@scoutapp.com
|
@@ -234,6 +248,7 @@ files:
|
|
234
248
|
- test/unit/histogram_test.rb
|
235
249
|
- test/unit/ignored_uris_test.rb
|
236
250
|
- test/unit/instruments/active_record_instruments_test.rb
|
251
|
+
- test/unit/instruments/net_http_test.rb
|
237
252
|
- test/unit/instruments/percentile_sampler_test.rb
|
238
253
|
- test/unit/layaway_test.rb
|
239
254
|
- test/unit/metric_set_test.rb
|
@@ -267,7 +282,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
282
|
version: '0'
|
268
283
|
requirements: []
|
269
284
|
rubyforge_project: scout_apm
|
270
|
-
rubygems_version: 2.
|
285
|
+
rubygems_version: 2.4.8
|
271
286
|
signing_key:
|
272
287
|
specification_version: 4
|
273
288
|
summary: Ruby application performance monitoring
|
@@ -283,6 +298,7 @@ test_files:
|
|
283
298
|
- test/unit/histogram_test.rb
|
284
299
|
- test/unit/ignored_uris_test.rb
|
285
300
|
- test/unit/instruments/active_record_instruments_test.rb
|
301
|
+
- test/unit/instruments/net_http_test.rb
|
286
302
|
- test/unit/instruments/percentile_sampler_test.rb
|
287
303
|
- test/unit/layaway_test.rb
|
288
304
|
- test/unit/metric_set_test.rb
|
@@ -295,4 +311,3 @@ test_files:
|
|
295
311
|
- test/unit/utils/active_record_metric_name_test.rb
|
296
312
|
- test/unit/utils/backtrace_parser_test.rb
|
297
313
|
- test/unit/utils/numbers_test.rb
|
298
|
-
has_rdoc:
|