scout_apm 3.0.0.pre16 → 3.0.0.pre17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +22 -0
- data/README.markdown +15 -7
- data/lib/scout_apm/agent.rb +4 -7
- data/lib/scout_apm/agent_context.rb +1 -1
- data/lib/scout_apm/background_job_integrations/delayed_job.rb +0 -1
- data/lib/scout_apm/background_job_integrations/sidekiq.rb +0 -1
- data/lib/scout_apm/instruments/action_controller_rails_2.rb +0 -1
- data/lib/scout_apm/instruments/action_controller_rails_3_rails4.rb +0 -2
- data/lib/scout_apm/instruments/grape.rb +0 -1
- data/lib/scout_apm/instruments/resque.rb +0 -1
- data/lib/scout_apm/layer_converters/find_layer_by_type.rb +4 -0
- data/lib/scout_apm/logger.rb +16 -8
- data/lib/scout_apm/rack.rb +2 -2
- data/lib/scout_apm/server_integrations/passenger.rb +1 -1
- data/lib/scout_apm/tracked_request.rb +8 -15
- data/lib/scout_apm/version.rb +1 -1
- data/test/unit/background_job_integrations/sidekiq_test.rb +0 -3
- data/test/unit/logger_test.rb +67 -0
- data/test/unit/test_tracked_request.rb +8 -44
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ca61b61ba4135b8ee89ffb1efb4946f0c0afa44
|
4
|
+
data.tar.gz: d980d2baab58e6ceecf1d54aa97128180cf9052e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bd058b09d66c99c304af71ca7343462d02dc588230253712462fdad6628f718bad8a33655de42f1eb27ae98e2cec39840f247173e4fe0cf1ef0110dbb727105
|
7
|
+
data.tar.gz: 2cd9079153c0d8f050055ae62e7d3c18531b6e90e6d5a4e12661c0cd5e598ab930584229304d2a44017347f00cb2fada6e407bfbc5b54a8ce871e3df91147f3d
|
data/CHANGELOG.markdown
CHANGED
@@ -2,9 +2,31 @@
|
|
2
2
|
|
3
3
|
* ScoutProf BETA
|
4
4
|
|
5
|
+
# 2.4.3
|
6
|
+
|
7
|
+
* Ensure a startup hook runs on forking webservers
|
8
|
+
|
9
|
+
# 2.4.2
|
10
|
+
|
11
|
+
* Fix shutdown hook for Passenger
|
12
|
+
|
13
|
+
# 2.4.1
|
14
|
+
|
15
|
+
* Fix logging on STDOUT only platforms (Heroku)
|
16
|
+
|
5
17
|
# 2.4.0
|
6
18
|
|
7
19
|
* Rework agent startup sequence
|
20
|
+
* Install all background job instrumentations if you're running more than one
|
21
|
+
* Capture longer individual SQL statements
|
22
|
+
* Capture multiple SQL statements if multiple are run during a single AR call.
|
23
|
+
|
24
|
+
# 2.3.5
|
25
|
+
|
26
|
+
* More robust recovery from stale layaway files
|
27
|
+
* Quiet logging when hitting unusual layaway file limits
|
28
|
+
* Better naming for Sidekiq delayed method jobs
|
29
|
+
* Webrick is only required if actually needed
|
8
30
|
|
9
31
|
# 2.3.4
|
10
32
|
|
data/README.markdown
CHANGED
@@ -1,14 +1,21 @@
|
|
1
|
-
# ScoutApm
|
1
|
+
# ScoutApm Ruby Agent
|
2
2
|
|
3
|
-
A Ruby gem for detailed Rails application performance analysis. Metrics are
|
3
|
+
A Ruby gem for detailed Rails application performance analysis. Metrics are
|
4
|
+
reported to [Scout](https://scoutapp.com), a hosted application monitoring
|
5
|
+
service.
|
4
6
|
|
5
7
|
## Getting Started
|
6
8
|
|
7
|
-
|
9
|
+
Add the gem to your Gemfile
|
8
10
|
|
9
|
-
gem
|
10
|
-
|
11
|
-
|
11
|
+
gem 'scout_apm'
|
12
|
+
|
13
|
+
Update your Gemfile
|
14
|
+
|
15
|
+
bundle install
|
16
|
+
|
17
|
+
Signup for a [Scout](https://apm.scoutapp.com) account and put the provided
|
18
|
+
config file at `RAILS_ROOT/config/scout_apm.yml`.
|
12
19
|
|
13
20
|
Your config file should look like:
|
14
21
|
|
@@ -22,7 +29,8 @@ Your config file should look like:
|
|
22
29
|
|
23
30
|
## Docs
|
24
31
|
|
25
|
-
For the complete list of supported frameworks, Rubies,
|
32
|
+
For the complete list of supported frameworks, Rubies, configuration options
|
33
|
+
and more, see our [help site](http://help.apm.scoutapp.com/).
|
26
34
|
|
27
35
|
## Help
|
28
36
|
|
data/lib/scout_apm/agent.rb
CHANGED
@@ -48,13 +48,6 @@ module ScoutApm
|
|
48
48
|
context.installed!
|
49
49
|
|
50
50
|
if ScoutApm::Agent::Preconditions.check?(context) || force
|
51
|
-
# XXX: Should this happen at application start?
|
52
|
-
# Should this ever happen after fork?
|
53
|
-
# We start a thread in this, which can screw stuff up when we then fork.
|
54
|
-
#
|
55
|
-
# Save it into a variable to prevent it from ever running twice
|
56
|
-
@app_server_load ||= AppServerLoad.new(context).run
|
57
|
-
|
58
51
|
start
|
59
52
|
end
|
60
53
|
end
|
@@ -75,6 +68,9 @@ module ScoutApm
|
|
75
68
|
|
76
69
|
log_environment
|
77
70
|
|
71
|
+
# Save it into a variable to prevent it from ever running twice
|
72
|
+
@app_server_load ||= AppServerLoad.new(context).run
|
73
|
+
|
78
74
|
start_background_worker
|
79
75
|
end
|
80
76
|
|
@@ -124,6 +120,7 @@ module ScoutApm
|
|
124
120
|
|
125
121
|
def should_load_instruments?
|
126
122
|
return true if context.config.value('dev_trace')
|
123
|
+
return false unless context.config.value('monitor')
|
127
124
|
context.environment.app_server_integration.found? || context.environment.background_job_integrations.any?
|
128
125
|
end
|
129
126
|
|
@@ -220,7 +220,7 @@ module ScoutApm
|
|
220
220
|
{
|
221
221
|
:log_level => config.value('log_level'),
|
222
222
|
:log_file_path => config.value('log_file_path'),
|
223
|
-
:stdout => config.value('log_stdout')
|
223
|
+
:stdout => config.value('log_stdout') || environment.platform_integration.log_to_stdout?,
|
224
224
|
:stderr => config.value('log_stderr'),
|
225
225
|
:logger_class => config.value('log_class'),
|
226
226
|
}
|
@@ -57,7 +57,6 @@ module ScoutApm
|
|
57
57
|
req.context.add_user(:ip => request.remote_ip)
|
58
58
|
req.set_headers(request.headers)
|
59
59
|
req.start_layer( ScoutApm::Layer.new("Controller", "#{controller_path}/#{action_name}") )
|
60
|
-
req.web!
|
61
60
|
|
62
61
|
begin
|
63
62
|
perform_action_without_scout_instruments(*args, &block)
|
@@ -77,8 +77,6 @@ module ScoutApm
|
|
77
77
|
req.context.add_user(:ip => request.remote_ip) rescue nil
|
78
78
|
req.set_headers(request.headers)
|
79
79
|
|
80
|
-
req.web!
|
81
|
-
|
82
80
|
resolved_name = scout_action_name(*args)
|
83
81
|
layer = ScoutApm::Layer.new("Controller", "#{controller_path}/#{resolved_name}")
|
84
82
|
|
data/lib/scout_apm/logger.rb
CHANGED
@@ -40,7 +40,11 @@ module ScoutApm
|
|
40
40
|
def fatal(*args, &block); @logger.fatal(*args, &block); end
|
41
41
|
|
42
42
|
def log_level=(level)
|
43
|
-
@logger.level = level
|
43
|
+
@logger.level = log_level_from_opts(level)
|
44
|
+
end
|
45
|
+
|
46
|
+
def log_level
|
47
|
+
@logger.level
|
44
48
|
end
|
45
49
|
|
46
50
|
def log_file_path
|
@@ -48,11 +52,11 @@ module ScoutApm
|
|
48
52
|
end
|
49
53
|
|
50
54
|
def stdout?
|
51
|
-
@opts[:stdout] || @opts[:log_file_path] == "STDOUT"
|
55
|
+
@opts[:stdout] || (@opts[:log_file_path] || "").upcase == "STDOUT"
|
52
56
|
end
|
53
57
|
|
54
58
|
def stderr?
|
55
|
-
@opts[:stderr] || @opts[:log_file_path] == "STDERR"
|
59
|
+
@opts[:stderr] || (@opts[:log_file_path] || "").upcase == "STDERR"
|
56
60
|
end
|
57
61
|
|
58
62
|
private
|
@@ -86,13 +90,16 @@ module ScoutApm
|
|
86
90
|
end
|
87
91
|
end
|
88
92
|
|
89
|
-
def log_level_from_opts
|
90
|
-
|
93
|
+
def log_level_from_opts(explicit=nil)
|
94
|
+
candidate = explicit || (@opts[:log_level] || "").downcase
|
95
|
+
|
96
|
+
case candidate
|
91
97
|
when "debug" then ::Logger::DEBUG
|
92
98
|
when "info" then ::Logger::INFO
|
93
99
|
when "warn" then ::Logger::WARN
|
94
100
|
when "error" then ::Logger::ERROR
|
95
101
|
when "fatal" then ::Logger::FATAL
|
102
|
+
when ::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR, ::Logger::FATAL then candidate
|
96
103
|
else ::Logger::INFO
|
97
104
|
end
|
98
105
|
end
|
@@ -116,11 +123,12 @@ module ScoutApm
|
|
116
123
|
# Check if this path is ok for a log file.
|
117
124
|
# Does it exist?
|
118
125
|
# Is it writable?
|
119
|
-
# XXX: Implement
|
120
126
|
def validate_path(candidate)
|
121
|
-
|
122
|
-
end
|
127
|
+
return false if candidate.nil?
|
123
128
|
|
129
|
+
directory = File.dirname(candidate)
|
130
|
+
File.writable?(directory)
|
131
|
+
end
|
124
132
|
|
125
133
|
class DefaultFormatter < ::Logger::Formatter
|
126
134
|
def call(severity, time, progname, msg)
|
data/lib/scout_apm/rack.rb
CHANGED
@@ -10,8 +10,8 @@ module ScoutApm
|
|
10
10
|
req.annotate_request(:uri => env["REQUEST_PATH"]) rescue nil
|
11
11
|
req.context.add_user(:ip => env["REMOTE_ADDR"]) rescue nil
|
12
12
|
|
13
|
-
|
14
|
-
req.start_layer(
|
13
|
+
layer = ScoutApm::Layer.new('Controller', endpoint_name)
|
14
|
+
req.start_layer(layer)
|
15
15
|
|
16
16
|
begin
|
17
17
|
yield
|
@@ -29,7 +29,7 @@ module ScoutApm
|
|
29
29
|
# This does run when a process stops.
|
30
30
|
PhusionPassenger.on_event(:stopping_worker_process) do
|
31
31
|
logger.debug "Passenger is stopping a worker process, shutting down the agent."
|
32
|
-
ScoutApm::Agent.instance.
|
32
|
+
ScoutApm::Agent.instance.stop_background_worker
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -26,10 +26,6 @@ module ScoutApm
|
|
26
26
|
# Can be nil if we never reach a Rails Controller
|
27
27
|
attr_reader :headers
|
28
28
|
|
29
|
-
# What kind of request is this? A trace of a web request, or a background job?
|
30
|
-
# Use job! and web! to set, and job? and web? to query
|
31
|
-
attr_reader :request_type
|
32
|
-
|
33
29
|
# This maintains a lookup hash of Layer names and call counts. It's used to trigger fetching a backtrace on n+1 calls.
|
34
30
|
# Note that layer names might not be Strings - can alse be Utils::ActiveRecordMetricName. Also, this would fail for layers
|
35
31
|
# with same names across multiple types.
|
@@ -249,20 +245,14 @@ module ScoutApm
|
|
249
245
|
@headers = headers
|
250
246
|
end
|
251
247
|
|
252
|
-
|
253
|
-
@request_type = "job"
|
254
|
-
end
|
255
|
-
|
248
|
+
# This request is a job transaction iff it has a 'Job' layer
|
256
249
|
def job?
|
257
|
-
|
258
|
-
end
|
259
|
-
|
260
|
-
def web!
|
261
|
-
@request_type = "web"
|
250
|
+
layer_finder.job != nil
|
262
251
|
end
|
263
252
|
|
253
|
+
# This request is a web transaction iff it has a 'Controller' layer
|
264
254
|
def web?
|
265
|
-
|
255
|
+
layer_finder.controller != nil
|
266
256
|
end
|
267
257
|
|
268
258
|
def instant?
|
@@ -306,7 +296,6 @@ module ScoutApm
|
|
306
296
|
LayerConverters::SlowRequestConverter,
|
307
297
|
]
|
308
298
|
|
309
|
-
layer_finder = LayerConverters::FindLayerByType.new(self)
|
310
299
|
walker = LayerConverters::DepthFirstWalker.new(self.root_layer)
|
311
300
|
converters = converters.map do |klass|
|
312
301
|
instance = klass.new(@agent_context, self, layer_finder, @store)
|
@@ -328,6 +317,10 @@ module ScoutApm
|
|
328
317
|
end
|
329
318
|
end
|
330
319
|
|
320
|
+
def layer_finder
|
321
|
+
@layer_finder ||= LayerConverters::FindLayerByType.new(self)
|
322
|
+
end
|
323
|
+
|
331
324
|
# Ensure the background worker thread is up & running - a fallback if other
|
332
325
|
# detection doesn't achieve this at boot.
|
333
326
|
def ensure_background_worker
|
data/lib/scout_apm/version.rb
CHANGED
@@ -11,7 +11,6 @@ class SidekiqTest < Minitest::Test
|
|
11
11
|
def test_middleware_call_happy_path
|
12
12
|
fake_request = mock
|
13
13
|
fake_request.expects(:annotate_request)
|
14
|
-
fake_request.expects(:job!)
|
15
14
|
fake_request.expects(:start_layer).twice
|
16
15
|
fake_request.expects(:stop_layer).twice
|
17
16
|
fake_request.expects(:error!).never
|
@@ -29,7 +28,6 @@ class SidekiqTest < Minitest::Test
|
|
29
28
|
def test_middleware_call_job_exception
|
30
29
|
fake_request = mock
|
31
30
|
fake_request.expects(:annotate_request)
|
32
|
-
fake_request.expects(:job!)
|
33
31
|
fake_request.expects(:start_layer).twice
|
34
32
|
fake_request.expects(:stop_layer).twice
|
35
33
|
fake_request.expects(:error!)
|
@@ -47,7 +45,6 @@ class SidekiqTest < Minitest::Test
|
|
47
45
|
def test_middleware_call_edge_cases
|
48
46
|
fake_request = mock
|
49
47
|
fake_request.expects(:annotate_request)
|
50
|
-
fake_request.expects(:job!)
|
51
48
|
fake_request.expects(:start_layer).twice
|
52
49
|
fake_request.expects(:stop_layer).twice
|
53
50
|
fake_request.expects(:error!)
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'scout_apm/logger'
|
4
|
+
|
5
|
+
class LoggerTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@env_root = Pathname.new(File.dirname(__FILE__)) + "../../"
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_detect_stdout
|
11
|
+
logger = ScoutApm::Logger.new("", { :log_file_path => "STDOUT"})
|
12
|
+
assert logger.stdout?
|
13
|
+
assert_equal STDOUT, logger.log_destination
|
14
|
+
|
15
|
+
# and lowercase
|
16
|
+
logger = ScoutApm::Logger.new("", { :log_file_path => "stdout"})
|
17
|
+
assert logger.stdout?
|
18
|
+
assert_equal STDOUT, logger.log_destination
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_force_stdout
|
22
|
+
logger = ScoutApm::Logger.new("", { :stdout => true })
|
23
|
+
assert logger.stdout?
|
24
|
+
assert_equal STDOUT, logger.log_destination
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_pick_log_file_with_no_options
|
28
|
+
logger = ScoutApm::Logger.new(@env_root, { })
|
29
|
+
assert_equal (@env_root + "log" + "scout_apm.log").to_s, logger.log_destination
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_pick_log_file_with_different_dir
|
33
|
+
logger = ScoutApm::Logger.new(@env_root, { :log_file_path => "/tmp" })
|
34
|
+
assert_equal "/tmp/scout_apm.log", logger.log_destination
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_pick_log_file_invalid_dir
|
38
|
+
logger = ScoutApm::Logger.new(@env_root, { :log_file_path => "/not_a_real_dir" })
|
39
|
+
assert_equal STDOUT, logger.log_destination
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_pick_log_dir_not_writable
|
43
|
+
Dir.mktmpdir { |dir|
|
44
|
+
# An unwritable dir
|
45
|
+
FileUtils.chmod(0000, dir)
|
46
|
+
logger = ScoutApm::Logger.new(@env_root, { :log_file_path => dir })
|
47
|
+
assert_equal STDOUT, logger.log_destination
|
48
|
+
|
49
|
+
# so it can be deleted
|
50
|
+
FileUtils.chmod(0700, dir)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_set_log_level
|
55
|
+
logger = ScoutApm::Logger.new(@env_root, { :log_level => "debug" })
|
56
|
+
assert_equal ::Logger::DEBUG, logger.log_level
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_set_log_level_after
|
60
|
+
logger = ScoutApm::Logger.new(@env_root, { :log_level => "debug" })
|
61
|
+
logger.log_level = "info"
|
62
|
+
assert_equal ::Logger::INFO, logger.log_level
|
63
|
+
|
64
|
+
logger.log_level = ::Logger::ERROR
|
65
|
+
assert_equal ::Logger::ERROR, logger.log_level
|
66
|
+
end
|
67
|
+
end
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
class TrackedRequestDumpAndLoadTest < Minitest::Test
|
4
4
|
# TrackedRequest must be marshalable
|
5
5
|
def test_marshal_dump_load
|
6
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
6
|
+
tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
|
7
7
|
tr.prepare_to_dump!
|
8
8
|
|
9
9
|
dumped = Marshal.dump(tr)
|
@@ -12,58 +12,22 @@ class TrackedRequestDumpAndLoadTest < Minitest::Test
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_restore_store
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
faux_store = ScoutApm::FakeStore.new
|
16
|
+
context = ScoutApm::AgentContext.new
|
17
|
+
tr = ScoutApm::TrackedRequest.new(context, faux_store)
|
18
|
+
assert_equal faux_store, tr.instance_variable_get("@store")
|
18
19
|
|
19
20
|
tr.prepare_to_dump!
|
20
21
|
assert_nil tr.instance_variable_get("@store")
|
21
22
|
|
22
23
|
tr.restore_store
|
23
|
-
assert_equal
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class TrackedRequestFlagsTest < Minitest::Test
|
28
|
-
def test_set_web
|
29
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
30
|
-
assert_false tr.web?
|
31
|
-
tr.web!
|
32
|
-
assert tr.web?
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_set_job
|
36
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
37
|
-
assert ! tr.job?
|
38
|
-
tr.job!
|
39
|
-
assert tr.job?
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_set_error
|
43
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
44
|
-
assert_false tr.error?
|
45
|
-
tr.error!
|
46
|
-
assert tr.error?
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_set_error_and_web
|
50
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
51
|
-
assert_false tr.error?
|
52
|
-
assert_false tr.web?
|
53
|
-
|
54
|
-
tr.web!
|
55
|
-
assert_false tr.error?
|
56
|
-
assert tr.web?
|
57
|
-
|
58
|
-
tr.error!
|
59
|
-
assert tr.error?
|
60
|
-
assert tr.web?
|
24
|
+
assert_equal context.store, tr.instance_variable_get("@store")
|
61
25
|
end
|
62
26
|
end
|
63
27
|
|
64
28
|
class TrackedRequestLayerManipulationTest < Minitest::Test
|
65
29
|
def test_start_layer
|
66
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
30
|
+
tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
|
67
31
|
tr.start_layer(ScoutApm::Layer.new("Foo", "Bar"))
|
68
32
|
|
69
33
|
assert_equal "Foo", tr.current_layer.type
|
@@ -74,7 +38,7 @@ class TrackedRequestLayerManipulationTest < Minitest::Test
|
|
74
38
|
controller_layer = ScoutApm::Layer.new("Controller", "users/index")
|
75
39
|
ar_layer = ScoutApm::Layer.new("ActiveRecord", "Users#find")
|
76
40
|
|
77
|
-
tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
|
41
|
+
tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
|
78
42
|
tr.start_layer(controller_layer)
|
79
43
|
tr.start_layer(ar_layer)
|
80
44
|
|
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: 3.0.0.
|
4
|
+
version: 3.0.0.pre17
|
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: 2018-01-
|
12
|
+
date: 2018-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -335,6 +335,7 @@ files:
|
|
335
335
|
- test/unit/layer_converters/metric_converter_test.rb
|
336
336
|
- test/unit/layer_converters/stubs.rb
|
337
337
|
- test/unit/limited_layer_test.rb
|
338
|
+
- test/unit/logger_test.rb
|
338
339
|
- test/unit/metric_set_test.rb
|
339
340
|
- test/unit/remote/test_message.rb
|
340
341
|
- test/unit/remote/test_router.rb
|
@@ -399,6 +400,7 @@ test_files:
|
|
399
400
|
- test/unit/layer_converters/metric_converter_test.rb
|
400
401
|
- test/unit/layer_converters/stubs.rb
|
401
402
|
- test/unit/limited_layer_test.rb
|
403
|
+
- test/unit/logger_test.rb
|
402
404
|
- test/unit/metric_set_test.rb
|
403
405
|
- test/unit/remote/test_message.rb
|
404
406
|
- test/unit/remote/test_router.rb
|