File: sidekiq_check.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (72 lines) | stat: -rw-r--r-- 2,081 bytes parent folder | download
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