1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
# frozen_string_literal: true
module SystemCheck
# Used by gitlab:sidekiq:check rake task
class SidekiqCheck < BaseCheck
set_name 'Sidekiq:'
SYSTEMD_UNIT_PATH = '/run/systemd/units/invocation:gitlab-sidekiq.service'
def multi_check
check_sidekiq_running
only_one_sidekiq_running
end
private
def check_sidekiq_running
$stdout.print "Running? ... "
if sidekiq_worker_process_count > 0
$stdout.puts Rainbow("yes").green
else
$stdout.puts Rainbow("no").red
try_fixing_it(
sudo_gitlab("RAILS_ENV=production bin/background_jobs start")
)
for_more_information(
see_installation_guide_section("Install Init Script"),
"see log/sidekiq.log for possible errors"
)
fix_and_rerun
end
end
def only_one_sidekiq_running
worker_count = sidekiq_worker_process_count
cluster_count = sidekiq_cluster_process_count
return if worker_count == 0
$stdout.print 'Number of Sidekiq processes (cluster/worker) ... '
if cluster_count == 1 && worker_count >= 1
$stdout.puts Rainbow("#{cluster_count}/#{worker_count}").green
elsif File.symlink?(SYSTEMD_UNIT_PATH)
$stdout.puts Rainbow("#{cluster_count}/#{worker_count}").red
try_fixing_it(
'sudo systemctl restart gitlab-sidekiq.service'
)
fix_and_rerun
else
$stdout.puts Rainbow("#{cluster_count}/#{worker_count}").red
try_fixing_it(
'sudo service gitlab stop',
"sudo pkill -u #{gitlab_user} -f sidekiq",
"sleep 10 && sudo pkill -9 -u #{gitlab_user} -f sidekiq",
'sudo service gitlab start'
)
fix_and_rerun
end
end
def sidekiq_worker_process_count
ps_ux, _ = Gitlab::Popen.popen(%w[ps uxww])
ps_ux.lines.grep(/sidekiq \d+\.\d+\.\d+/).count
end
def sidekiq_cluster_process_count
ps_ux, _ = Gitlab::Popen.popen(%w[ps uxww])
ps_ux.lines.grep(/sidekiq-cluster/).count
end
end
end
|