Commit 0b903b24 authored by Matthias Käppler's avatar Matthias Käppler

Merge branch 'rz-safe-navigate-sidekiq-monitoring-settings' into 'master'

Add safe navigators to sidekiq monitoring settings

See merge request gitlab-org/gitlab!77187
parents 5415e58d 80e53070
...@@ -200,9 +200,7 @@ module Gitlab ...@@ -200,9 +200,7 @@ module Gitlab
end end
def sidekiq_exporter_enabled? def sidekiq_exporter_enabled?
::Settings.monitoring.sidekiq_exporter.enabled ::Settings.dig('monitoring', 'sidekiq_exporter', 'enabled')
rescue Settingslogic::MissingSetting
nil
end end
def exporter_has_a_unique_port? def exporter_has_a_unique_port?
...@@ -216,15 +214,11 @@ module Gitlab ...@@ -216,15 +214,11 @@ module Gitlab
end end
def sidekiq_exporter_port def sidekiq_exporter_port
::Settings.monitoring.sidekiq_exporter.port ::Settings.dig('monitoring', 'sidekiq_exporter', 'port')
rescue Settingslogic::MissingSetting
nil
end end
def sidekiq_health_check_port def sidekiq_health_check_port
::Settings.monitoring.sidekiq_health_checks.port ::Settings.dig('monitoring', 'sidekiq_health_checks', 'port')
rescue Settingslogic::MissingSetting
nil
end end
def metrics_server_enabled? def metrics_server_enabled?
......
...@@ -5,7 +5,7 @@ require 'rspec-parameterized' ...@@ -5,7 +5,7 @@ require 'rspec-parameterized'
require_relative '../../../sidekiq_cluster/cli' require_relative '../../../sidekiq_cluster/cli'
RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath RSpec.describe Gitlab::SidekiqCluster::CLI, stubbing_settings_source: true do # rubocop:disable RSpec/FilePath
let(:cli) { described_class.new('/dev/null') } let(:cli) { described_class.new('/dev/null') }
let(:timeout) { Gitlab::SidekiqCluster::DEFAULT_SOFT_TIMEOUT_SECONDS } let(:timeout) { Gitlab::SidekiqCluster::DEFAULT_SOFT_TIMEOUT_SECONDS }
let(:default_options) do let(:default_options) do
...@@ -16,19 +16,39 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath ...@@ -16,19 +16,39 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath
let(:sidekiq_exporter_port) { '3807' } let(:sidekiq_exporter_port) { '3807' }
let(:sidekiq_health_checks_port) { '3807' } let(:sidekiq_health_checks_port) { '3807' }
before do let(:config_file) { Tempfile.new('gitlab.yml') }
stub_env('RAILS_ENV', 'test') let(:config) do
stub_config( {
monitoring: { 'test' => {
sidekiq_exporter: { 'monitoring' => {
enabled: sidekiq_exporter_enabled, 'sidekiq_exporter' => {
port: sidekiq_exporter_port 'address' => 'localhost',
}, 'enabled' => sidekiq_exporter_enabled,
sidekiq_health_checks: { 'port' => sidekiq_exporter_port
port: sidekiq_health_checks_port },
'sidekiq_health_checks' => {
'address' => 'localhost',
'enabled' => sidekiq_exporter_enabled,
'port' => sidekiq_health_checks_port
}
} }
} }
) }
end
before do
stub_env('RAILS_ENV', 'test')
config_file.write(YAML.dump(config))
config_file.close
allow(::Settings).to receive(:source).and_return(config_file.path)
::Settings.reload!
end
after do
config_file.unlink
end end
describe '#run' do describe '#run' do
...@@ -272,16 +292,9 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath ...@@ -272,16 +292,9 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath
context 'starting the server' do context 'starting the server' do
context 'without --dryrun' do context 'without --dryrun' do
context 'when there are no sidekiq_health_checks settings set' do context 'when there are no sidekiq_health_checks settings set' do
before do let(:sidekiq_exporter_enabled) { true }
stub_config(
monitoring: {
sidekiq_exporter: {
enabled: true,
port: sidekiq_exporter_port
}
}
)
before do
allow(Gitlab::SidekiqCluster).to receive(:start) allow(Gitlab::SidekiqCluster).to receive(:start)
allow(cli).to receive(:write_pid) allow(cli).to receive(:write_pid)
allow(cli).to receive(:trap_signals) allow(cli).to receive(:trap_signals)
...@@ -293,25 +306,42 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath ...@@ -293,25 +306,42 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath
cli.run(%w(foo)) cli.run(%w(foo))
end end
it 'rescues Settingslogic::MissingSetting' do
expect { cli.run(%w(foo)) }.not_to raise_error(Settingslogic::MissingSetting)
end
end end
context 'when the sidekiq_exporter.port setting is not set' do context 'when the sidekiq_exporter.port setting is not set' do
let(:sidekiq_exporter_enabled) { true }
before do before do
stub_config( allow(Gitlab::SidekiqCluster).to receive(:start)
monitoring: { allow(cli).to receive(:write_pid)
sidekiq_exporter: { allow(cli).to receive(:trap_signals)
enabled: true allow(cli).to receive(:start_loop)
}, end
sidekiq_health_checks: {
port: sidekiq_health_checks_port it 'does not start a sidekiq metrics server' do
expect(MetricsServer).not_to receive(:spawn)
cli.run(%w(foo))
end
end
context 'when sidekiq_exporter.enabled setting is not set' do
let(:config) do
{
'test' => {
'monitoring' => {
'sidekiq_exporter' => {},
'sidekiq_health_checks' => {
'address' => 'localhost',
'enabled' => sidekiq_exporter_enabled,
'port' => sidekiq_health_checks_port
}
} }
} }
) }
end
before do
allow(Gitlab::SidekiqCluster).to receive(:start) allow(Gitlab::SidekiqCluster).to receive(:start)
allow(cli).to receive(:write_pid) allow(cli).to receive(:write_pid)
allow(cli).to receive(:trap_signals) allow(cli).to receive(:trap_signals)
...@@ -323,23 +353,21 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath ...@@ -323,23 +353,21 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath
cli.run(%w(foo)) cli.run(%w(foo))
end end
it 'rescues Settingslogic::MissingSetting' do
expect { cli.run(%w(foo)) }.not_to raise_error(Settingslogic::MissingSetting)
end
end end
context 'when sidekiq_exporter.enabled setting is not set' do context 'with a blank sidekiq_exporter setting' do
before do let(:config) do
stub_config( {
monitoring: { 'test' => {
sidekiq_exporter: {}, 'monitoring' => {
sidekiq_health_checks: { 'sidekiq_exporter' => nil,
port: sidekiq_health_checks_port 'sidekiq_health_checks' => nil
} }
} }
) }
end
before do
allow(Gitlab::SidekiqCluster).to receive(:start) allow(Gitlab::SidekiqCluster).to receive(:start)
allow(cli).to receive(:write_pid) allow(cli).to receive(:write_pid)
allow(cli).to receive(:trap_signals) allow(cli).to receive(:trap_signals)
...@@ -351,6 +379,10 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath ...@@ -351,6 +379,10 @@ RSpec.describe Gitlab::SidekiqCluster::CLI do # rubocop:disable RSpec/FilePath
cli.run(%w(foo)) cli.run(%w(foo))
end end
it 'does not throw an error' do
expect { cli.run(%w(foo)) }.not_to raise_error
end
end end
context 'with valid settings' do context 'with valid settings' do
......
...@@ -463,6 +463,14 @@ RSpec.configure do |config| ...@@ -463,6 +463,14 @@ RSpec.configure do |config|
$stdout = STDOUT $stdout = STDOUT
end end
config.around(:each, stubbing_settings_source: true) do |example|
original_instance = ::Settings.instance_variable_get(:@instance)
example.run
::Settings.instance_variable_set(:@instance, original_instance)
end
config.disable_monkey_patching! config.disable_monkey_patching!
end end
......
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