diff options
-rw-r--r-- | lib/prometheus/pid_provider.rb | 9 | ||||
-rw-r--r-- | spec/lib/prometheus/pid_provider_spec.rb | 46 |
2 files changed, 41 insertions, 14 deletions
diff --git a/lib/prometheus/pid_provider.rb b/lib/prometheus/pid_provider.rb index 3c791147ccb..2e15e947799 100644 --- a/lib/prometheus/pid_provider.rb +++ b/lib/prometheus/pid_provider.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'prometheus/client/support/unicorn' - module Prometheus module PidProvider extend self @@ -21,10 +19,11 @@ module Prometheus private def unicorn_worker_id - if process_name =~ /unicorn_rails master/ + # The master process is being renamed, check the specs for examples + if process_name =~ /(unicorn|unicorn_rails)( master|\z)/ 'unicorn_master' - elsif match = process_name.match(/unicorn_rails worker\[([0-9]+)\]/) - "unicorn_#{match[1]}" + elsif match = process_name.match(/(unicorn|unicorn_rails) worker\[([0-9]+)\]/) + "unicorn_#{match[2]}" else unknown_process_id end diff --git a/spec/lib/prometheus/pid_provider_spec.rb b/spec/lib/prometheus/pid_provider_spec.rb index 32e03f5b4a5..9a501ef769f 100644 --- a/spec/lib/prometheus/pid_provider_spec.rb +++ b/spec/lib/prometheus/pid_provider_spec.rb @@ -25,28 +25,56 @@ describe Prometheus::PidProvider do before do stub_const('Unicorn::Worker', Class.new) hide_const('Puma') + + expect(described_class).to receive(:process_name).at_least(:once).and_return(process_name) end context 'when unicorn master is specified in process name' do - before do - expect(described_class).to receive(:process_name).at_least(:once).and_return('unicorn_rails master') + context 'when in production env' do + context 'before the process was renamed' do + let(:process_name) { "/opt/gitlab/embedded/bin/unicorn"} + + it { is_expected.to eq 'unicorn_master' } + end + + context 'after the process was renamed' do + let(:process_name) { "unicorn master -D -E production -c /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru" } + + it { is_expected.to eq 'unicorn_master' } + end end - it { is_expected.to eq 'unicorn_master' } + context 'when in development env' do + context 'before the process was renamed' do + let(:process_name) { "path_to_bindir/bin/unicorn_rails"} + + it { is_expected.to eq 'unicorn_master' } + end + + context 'after the process was renamed' do + let(:process_name) { "unicorn_rails master -c /gitlab_dir/config/unicorn.rb -E development" } + + it { is_expected.to eq 'unicorn_master' } + end + end end context 'when unicorn worker id is specified in process name' do - before do - expect(described_class).to receive(:process_name).at_least(:once).and_return('unicorn_rails worker[1]') + context 'when in production env' do + let(:process_name) { "unicorn worker[1] -D -E production -c /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru" } + + it { is_expected.to eq 'unicorn_1' } end - it { is_expected.to eq 'unicorn_1' } + context 'when in development env' do + let(:process_name) { "unicorn_rails worker[1] -c gitlab_dir/config/unicorn.rb -E development" } + + it { is_expected.to eq 'unicorn_1' } + end end context 'when no specified unicorn master or worker id in process name' do - before do - expect(described_class).to receive(:process_name).at_least(:once).and_return('bin/unicorn_rails') - end + let(:process_name) { "bin/unknown_unicorn_instance"} it { is_expected.to eq "process_#{Process.pid}" } end |