f181f05e8a
This allows us to track the counts of actual classes instead of "T_XXX" nodes. This is only enabled on CRuby as it uses CRuby specific APIs.
97 lines
2.5 KiB
Ruby
97 lines
2.5 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::Metrics::Sampler do
|
|
let(:sampler) { described_class.new(5) }
|
|
|
|
after do
|
|
Allocations.stop if Gitlab::Metrics.mri?
|
|
end
|
|
|
|
describe '#start' do
|
|
it 'gathers a sample at a given interval' do
|
|
expect(sampler).to receive(:sleep).with(5)
|
|
expect(sampler).to receive(:sample)
|
|
expect(sampler).to receive(:loop).and_yield
|
|
|
|
sampler.start.join
|
|
end
|
|
end
|
|
|
|
describe '#sample' do
|
|
it 'samples various statistics' do
|
|
expect(sampler).to receive(:sample_memory_usage)
|
|
expect(sampler).to receive(:sample_file_descriptors)
|
|
expect(sampler).to receive(:sample_objects)
|
|
expect(sampler).to receive(:sample_gc)
|
|
expect(sampler).to receive(:flush)
|
|
|
|
sampler.sample
|
|
end
|
|
|
|
it 'clears any GC profiles' do
|
|
expect(sampler).to receive(:flush)
|
|
expect(GC::Profiler).to receive(:clear)
|
|
|
|
sampler.sample
|
|
end
|
|
end
|
|
|
|
describe '#flush' do
|
|
it 'schedules the metrics using Sidekiq' do
|
|
expect(MetricsWorker).to receive(:perform_async).
|
|
with([an_instance_of(Hash)])
|
|
|
|
sampler.sample_memory_usage
|
|
sampler.flush
|
|
end
|
|
end
|
|
|
|
describe '#sample_memory_usage' do
|
|
it 'adds a metric containing the memory usage' do
|
|
expect(Gitlab::Metrics::System).to receive(:memory_usage).
|
|
and_return(9000)
|
|
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('memory_usage', value: 9000).
|
|
and_call_original
|
|
|
|
sampler.sample_memory_usage
|
|
end
|
|
end
|
|
|
|
describe '#sample_file_descriptors' do
|
|
it 'adds a metric containing the amount of open file descriptors' do
|
|
expect(Gitlab::Metrics::System).to receive(:file_descriptor_count).
|
|
and_return(4)
|
|
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('file_descriptors', value: 4).
|
|
and_call_original
|
|
|
|
sampler.sample_file_descriptors
|
|
end
|
|
end
|
|
|
|
describe '#sample_objects' do
|
|
it 'adds a metric containing the amount of allocated objects' do
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('object_counts', an_instance_of(Hash), an_instance_of(Hash)).
|
|
at_least(:once).
|
|
and_call_original
|
|
|
|
sampler.sample_objects
|
|
end
|
|
end
|
|
|
|
describe '#sample_gc' do
|
|
it 'adds a metric containing garbage collection statistics' do
|
|
expect(GC::Profiler).to receive(:total_time).and_return(0.24)
|
|
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('gc_statistics', an_instance_of(Hash)).
|
|
and_call_original
|
|
|
|
sampler.sample_gc
|
|
end
|
|
end
|
|
end
|