Commit 580368c0 authored by Kamil Trzciński's avatar Kamil Trzciński

Make unicorn_workers to return meaningful results

parent 12422dbf
---
title: Make unicorn_workers to return meaningful results
merge_request: 30506
author:
type: fixed
...@@ -54,7 +54,16 @@ module Gitlab ...@@ -54,7 +54,16 @@ module Gitlab
end end
def unicorn_workers_count def unicorn_workers_count
`pgrep -f '[u]nicorn_rails worker.+ #{Rails.root.to_s}'`.split.count http_servers.sum(&:worker_processes) # rubocop: disable CodeReuse/ActiveRecord
end
# Traversal of ObjectSpace is expensive, on fully loaded application
# it takes around 80ms. The instances of HttpServers are not a subject
# to change so we can cache the list of servers.
def http_servers
return [] unless defined?(::Unicorn::HttpServer)
@http_servers ||= ObjectSpace.each_object(::Unicorn::HttpServer).to_a
end end
end end
end end
......
...@@ -4,7 +4,7 @@ describe Gitlab::Metrics::Samplers::UnicornSampler do ...@@ -4,7 +4,7 @@ describe Gitlab::Metrics::Samplers::UnicornSampler do
subject { described_class.new(1.second) } subject { described_class.new(1.second) }
describe '#sample' do describe '#sample' do
let(:unicorn) { double('unicorn') } let(:unicorn) { Module.new }
let(:raindrops) { double('raindrops') } let(:raindrops) { double('raindrops') }
let(:stats) { double('stats') } let(:stats) { double('stats') }
...@@ -78,22 +78,35 @@ describe Gitlab::Metrics::Samplers::UnicornSampler do ...@@ -78,22 +78,35 @@ describe Gitlab::Metrics::Samplers::UnicornSampler do
end end
end end
context 'additional metrics' do context 'unicorn workers' do
let(:unicorn_workers) { 2 } before do
allow(unicorn).to receive(:listener_names).and_return([])
end
context 'without http server' do
it "does set unicorn_workers to 0" do
expect(subject.metrics[:unicorn_workers]).to receive(:set).with({}, 0)
subject.sample
end
end
context 'with http server' do
let(:http_server_class) { Struct.new(:worker_processes) }
let!(:http_server) { http_server_class.new(5) }
before do before do
allow(unicorn).to receive(:listener_names).and_return([""]) stub_const('Unicorn::HttpServer', http_server_class)
allow(::Gitlab::Metrics::System).to receive(:cpu_time).and_return(3.14)
allow(subject).to receive(:unicorn_workers_count).and_return(unicorn_workers)
end end
it "sets additional metrics" do it "sets additional metrics" do
expect(subject.metrics[:unicorn_workers]).to receive(:set).with({}, unicorn_workers) expect(subject.metrics[:unicorn_workers]).to receive(:set).with({}, 5)
subject.sample subject.sample
end end
end end
end end
end
describe '#start' do describe '#start' do
context 'when enabled' do context 'when enabled' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment