Add system checks to dashboard in admin UI (#15989)
parent
82cce18227
commit
487e37d6d4
@ -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 |
Loading…
Reference in new issue