scout_apm 2.3.0.pre → 2.3.0.pre1

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: 120874f68724447c58563d1cf6dca52a33358713
4
- data.tar.gz: ba7281a8b6d1d237d6df4b31d8de16e8b3f329b8
3
+ metadata.gz: 87d20e596496af9d020ff073a6c0a6dd5f25989b
4
+ data.tar.gz: 76a903858e591025ec82842c3f2a6d30a66f35fd
5
5
  SHA512:
6
- metadata.gz: ddcc5fc87345bcda9787a2227ddc10d5ecbd16c6fd05c5b5d771082afc72b2e9b0b7ac2046bb34bb6f8bf78ef5420221ef44b501c9055a479522cfe177820a9c
7
- data.tar.gz: a0726334d47ca7e4a094c97335dff2bd873ef11c4181e1d53f6904994cb648cfedd210d74e4581dcf433517b7fbce33890d57c98d04240c9cd94855b79530ee7
6
+ metadata.gz: d9733bb68af60c98eafddc3ad2d469173987214bc785e80deff2bd6f87161b1c256ca8cdc7b525656cae8bebe06332772b42a4896f624b1a70ca69882f26df1d
7
+ data.tar.gz: e5a84284b84bb95bea7cbe7dda0bddfafc79e1180c833f8709d778cbbbc926d617c9f94f2a55dbf8870bd5869088bca8727227172823e7358d6b98617248a8ed
@@ -41,6 +41,8 @@ module ScoutApm
41
41
  'compress_payload',
42
42
  'config_file',
43
43
  'data_file',
44
+ 'database_metric_limit',
45
+ 'database_metric_report_limit',
44
46
  'detailed_middleware',
45
47
  'dev_trace',
46
48
  'direct_host',
@@ -17,6 +17,12 @@ module ScoutApm
17
17
  def track_one!(type, name, value, options={})
18
18
  end
19
19
 
20
+ def track_histograms!(histograms, options={})
21
+ end
22
+
23
+ def track_db_query_metrics!(db_query_metric_set, options={})
24
+ end
25
+
20
26
  def track_slow_transaction!(slow_transaction)
21
27
  end
22
28
 
@@ -224,7 +224,12 @@ module ScoutApm
224
224
  end
225
225
 
226
226
  def trace
227
- @trace ||= LayerConverters::SlowRequestConverter.new(tracked_request).call
227
+ @trace ||=
228
+ begin
229
+ layer_finder = LayerConverters::FindLayerByType.new(tracked_request)
230
+ converter = LayerConverters::SlowRequestConverter.new(tracked_request, layer_finder, ScoutApm::FakeStore.new)
231
+ converter.call
232
+ end
228
233
  end
229
234
 
230
235
  def payload
@@ -15,8 +15,8 @@ module ScoutApm
15
15
  next if skip_layer?(layer)
16
16
 
17
17
  stat = DbQueryMetricStats.new(
18
- layer.name.model,
19
- layer.name.normalized_operation,
18
+ model_name(layer),
19
+ operation_name(layer),
20
20
  scope_layer.legacy_metric_name, # controller_scope
21
21
  1, # count, this is a single query, so 1
22
22
  layer.total_call_time,
@@ -26,15 +26,6 @@ module ScoutApm
26
26
  end
27
27
  end
28
28
 
29
- def skip_layer?(layer)
30
- layer.type != 'ActiveRecord' ||
31
- layer.limited? ||
32
- ( ! layer.name.respond_to?(:model)) ||
33
- ( ! layer.name.respond_to?(:normalized_operation)) ||
34
- layer.name.model.nil? ||
35
- layer.name.normalized_operation.nil?
36
- end
37
-
38
29
  def record!
39
30
  # Everything in the metric set here is from a single transaction, which
40
31
  # we want to keep track of. (One web call did a User#find 10 times, but
@@ -43,6 +34,41 @@ module ScoutApm
43
34
  @store.track_db_query_metrics!(@db_query_metric_set)
44
35
  end
45
36
 
37
+ def skip_layer?(layer)
38
+ layer.type != 'ActiveRecord' ||
39
+ layer.limited? ||
40
+ super
41
+ end
42
+
43
+ private
44
+
45
+
46
+ # If we can't name the model, default to:
47
+ DEFAULT_MODEL = "SQL"
48
+
49
+ # If we can't name the operation, default to:
50
+ DEFAULT_OPERATION = "other"
51
+
52
+ def model_name(layer)
53
+ if layer.name.respond_to?(:model)
54
+ layer.name.model || DEFAULT_MODEL
55
+ else
56
+ DEFAULT_MODEL
57
+ end
58
+ rescue
59
+ DEFAULT_MODEL
60
+ end
61
+
62
+ def operation_name(layer)
63
+ if layer.name.respond_to?(:normalized_operation)
64
+ layer.name.normalized_operation || DEFAULT_OPERATION
65
+ else
66
+ DEFAULT_OPERATION
67
+ end
68
+ rescue
69
+ DEFAULT_OPERATION
70
+ end
71
+
46
72
  def records_returned(layer)
47
73
  if layer.annotations
48
74
  layer.annotations.fetch(:record_count, 0)
@@ -3,12 +3,6 @@
3
3
  # the layaway file for cross-process aggregation.
4
4
  module ScoutApm
5
5
  class Store
6
- # A hash of reporting periods. { StoreReportingPeriodTimestamp => StoreReportingPeriod }
7
- attr_reader :reporting_periods
8
-
9
- # Used to pull metrics into each reporting period, as that reporting period is finished.
10
- attr_reader :samplers
11
-
12
6
  def initialize
13
7
  @mutex = Mutex.new
14
8
  @reporting_periods = Hash.new { |h,k| h[k] = StoreReportingPeriod.new(k) }
@@ -20,8 +14,9 @@ module ScoutApm
20
14
  end
21
15
 
22
16
  def current_period
23
- reporting_periods[current_timestamp]
17
+ @reporting_periods[current_timestamp]
24
18
  end
19
+ private :current_period
25
20
 
26
21
  def find_period(timestamp = nil)
27
22
  if timestamp
@@ -30,6 +25,7 @@ module ScoutApm
30
25
  current_period
31
26
  end
32
27
  end
28
+ private :find_period
33
29
 
34
30
  # Save newly collected metrics
35
31
  def track!(metrics, options={})
@@ -90,7 +86,7 @@ module ScoutApm
90
86
  def write_to_layaway(layaway, force=false)
91
87
  ScoutApm::Agent.instance.logger.debug("Writing to layaway#{" (Forced)" if force}")
92
88
 
93
- reporting_periods.select { |time, rp| force || (time.timestamp < current_timestamp.timestamp) }.
89
+ @reporting_periods.select { |time, rp| force || (time.timestamp < current_timestamp.timestamp) }.
94
90
  each { |time, rp| collect_samplers(rp) }.
95
91
  each { |time, rp| write_reporting_period(layaway, time, rp) }
96
92
  end
@@ -102,10 +98,11 @@ module ScoutApm
102
98
  rescue => e
103
99
  ScoutApm::Agent.instance.logger.warn("Failed writing data to layaway file: #{e.message} / #{e.backtrace}")
104
100
  ensure
105
- ScoutApm::Agent.instance.logger.debug("Before delete, reporting periods length: #{reporting_periods.size}")
106
- deleted_items = reporting_periods.delete(time)
107
- ScoutApm::Agent.instance.logger.debug("After delete, reporting periods length: #{reporting_periods.size}. Did delete #{deleted_items}")
101
+ ScoutApm::Agent.instance.logger.debug("Before delete, reporting periods length: #{@reporting_periods.size}")
102
+ deleted_items = @reporting_periods.delete(time)
103
+ ScoutApm::Agent.instance.logger.debug("After delete, reporting periods length: #{@reporting_periods.size}. Did delete #{deleted_items}")
108
104
  end
105
+ private :write_reporting_period
109
106
 
110
107
  ######################################
111
108
  # Sampler support
@@ -123,6 +120,7 @@ module ScoutApm
123
120
  end
124
121
  end
125
122
  end
123
+ private :collect_samplers
126
124
  end
127
125
 
128
126
  # A timestamp, normalized to the beginning of a minute. Used as a hash key to
@@ -1,4 +1,4 @@
1
1
  module ScoutApm
2
- VERSION = "2.3.0.pre"
2
+ VERSION = "2.3.0.pre1"
3
3
  end
4
4
 
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class FakeStoreTest < Minitest::Test
4
+ def test_responds_to_same_instance_methods_as_store
5
+ fs = ScoutApm::FakeStore.new
6
+ s = ScoutApm::Store.new
7
+
8
+ assert_equal [], s.methods - fs.methods
9
+ end
10
+ end
@@ -14,11 +14,11 @@ class StoreTest < Minitest::Test
14
14
  s = ScoutApm::Store.new
15
15
  s.track_one!("Controller", "user/show", 10)
16
16
 
17
- assert_equal(1, s.reporting_periods.size)
17
+ assert_equal(1, s.instance_variable_get('@reporting_periods').size)
18
18
 
19
19
  s.write_to_layaway(FakeFailingLayaway.new, true)
20
20
 
21
- assert_equal({}, s.reporting_periods)
21
+ assert_equal({}, s.instance_variable_get('@reporting_periods'))
22
22
  end
23
23
 
24
24
  def test_writing_layaway_removes_stale_timestamps
@@ -29,11 +29,11 @@ class StoreTest < Minitest::Test
29
29
  s = ScoutApm::Store.new
30
30
  ScoutApm::Instruments::Process::ProcessMemory.new(Logger.new(StringIO.new)).metrics(stale_rp.timestamp, s)
31
31
  ScoutApm::Instruments::Process::ProcessMemory.new(Logger.new(StringIO.new)).metrics(current_rp.timestamp, s)
32
- assert_equal 2, s.reporting_periods.size
32
+ assert_equal 2, s.instance_variable_get('@reporting_periods').size
33
33
 
34
34
  s.write_to_layaway(FakeFailingLayaway.new, true)
35
35
 
36
- assert_equal({}, s.reporting_periods)
36
+ assert_equal({}, s.instance_variable_get('@reporting_periods'))
37
37
  end
38
38
  end
39
39
 
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.3.0.pre
4
+ version: 2.3.0.pre1
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: 2017-09-22 00:00:00.000000000 Z
12
+ date: 2017-09-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -294,6 +294,7 @@ files:
294
294
  - test/unit/db_query_metric_set_test.rb
295
295
  - test/unit/db_query_metric_stats_test.rb
296
296
  - test/unit/environment_test.rb
297
+ - test/unit/fake_store_test.rb
297
298
  - test/unit/git_revision_test.rb
298
299
  - test/unit/histogram_test.rb
299
300
  - test/unit/ignored_uris_test.rb
@@ -356,6 +357,7 @@ test_files:
356
357
  - test/unit/db_query_metric_set_test.rb
357
358
  - test/unit/db_query_metric_stats_test.rb
358
359
  - test/unit/environment_test.rb
360
+ - test/unit/fake_store_test.rb
359
361
  - test/unit/git_revision_test.rb
360
362
  - test/unit/histogram_test.rb
361
363
  - test/unit/ignored_uris_test.rb