From 2849ef910569b9bcbc1827118834588e2cf09056 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Wed, 31 Jul 2019 20:10:39 +0530 Subject: [PATCH 1/2] fix(doctor): Show status of scheduler in bench doctor --- frappe/commands/scheduler.py | 5 ++++- frappe/utils/doctor.py | 13 ++++++++++++- frappe/utils/scheduler.py | 20 +++++++++++++------- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/frappe/commands/scheduler.py b/frappe/commands/scheduler.py index 8d1cca286d..6f51c81211 100755 --- a/frappe/commands/scheduler.py +++ b/frappe/commands/scheduler.py @@ -115,9 +115,12 @@ def set_maintenance_mode(context, state, site=None): @click.command('doctor') #Passing context always gets a site and if there is no use site it breaks @click.option('--site', help='site name') -def doctor(site=None): +@pass_context +def doctor(context, site=None): "Get diagnostic info about background workers" from frappe.utils.doctor import doctor as _doctor + if not site: + site = get_site(context) return _doctor(site=site) @click.command('show-pending-jobs') diff --git a/frappe/utils/doctor.py b/frappe/utils/doctor.py index 9f046bb8ea..e97f792b88 100644 --- a/frappe/utils/doctor.py +++ b/frappe/utils/doctor.py @@ -3,7 +3,7 @@ import frappe.utils from collections import defaultdict from rq import Worker, Connection from frappe.utils.background_jobs import get_redis_conn, get_queue, get_queue_list -from frappe.utils.scheduler import is_scheduler_disabled +from frappe.utils.scheduler import is_scheduler_disabled, is_scheduler_inactive from six import iteritems @@ -107,8 +107,19 @@ def doctor(site=None): for s in sites: frappe.init(s) frappe.connect() + if is_scheduler_disabled(): print("Scheduler disabled for", s) + + if frappe.local.conf.maintenance_mode: + print("Maintenance mode on for", s) + + if frappe.local.conf.pause_scheduler: + print("Scheduler paused for", s) + + if is_scheduler_inactive(): + print("Scheduler inactive for", s) + frappe.destroy() # TODO improve this diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index d1b277c7e1..68c3bc58a8 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -78,14 +78,8 @@ def enqueue_events_for_site(site, queued_jobs): try: frappe.init(site=site) - if frappe.local.conf.maintenance_mode: - return - - if frappe.local.conf.pause_scheduler: - return - frappe.connect() - if is_scheduler_disabled(): + if is_scheduler_inactive(): return enqueue_events(site=site, queued_jobs=queued_jobs) @@ -225,6 +219,18 @@ def get_enabled_scheduler_events(): return ["all", "hourly", "hourly_long", "daily", "daily_long", "weekly", "weekly_long", "monthly", "monthly_long", "cron"] +def is_scheduler_inactive(): + if frappe.local.conf.maintenance_mode: + return True + + if frappe.local.conf.pause_scheduler: + return True + + if is_scheduler_disabled(): + return True + + return False + def is_scheduler_disabled(): if frappe.conf.disable_scheduler: return True From bca06574f1e8f235f803667649cf66e503a90813 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Wed, 31 Jul 2019 20:11:54 +0530 Subject: [PATCH 2/2] fix(background-jobs): Show status of scheduler in background-jobs page --- frappe/core/page/background_jobs/background_jobs.js | 6 ++++++ frappe/core/page/background_jobs/background_jobs.py | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/frappe/core/page/background_jobs/background_jobs.js b/frappe/core/page/background_jobs/background_jobs.js index 458a8ad5ee..2bde8454a9 100644 --- a/frappe/core/page/background_jobs/background_jobs.js +++ b/frappe/core/page/background_jobs/background_jobs.js @@ -13,6 +13,12 @@ frappe.pages['background_jobs'].on_page_load = function(wrapper) { frappe.pages['background_jobs'].on_page_show = function(wrapper) { frappe.pages.background_jobs.refresh_jobs(); + frappe.call({ + method: 'frappe.core.page.background_jobs.background_jobs.get_scheduler_status', + callback: function(r) { + frappe.pages.background_jobs.page.set_indicator(...r.message); + } + }); } frappe.pages.background_jobs.refresh_jobs = function() { diff --git a/frappe/core/page/background_jobs/background_jobs.py b/frappe/core/page/background_jobs/background_jobs.py index 7fd681652a..d488ccd64a 100644 --- a/frappe/core/page/background_jobs/background_jobs.py +++ b/frappe/core/page/background_jobs/background_jobs.py @@ -7,6 +7,8 @@ import frappe from rq import Queue, Worker from frappe.utils.background_jobs import get_redis_conn from frappe.utils import format_datetime, cint +from frappe.utils.scheduler import is_scheduler_inactive +from frappe import _ colors = { 'queued': 'orange', @@ -49,3 +51,9 @@ def get_info(show_failed=False): for j in q.get_jobs()[:10]: add_job(j, q.name) return jobs + +@frappe.whitelist() +def get_scheduler_status(): + if is_scheduler_inactive(): + return [_("Inactive"), "red"] + return [_("Active"), "green"]