mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-13 14:46:05 +10:00
This removes the need for any tags to differentiate between Sidekiq and Rails statistics while still being able to separate the two.
120 lines
3.1 KiB
Ruby
120 lines
3.1 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(Gitlab::Metrics).to receive(:submit_metrics).
|
|
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(sampler).to receive(:add_metric).
|
|
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(sampler).to receive(:add_metric).
|
|
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(sampler).to receive(:add_metric).
|
|
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(sampler).to receive(:add_metric).
|
|
with(/gc_statistics/, an_instance_of(Hash)).
|
|
and_call_original
|
|
|
|
sampler.sample_gc
|
|
end
|
|
end
|
|
|
|
describe '#add_metric' do
|
|
it 'prefixes the series name for a Rails process' do
|
|
expect(sampler).to receive(:sidekiq?).and_return(false)
|
|
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('rails_cats', { value: 10 }, {}).
|
|
and_call_original
|
|
|
|
sampler.add_metric('cats', value: 10)
|
|
end
|
|
|
|
it 'prefixes the series name for a Sidekiq process' do
|
|
expect(sampler).to receive(:sidekiq?).and_return(true)
|
|
|
|
expect(Gitlab::Metrics::Metric).to receive(:new).
|
|
with('sidekiq_cats', { value: 10 }, {}).
|
|
and_call_original
|
|
|
|
sampler.add_metric('cats', value: 10)
|
|
end
|
|
end
|
|
end
|