diff options
author | Aleksei Lipniagov <alipniagov@gitlab.com> | 2019-07-25 14:45:22 +0300 |
---|---|---|
committer | Aleksei Lipniagov <alipniagov@gitlab.com> | 2019-07-25 16:13:42 +0300 |
commit | 7da24518741c135393b1651e1a4829e8632e15fa (patch) | |
tree | 85e1496e7c52ed1a9951093b4337c380360f0cb8 | |
parent | 29b2fdaa75b2437bad4c190a3df8521e46fd66c0 (diff) | |
download | gitlab-ce-64972-fix-unicorn-workers-metric.tar.gz |
Update specs: prod/dev environment examples64972-fix-unicorn-workers-metric
-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 |