@ -0,0 +1,21 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck | |||
ACTIVE_CHECKS = [ | |||
Admin::SystemCheck::DatabaseSchemaCheck, | |||
Admin::SystemCheck::SidekiqProcessCheck, | |||
Admin::SystemCheck::RulesCheck, | |||
].freeze | |||
def self.perform | |||
ACTIVE_CHECKS.each_with_object([]) do |klass, arr| | |||
check = klass.new | |||
if check.pass? | |||
arr | |||
else | |||
arr << check.message | |||
end | |||
end | |||
end | |||
end |
@ -0,0 +1,11 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck::BaseCheck | |||
def pass? | |||
raise NotImplementedError | |||
end | |||
def message | |||
raise NotImplementedError | |||
end | |||
end |
@ -0,0 +1,11 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck::DatabaseSchemaCheck < Admin::SystemCheck::BaseCheck | |||
def pass? | |||
!ActiveRecord::Base.connection.migration_context.needs_migration? | |||
end | |||
def message | |||
Admin::SystemCheck::Message.new(:database_schema_check) | |||
end | |||
end |
@ -0,0 +1,11 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck::Message | |||
attr_reader :key, :value, :action | |||
def initialize(key, value = nil, action = nil) | |||
@key = key | |||
@value = value | |||
@action = action | |||
end | |||
end |
@ -0,0 +1,13 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck::RulesCheck < Admin::SystemCheck::BaseCheck | |||
include RoutingHelper | |||
def pass? | |||
Rule.kept.exists? | |||
end | |||
def message | |||
Admin::SystemCheck::Message.new(:rules_check, nil, admin_rules_path) | |||
end | |||
end |
@ -0,0 +1,26 @@ | |||
# frozen_string_literal: true | |||
class Admin::SystemCheck::SidekiqProcessCheck < Admin::SystemCheck::BaseCheck | |||
SIDEKIQ_QUEUES = %w( | |||
default | |||
push | |||
mailers | |||
pull | |||
scheduler | |||
ingress | |||
).freeze | |||
def pass? | |||
missing_queues.empty? | |||
end | |||
def message | |||
Admin::SystemCheck::Message.new(:sidekiq_process_check, missing_queues.join(', ')) | |||
end | |||
private | |||
def missing_queues | |||
@missing_queues ||= Sidekiq::ProcessSet.new.reduce(SIDEKIQ_QUEUES) { |queues, process| queues - process['queues'] } | |||
end | |||
end |