lib/gdk/diagnostic/workerd.rb (30 lines of code) (raw):
# frozen_string_literal: true
module GDK
module Diagnostic
class Workerd < Base
TITLE = 'Workerd process check'
MAX_ALLOWED_WORKERD_PROCESSES = 2
def success?
!too_many_processes?
end
def detail
return if success?
<<~DETAIL
There are #{lingering_pids.count} `workerd` processes running but there should only be #{MAX_ALLOWED_WORKERD_PROCESSES} running at max.
If your GDK has trouble booting, run the following command to kill all `workerd` processes:
kill -9 #{lingering_pids.join(' ')}
DETAIL
end
private
def too_many_processes?
lingering_pids.count > MAX_ALLOWED_WORKERD_PROCESSES
end
def lingering_pids
@lingering_pids ||= begin
Shellout.new(%w[ps x]).run.split("\n").filter { |a| a.include?(config.gdk_root.join('gitlab-http-router').to_s) && a.include?('bin/workerd') }.map { |a| a.split[0].to_i }
rescue Errno::ENOENT
[] # in case `ps` is not available
end
end
end
end
end