scout_apm 3.0.0.pre6 → 3.0.0.pre7
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 +5 -0
- data/lib/scout_apm.rb +0 -1
- data/lib/scout_apm/agent.rb +0 -2
- data/lib/scout_apm/layaway.rb +12 -1
- data/lib/scout_apm/metric_set.rb +3 -1
- data/lib/scout_apm/version.rb +1 -1
- data/test/test_helper.rb +8 -0
- data/test/unit/layaway_test.rb +20 -0
- data/test/unit/store_test.rb +15 -0
- metadata +4 -31
- data/lib/scout_apm/capacity.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 622bc9489b9add4f80ca65cd3b12e54e30eea269
|
4
|
+
data.tar.gz: ef00b8380eb4e163cf9b991b826287d63ba27819
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2057aaca2029567dd1a7ce09fb8b359cc2819566e0a03ef528f91b051e00170be7fef66dfe339186bc77d030c7e738be2bc3517b8306e874ce38c662988c46a2
|
7
|
+
data.tar.gz: 4e45127ed587dd0e86782d357f1916de915acff6698682f2b6920448ba63245a5412549d27efe7fff1e270b8bfc0e57d36cc7273ae94f1af4f83a348b525b9aa
|
data/CHANGELOG.markdown
CHANGED
data/lib/scout_apm.rb
CHANGED
data/lib/scout_apm/agent.rb
CHANGED
@@ -12,7 +12,6 @@ module ScoutApm
|
|
12
12
|
attr_accessor :store
|
13
13
|
attr_accessor :layaway
|
14
14
|
attr_accessor :config
|
15
|
-
attr_accessor :capacity
|
16
15
|
attr_accessor :logger
|
17
16
|
attr_accessor :log_file # path to the log file
|
18
17
|
attr_accessor :options # options passed to the agent when +#start+ is called.
|
@@ -58,7 +57,6 @@ module ScoutApm
|
|
58
57
|
@layaway = ScoutApm::Layaway.new(config, environment)
|
59
58
|
@metric_lookup = Hash.new
|
60
59
|
|
61
|
-
@capacity = ScoutApm::Capacity.new
|
62
60
|
@installed_instruments = []
|
63
61
|
end
|
64
62
|
|
data/lib/scout_apm/layaway.rb
CHANGED
@@ -11,6 +11,9 @@ module ScoutApm
|
|
11
11
|
# Letting it sit a bit may be useful for debugging
|
12
12
|
STALE_AGE = 10 * 60
|
13
13
|
|
14
|
+
# Failsafe to prevent writing layaway files if for some reason they are not being cleaned up
|
15
|
+
MAX_FILES_LIMIT = 5000
|
16
|
+
|
14
17
|
# A strftime format string for how we render timestamps in filenames.
|
15
18
|
# Must be sortable as an integer
|
16
19
|
TIME_FORMAT = "%Y%m%d%H%M"
|
@@ -45,7 +48,11 @@ module ScoutApm
|
|
45
48
|
@directory = Pathname.new(found)
|
46
49
|
end
|
47
50
|
|
48
|
-
def write_reporting_period(reporting_period)
|
51
|
+
def write_reporting_period(reporting_period, files_limit = MAX_FILES_LIMIT)
|
52
|
+
if at_layaway_file_limit?(files_limit)
|
53
|
+
ScoutApm::Agent.instance.logger.error("Hit layaway file limit. Not writing to layaway file")
|
54
|
+
return false
|
55
|
+
end
|
49
56
|
filename = file_for(reporting_period.timestamp)
|
50
57
|
layaway_file = LayawayFile.new(filename)
|
51
58
|
layaway_file.write(reporting_period)
|
@@ -170,6 +177,10 @@ module ScoutApm
|
|
170
177
|
end
|
171
178
|
end
|
172
179
|
|
180
|
+
def at_layaway_file_limit?(files_limit = MAX_FILES_LIMIT)
|
181
|
+
all_files_for(:all).count >= files_limit
|
182
|
+
end
|
183
|
+
|
173
184
|
def log_layaway_file_information
|
174
185
|
files_in_temp = Dir["#{directory}/*"].count
|
175
186
|
|
data/lib/scout_apm/metric_set.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module ScoutApm
|
2
2
|
class MetricSet
|
3
|
-
# We can't aggregate
|
3
|
+
# We can't aggregate a handful of things like samplers (CPU, Memory), or
|
4
|
+
# Controller, and Percentiles so pass through these metrics directly
|
5
|
+
#
|
4
6
|
# TODO: Figure out a way to not have this duplicate what's in Samplers, and also on server's ingest
|
5
7
|
PASSTHROUGH_METRICS = ["CPU", "Memory", "Instance", "Controller", "SlowTransaction", "Percentile", "Job"]
|
6
8
|
|
data/lib/scout_apm/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -16,6 +16,14 @@ Kernel.module_eval do
|
|
16
16
|
def self.const_unset(const)
|
17
17
|
self.instance_eval { remove_const(const) }
|
18
18
|
end
|
19
|
+
|
20
|
+
def silence_warnings(&block)
|
21
|
+
warn_level = $VERBOSE
|
22
|
+
$VERBOSE = nil
|
23
|
+
result = block.call
|
24
|
+
$VERBOSE = warn_level
|
25
|
+
result
|
26
|
+
end
|
19
27
|
end
|
20
28
|
|
21
29
|
# A test helper class to create a temporary "configuration" we can control entirely purposes
|
data/test/unit/layaway_test.rb
CHANGED
@@ -21,4 +21,24 @@ class LayawayTest < Minitest::Test
|
|
21
21
|
|
22
22
|
assert_equal Pathname.new("/tmp/scout_apm_test/tmp"), ScoutApm::Layaway.new(config, env).directory
|
23
23
|
end
|
24
|
+
|
25
|
+
def test_layaway_file_limit_prevents_new_writes
|
26
|
+
FileUtils.mkdir_p '/tmp/scout_apm_test/layaway_limit'
|
27
|
+
config = make_fake_config("data_file" => "/tmp/scout_apm_test/layaway_limit")
|
28
|
+
layaway = ScoutApm::Layaway.new(config, ScoutApm::Agent.instance.environment)
|
29
|
+
layaway.delete_files_for(:all)
|
30
|
+
|
31
|
+
current_time = Time.now.utc
|
32
|
+
current_rp = ScoutApm::StoreReportingPeriod.new(current_time)
|
33
|
+
stale_rp = ScoutApm::StoreReportingPeriod.new(current_time - current_time.sec - 120)
|
34
|
+
|
35
|
+
# layaway.write_reporting_period returns nil on successful write
|
36
|
+
# It should probably be changed to return true or the number of bytes written
|
37
|
+
assert_nil layaway.write_reporting_period(stale_rp, 1)
|
38
|
+
|
39
|
+
# layaway.write_reporting_period returns an explicit false class on failure
|
40
|
+
assert layaway.write_reporting_period(current_rp, 1).is_a?(FalseClass)
|
41
|
+
|
42
|
+
layaway.delete_files_for(:all)
|
43
|
+
end
|
24
44
|
end
|
data/test/unit/store_test.rb
CHANGED
@@ -20,6 +20,21 @@ class StoreTest < Minitest::Test
|
|
20
20
|
|
21
21
|
assert_equal({}, s.reporting_periods)
|
22
22
|
end
|
23
|
+
|
24
|
+
def test_writing_layaway_removes_stale_timestamps
|
25
|
+
current_time = Time.now.utc
|
26
|
+
current_rp = ScoutApm::StoreReportingPeriod.new(current_time)
|
27
|
+
stale_rp = ScoutApm::StoreReportingPeriod.new(current_time - current_time.sec - 120)
|
28
|
+
|
29
|
+
s = ScoutApm::Store.new
|
30
|
+
ScoutApm::Instruments::Process::ProcessMemory.new(Logger.new(StringIO.new)).metrics(stale_rp.timestamp, s)
|
31
|
+
ScoutApm::Instruments::Process::ProcessMemory.new(Logger.new(StringIO.new)).metrics(current_rp.timestamp, s)
|
32
|
+
assert_equal 2, s.reporting_periods.size
|
33
|
+
|
34
|
+
s.write_to_layaway(FakeFailingLayaway.new, true)
|
35
|
+
|
36
|
+
assert_equal({}, s.reporting_periods)
|
37
|
+
end
|
23
38
|
end
|
24
39
|
|
25
40
|
class StoreReportingPeriodTest < Minitest::Test
|
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.pre7
|
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-
|
12
|
+
date: 2016-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -146,7 +146,6 @@ files:
|
|
146
146
|
- lib/scout_apm/background_worker.rb
|
147
147
|
- lib/scout_apm/bucket_name_splitter.rb
|
148
148
|
- lib/scout_apm/call_set.rb
|
149
|
-
- lib/scout_apm/capacity.rb
|
150
149
|
- lib/scout_apm/config.rb
|
151
150
|
- lib/scout_apm/context.rb
|
152
151
|
- lib/scout_apm/environment.rb
|
@@ -293,34 +292,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
293
292
|
version: 1.3.1
|
294
293
|
requirements: []
|
295
294
|
rubyforge_project: scout_apm
|
296
|
-
rubygems_version: 2.
|
295
|
+
rubygems_version: 2.2.2
|
297
296
|
signing_key:
|
298
297
|
specification_version: 4
|
299
298
|
summary: Ruby application performance monitoring
|
300
|
-
test_files:
|
301
|
-
- test/data/config_test_1.yml
|
302
|
-
- test/test_helper.rb
|
303
|
-
- test/unit/agent_test.rb
|
304
|
-
- test/unit/background_job_integrations/sidekiq_test.rb
|
305
|
-
- test/unit/config_test.rb
|
306
|
-
- test/unit/context_test.rb
|
307
|
-
- test/unit/environment_test.rb
|
308
|
-
- test/unit/git_revision_test.rb
|
309
|
-
- test/unit/histogram_test.rb
|
310
|
-
- test/unit/ignored_uris_test.rb
|
311
|
-
- test/unit/instruments/active_record_instruments_test.rb
|
312
|
-
- test/unit/instruments/net_http_test.rb
|
313
|
-
- test/unit/instruments/percentile_sampler_test.rb
|
314
|
-
- test/unit/layaway_test.rb
|
315
|
-
- test/unit/layer_children_set_test.rb
|
316
|
-
- test/unit/limited_layer_test.rb
|
317
|
-
- test/unit/metric_set_test.rb
|
318
|
-
- test/unit/scored_item_set_test.rb
|
319
|
-
- test/unit/serializers/payload_serializer_test.rb
|
320
|
-
- test/unit/slow_job_policy_test.rb
|
321
|
-
- test/unit/slow_request_policy_test.rb
|
322
|
-
- test/unit/sql_sanitizer_test.rb
|
323
|
-
- test/unit/store_test.rb
|
324
|
-
- test/unit/utils/active_record_metric_name_test.rb
|
325
|
-
- test/unit/utils/backtrace_parser_test.rb
|
326
|
-
- test/unit/utils/numbers_test.rb
|
299
|
+
test_files: []
|
data/lib/scout_apm/capacity.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# Encapsulates logic for determining capacity utilization of the Ruby processes.
|
2
|
-
module ScoutApm
|
3
|
-
class Capacity
|
4
|
-
attr_reader :processing_start_time, :accumulated_time, :transaction_entry_time
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@processing_start_time = Time.now
|
8
|
-
@lock ||= Mutex.new # the transaction_entry_time could be modified while processing a request or when #process is called.
|
9
|
-
@accumulated_time = 0.0
|
10
|
-
end
|
11
|
-
|
12
|
-
# Called when a transaction is traced.
|
13
|
-
def start_transaction!
|
14
|
-
@lock.synchronize do
|
15
|
-
@transaction_entry_time = Time.now
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Called when a transaction completes to record its time used.
|
20
|
-
def finish_transaction!
|
21
|
-
@lock.synchronize do
|
22
|
-
if transaction_entry_time
|
23
|
-
@accumulated_time += (Time.now - transaction_entry_time).to_f
|
24
|
-
else
|
25
|
-
ScoutApm::Agent.instance.logger.warn "No transaction entry time. Not recording capacity metrics for transaction."
|
26
|
-
end
|
27
|
-
@transaction_entry_time = nil
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Ran when sending metrics to server. Reports capacity usage metrics.
|
32
|
-
def process
|
33
|
-
process_time = Time.now
|
34
|
-
ScoutApm::Agent.instance.logger.debug "Processing capacity usage for [#{@processing_start_time}] to [#{process_time}]. Time Spent: #{@accumulated_time}."
|
35
|
-
@lock.synchronize do
|
36
|
-
time_spent = @accumulated_time
|
37
|
-
@accumulated_time = 0.0
|
38
|
-
# If a transaction is still running, capture its running time up to now and
|
39
|
-
# reset the +transaction_entry_time+ to now.
|
40
|
-
if @transaction_entry_time
|
41
|
-
time_spent += (process_time - @transaction_entry_time).to_f
|
42
|
-
ScoutApm::Agent.instance.logger.debug "A transaction is running while calculating capacity. Start time: [#{transaction_entry_time}]. Will update the entry time to [#{process_time}]."
|
43
|
-
@transaction_entry_time = process_time # prevent from over-counting capacity usage. update the transaction start time to now.
|
44
|
-
end
|
45
|
-
time_spent = 0.0 if time_spent < 0.0
|
46
|
-
|
47
|
-
window = (process_time - processing_start_time).to_f # time period we are evaulating capacity usage.
|
48
|
-
window = 1.0 if window <= 0.0 # prevent divide-by-zero if clock adjusted.
|
49
|
-
capacity = time_spent / window
|
50
|
-
ScoutApm::Agent.instance.logger.debug "Instance/Capacity: #{capacity}"
|
51
|
-
ScoutApm::Agent.instance.store.track_one!("Instance", "Capacity", capacity)
|
52
|
-
|
53
|
-
@processing_start_time = process_time
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|