Dashboard warning when sidekiq is not running
This commit is contained in:
parent
d2a3fc8c47
commit
6f8d13d47e
|
@ -9,7 +9,7 @@ class AdminDashboardData
|
||||||
def as_json
|
def as_json
|
||||||
@json ||= {
|
@json ||= {
|
||||||
reports: REPORTS.map { |type| Report.find(type) },
|
reports: REPORTS.map { |type| Report.find(type) },
|
||||||
problems: [rails_env_check, host_names_check, gc_checks, clockwork_check].compact
|
problems: [rails_env_check, host_names_check, gc_checks, sidekiq_check || clockwork_check].compact
|
||||||
}.merge(
|
}.merge(
|
||||||
SiteSetting.version_checks? ? {version_check: DiscourseUpdates.check_version} : {}
|
SiteSetting.version_checks? ? {version_check: DiscourseUpdates.check_version} : {}
|
||||||
)
|
)
|
||||||
|
@ -27,6 +27,11 @@ class AdminDashboardData
|
||||||
I18n.t("dashboard.gc_warning") if ENV['RUBY_GC_MALLOC_LIMIT'].nil?
|
I18n.t("dashboard.gc_warning") if ENV['RUBY_GC_MALLOC_LIMIT'].nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sidekiq_check
|
||||||
|
last_job_performed_at = Jobs.last_job_performed_at
|
||||||
|
I18n.t('dashboard.sidekiq_warning') if Jobs.queued > 0 and (last_job_performed_at.nil? or last_job_performed_at < 2.minutes.ago)
|
||||||
|
end
|
||||||
|
|
||||||
def clockwork_check
|
def clockwork_check
|
||||||
I18n.t('dashboard.clockwork_warning') unless Jobs::ClockworkHeartbeat.is_clockwork_running?
|
I18n.t('dashboard.clockwork_warning') unless Jobs::ClockworkHeartbeat.is_clockwork_running?
|
||||||
end
|
end
|
||||||
|
|
|
@ -285,6 +285,7 @@ en:
|
||||||
host_names_warning: "Your config/database.yml file is using the default localhost hostname. Update it to use your site's hostname."
|
host_names_warning: "Your config/database.yml file is using the default localhost hostname. Update it to use your site's hostname."
|
||||||
gc_warning: 'Your server is using default ruby garbage collection parameters, which will not give you the best performance. Read this topic on performance tuning: <a href="http://meta.discourse.org/t/tuning-ruby-and-rails-for-discourse/4126">Tuning Ruby and Rails for Discourse</a>.'
|
gc_warning: 'Your server is using default ruby garbage collection parameters, which will not give you the best performance. Read this topic on performance tuning: <a href="http://meta.discourse.org/t/tuning-ruby-and-rails-for-discourse/4126">Tuning Ruby and Rails for Discourse</a>.'
|
||||||
clockwork_warning: 'Clockwork is not running. Ensure that a clockwork process is always running so that important jobs can be scheduled. <a href="https://github.com/tomykaira/clockwork">Learn about clockwork here</a>.'
|
clockwork_warning: 'Clockwork is not running. Ensure that a clockwork process is always running so that important jobs can be scheduled. <a href="https://github.com/tomykaira/clockwork">Learn about clockwork here</a>.'
|
||||||
|
sidekiq_warning: 'Sidekiq is not running. Many tasks, like sending emails, are executed asynchronously by sidekiq. Please ensure at least one sidekiq process is running. <a href="https://github.com/mperham/sidekiq">Learn about Sidekiq here</a>.'
|
||||||
|
|
||||||
site_settings:
|
site_settings:
|
||||||
default_locale: "The default language of this Discourse instance (ISO 639-1 Code)"
|
default_locale: "The default language of this Discourse instance (ISO 639-1 Code)"
|
||||||
|
|
17
lib/jobs.rb
17
lib/jobs.rb
|
@ -1,5 +1,16 @@
|
||||||
module Jobs
|
module Jobs
|
||||||
|
|
||||||
|
def self.queued
|
||||||
|
Sidekiq::Stats.new.enqueued
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.last_job_performed_at
|
||||||
|
Sidekiq.redis do |r|
|
||||||
|
int = r.get('last_job_perform_at')
|
||||||
|
int ? Time.at(int.to_i) : nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class Base
|
class Base
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
|
@ -18,6 +29,12 @@ module Jobs
|
||||||
def perform(opts={})
|
def perform(opts={})
|
||||||
opts = opts.with_indifferent_access
|
opts = opts.with_indifferent_access
|
||||||
|
|
||||||
|
if SiteSetting.queue_jobs?
|
||||||
|
Sidekiq.redis do |r|
|
||||||
|
r.set('last_job_perform_at', Time.now.to_i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if opts.delete(:sync_exec)
|
if opts.delete(:sync_exec)
|
||||||
if opts.has_key?(:current_site_id) && opts[:current_site_id] != RailsMultisite::ConnectionManagement.current_db
|
if opts.has_key?(:current_site_id) && opts[:current_site_id] != RailsMultisite::ConnectionManagement.current_db
|
||||||
raise ArgumentError.new("You can't connect to another database when executing a job synchronously.")
|
raise ArgumentError.new("You can't connect to another database when executing a job synchronously.")
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe Jobs do
|
||||||
|
|
||||||
describe 'when queue_jobs is true' do
|
describe 'when queue_jobs is true' do
|
||||||
before do
|
before do
|
||||||
SiteSetting.expects(:queue_jobs?).returns(true)
|
SiteSetting.expects(:queue_jobs?).at_least_once.returns(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'enqueues a job in sidekiq' do
|
it 'enqueues a job in sidekiq' do
|
||||||
|
@ -36,7 +36,7 @@ describe Jobs do
|
||||||
|
|
||||||
describe 'when queue_jobs is false' do
|
describe 'when queue_jobs is false' do
|
||||||
before do
|
before do
|
||||||
SiteSetting.expects(:queue_jobs?).returns(false)
|
SiteSetting.expects(:queue_jobs?).at_least_once.returns(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't enqueue in sidekiq" do
|
it "doesn't enqueue in sidekiq" do
|
||||||
|
|
|
@ -68,4 +68,38 @@ describe AdminDashboardData do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'sidekiq_check' do
|
||||||
|
subject { AdminDashboardData.new.sidekiq_check }
|
||||||
|
|
||||||
|
it 'returns nil when sidekiq processed a job recently' do
|
||||||
|
Jobs.stubs(:last_job_performed_at).returns(1.minute.ago)
|
||||||
|
Jobs.stubs(:queued).returns(0)
|
||||||
|
subject.should be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns nil when last job processed was a long time ago, but no jobs are queued' do
|
||||||
|
Jobs.stubs(:last_job_performed_at).returns(7.days.ago)
|
||||||
|
Jobs.stubs(:queued).returns(0)
|
||||||
|
subject.should be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns nil when no jobs have ever been processed, but no jobs are queued' do
|
||||||
|
Jobs.stubs(:last_job_performed_at).returns(nil)
|
||||||
|
Jobs.stubs(:queued).returns(0)
|
||||||
|
subject.should be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns a string when no jobs were processed recently and some jobs are queued' do
|
||||||
|
Jobs.stubs(:last_job_performed_at).returns(20.minutes.ago)
|
||||||
|
Jobs.stubs(:queued).returns(1)
|
||||||
|
subject.should_not be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns a string when no jobs have ever been processed, and some jobs are queued' do
|
||||||
|
Jobs.stubs(:last_job_performed_at).returns(nil)
|
||||||
|
Jobs.stubs(:queued).returns(1)
|
||||||
|
subject.should_not be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
Loading…
Reference in New Issue