Module: check_mk
Branch: master
Commit: 99fc83a9071e9277ea6531acff0901782749e31b
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=99fc83a9071e92…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Oct 22 08:23:03 2018 +0200
Cleaned up background job registration
* The background job plugins are now registered using
our standard plugin registry
* Simplified some subclass iteration on the way
Change-Id: I641ee7a6d85ccc6ed3878959809b1b17267415b0
---
cmk/gui/gui_background_job.py | 27 +++++++++------------------
cmk/gui/plugins/cron/gui_background_job.py | 2 +-
cmk/gui/plugins/wato/background_job.py | 14 +++-----------
cmk/gui/userdb.py | 1 +
cmk/gui/wato/__init__.py | 1 +
cmk/gui/wato/pages/bulk_discovery.py | 2 ++
cmk/gui/wato/pages/host_rename.py | 3 +++
7 files changed, 20 insertions(+), 30 deletions(-)
diff --git a/cmk/gui/gui_background_job.py b/cmk/gui/gui_background_job.py
index ada2388..937482d 100644
--- a/cmk/gui/gui_background_job.py
+++ b/cmk/gui/gui_background_job.py
@@ -36,6 +36,7 @@ import cmk.gui.sites as sites
import cmk.gui.config as config
import cmk.gui.log as log
import cmk.gui.background_job as background_job
+import cmk.gui.plugin_registry
loaded_with_language = False
def load_plugins(force):
@@ -197,25 +198,18 @@ class GUIBackgroundJob(GUIBackgroundJobSnapshottedFunctions):
return None
- @classmethod
- def get_concrete_subclasses(cls):
- # Note: Due to the strange execfile plugin mechanism, there is a risk
- # that a class gets declared multiple times. We always use the last
- # declaration of the given class
- classes = {}
- for subclass in cls.__subclasses__(): # pylint: disable=no-member
- classes[subclass.__name__] = subclass
- all_subclasses = []
- for subclass in classes.values():
- # Concrete subclasses have an attribute job_prefix
- if hasattr(subclass, "job_prefix"):
- all_subclasses.append(subclass)
- all_subclasses.extend(subclass.get_concrete_subclasses())
+class GUIBackgroundJobRegistry(cmk.gui.plugin_registry.ClassRegistry):
+ def plugin_base_class(self):
+ return GUIBackgroundJob
+
- return all_subclasses
+ def _register(self, plugin_class):
+ self._entries[plugin_class.__name__] = plugin_class
+job_registry = GUIBackgroundJobRegistry()
+
# GUI pages are built in several phases, and each face can take a non-trivial
# amount of time. Nevertheless, it is crucial to render a consistent state of
@@ -277,9 +271,6 @@ class GUIBackgroundJobManager(background_job.BackgroundJobManager):
def show_status_of_job_classes(self, job_classes, **kwargs):
job_class_infos = {}
for job_class in job_classes:
- if not hasattr(job_class, "job_prefix"):
- # Skip abstract classes
- continue
all_job_ids = self.get_all_job_ids(job_class)
jobs_info = self._get_job_infos(all_job_ids)
job_class_infos[job_class] = jobs_info
diff --git a/cmk/gui/plugins/cron/gui_background_job.py
b/cmk/gui/plugins/cron/gui_background_job.py
index fd8cf10..f995ee3 100644
--- a/cmk/gui/plugins/cron/gui_background_job.py
+++ b/cmk/gui/plugins/cron/gui_background_job.py
@@ -32,7 +32,7 @@ from cmk.gui.log import logger
from . import register_job
def housekeeping():
- housekeep_classes = gui_background_job.GUIBackgroundJob.get_concrete_subclasses()
+ housekeep_classes = gui_background_job.job_registry.values()
cmk.gui.background_job.BackgroundJobManager(logger).do_housekeeping(housekeep_classes)
register_job(housekeeping)
diff --git a/cmk/gui/plugins/wato/background_job.py
b/cmk/gui/plugins/wato/background_job.py
index 6f68ec5..e47a032 100644
--- a/cmk/gui/plugins/wato/background_job.py
+++ b/cmk/gui/plugins/wato/background_job.py
@@ -66,20 +66,12 @@ class ModeBackgroundJobsOverview(WatoMode):
def page(self):
job_manager = gui_background_job.GUIBackgroundJobManager()
- jobs_running = False
back_url = html.makeuri_contextless([("mode",
"background_jobs_overview")])
-
job_manager.show_status_of_job_classes(gui_background_job.GUIBackgroundJob.get_concrete_subclasses(),
job_details_back_url=back_url)
+ job_manager.show_status_of_job_classes(gui_background_job.job_registry.values(),
job_details_back_url=back_url)
- for job_class in gui_background_job.GUIBackgroundJob.get_concrete_subclasses():
- if not hasattr(job_class, "job_prefix"):
- # Skip abstract classes
- continue
-
- if job_manager.get_running_job_ids(job_class):
- jobs_running = True
-
- if jobs_running:
+ if any(job_manager.get_running_job_ids(c)
+ for c in gui_background_job.job_registry.values()):
html.javascript("set_reload(0.8)")
diff --git a/cmk/gui/userdb.py b/cmk/gui/userdb.py
index ba2cb15..b5831f5 100644
--- a/cmk/gui/userdb.py
+++ b/cmk/gui/userdb.py
@@ -1317,6 +1317,7 @@ def ajax_sync():
html.write('ERROR %s\n' % e)
+(a)gui_background_job.job_registry.register
class UserSyncBackgroundJob(gui_background_job.GUIBackgroundJob):
job_prefix = "user_sync"
gui_title = _("User synchronization")
diff --git a/cmk/gui/wato/__init__.py b/cmk/gui/wato/__init__.py
index 8f6562d..8715412 100644
--- a/cmk/gui/wato/__init__.py
+++ b/cmk/gui/wato/__init__.py
@@ -2328,6 +2328,7 @@ class PageFetchAgentOutput(AgentOutputPage):
+(a)gui_background_job.job_registry.register
class FetchAgentOutputBackgroundJob(WatoBackgroundJob):
job_prefix = "agent-output-"
gui_title = _("Fetch agent output")
diff --git a/cmk/gui/wato/pages/bulk_discovery.py b/cmk/gui/wato/pages/bulk_discovery.py
index 9ff0949..88772a7 100644
--- a/cmk/gui/wato/pages/bulk_discovery.py
+++ b/cmk/gui/wato/pages/bulk_discovery.py
@@ -40,6 +40,7 @@ from cmk.gui.log import logger
from cmk.gui.exceptions import MKUserError
from cmk.gui.i18n import _
from cmk.gui.globals import html
+import cmk.gui.gui_background_job as gui_background_job
from cmk.gui.plugins.wato import (
WatoMode,
@@ -51,6 +52,7 @@ DiscoveryTask = namedtuple("DiscoveryTask",
["site_id", "folder_path", "host_nam
# TODO: This job should be executable multiple times at once
+(a)gui_background_job.job_registry.register
class BulkDiscoveryBackgroundJob(WatoBackgroundJob):
job_prefix = "bulk_discovery"
gui_title = _("Bulk Discovery")
diff --git a/cmk/gui/wato/pages/host_rename.py b/cmk/gui/wato/pages/host_rename.py
index c65e06a..81da4de 100644
--- a/cmk/gui/wato/pages/host_rename.py
+++ b/cmk/gui/wato/pages/host_rename.py
@@ -38,6 +38,7 @@ import cmk.gui.watolib as watolib
import cmk.gui.userdb as userdb
import cmk.gui.forms as forms
import cmk.gui.background_job as background_job
+import cmk.gui.gui_background_job as gui_background_job
from cmk.gui.htmllib import HTML
from cmk.gui.exceptions import MKUserError, MKGeneralException, MKAuthException
from cmk.gui.i18n import _
@@ -65,6 +66,7 @@ from cmk.gui.plugins.wato import (
)
+(a)gui_background_job.job_registry.register
class RenameHostsBackgroundJob(watolib.WatoBackgroundJob):
gui_title = _("Host renaming")
job_prefix = "rename-hosts"
@@ -91,6 +93,7 @@ class RenameHostsBackgroundJob(watolib.WatoBackgroundJob):
+(a)gui_background_job.job_registry.register
class RenameHostBackgroundJob(RenameHostsBackgroundJob):
def __init__(self, host, title=None):
super(RenameHostBackgroundJob, self).__init__(title)