Module: check_mk
Branch: master
Commit: 02d5faa2b9351e4984ecef45e94c79bea2680a74
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=02d5faa2b9351e…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Oct 22 16:12:26 2018 +0200
Cleaned up config domain registration
* The config domain plugins are now registered using
our standard plugin registry
* Add test for correct registration of the domains
Change-Id: I6883e12c626f377cf4a7131acf3c358fcf75851c
---
cmk/gui/plugins/wato/__init__.py | 1 +
cmk/gui/plugins/wato/omd_configuration.py | 6 ++++-
cmk/gui/plugins/wato/utils/__init__.py | 1 +
cmk/gui/watolib.py | 44 +++++++++++++++----------------
tests/unit/cmk/gui/test_watolib.py | 16 +++++++++++
5 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/cmk/gui/plugins/wato/__init__.py b/cmk/gui/plugins/wato/__init__.py
index 556cdb2..054bf6b 100644
--- a/cmk/gui/plugins/wato/__init__.py
+++ b/cmk/gui/plugins/wato/__init__.py
@@ -47,6 +47,7 @@ from cmk.gui.plugins.wato.utils import (
add_replication_paths,
changelog_button,
CheckTypeSelection,
+ config_domain_registry,
ConfigDomain,
ConfigDomainCore,
ConfigDomainEventConsole,
diff --git a/cmk/gui/plugins/wato/omd_configuration.py
b/cmk/gui/plugins/wato/omd_configuration.py
index 9dbe235..80b4a42 100644
--- a/cmk/gui/plugins/wato/omd_configuration.py
+++ b/cmk/gui/plugins/wato/omd_configuration.py
@@ -36,7 +36,8 @@ from cmk.gui.valuespec import *
from cmk.gui.i18n import _
from cmk.gui.globals import html
-from . import (
+from cmk.gui.plugins.wato import (
+ config_domain_registry,
ConfigDomain,
ConfigDomainOMD,
LivestatusViaTCP,
@@ -171,6 +172,7 @@ register_configvar(group,
# '----------------------------------------------------------------------'
# TODO: Diskspace cleanup does not support site specific globals!
+(a)config_domain_registry.register
class ConfigDomainDiskspace(ConfigDomain):
needs_sync = True
needs_activation = False
@@ -324,6 +326,7 @@ add_replication_paths([
# | Manage settings of the site apache |
# '----------------------------------------------------------------------'
+(a)config_domain_registry.register
class ConfigDomainApache(ConfigDomain):
needs_sync = True
needs_activation = True
@@ -428,6 +431,7 @@ register_configvar(group,
# | Use these options to tune the performance of the rrdcached |
# '----------------------------------------------------------------------'
+(a)config_domain_registry.register
class ConfigDomainRRDCached(ConfigDomain):
needs_sync = True
needs_activation = True
diff --git a/cmk/gui/plugins/wato/utils/__init__.py
b/cmk/gui/plugins/wato/utils/__init__.py
index 5b7bc52..5736d99 100644
--- a/cmk/gui/plugins/wato/utils/__init__.py
+++ b/cmk/gui/plugins/wato/utils/__init__.py
@@ -93,6 +93,7 @@ from cmk.gui.watolib import (
ACResultCRIT,
ACResultWARN,
ACResultOK,
+ config_domain_registry,
ConfigDomain,
ConfigDomainCore,
ConfigDomainOMD,
diff --git a/cmk/gui/watolib.py b/cmk/gui/watolib.py
index 8aaa067..49c09f2 100644
--- a/cmk/gui/watolib.py
+++ b/cmk/gui/watolib.py
@@ -515,37 +515,18 @@ class ConfigDomain(object):
in_global_settings = True
@classmethod
- def all_classes(cls):
- # Classes may be registered twice, only store one of the occurances.
- # TODO(lm): Find the reason for this and solve this issue in the plugin
mechanism.
- # NOTE: One reason is the rampant execfile usage in the plugin folders
- # each language change creates additional class definitions
-
- # The latest "fix" changes the behaviour to return the last declared
class with the
- # same class name. This is usually a better idea, than returning outdated
classes
- classes = {}
- for subclass in cls.__subclasses__(): # pylint: disable=no-member
- classes[subclass.__name__] = subclass
-
- return classes.values()
-
-
- @classmethod
def enabled_domains(cls):
- return [ d for d in cls.all_classes() if d.enabled() ]
+ return [ d for d in config_domain_registry.values() if d.enabled() ]
@classmethod
def get_always_activate_domain_idents(cls):
- return [ d.ident for d in cls.all_classes() if d.always_activate ]
+ return [ d.ident for d in config_domain_registry.values() if d.always_activate ]
@classmethod
def get_class(cls, ident):
- for domain_class in cls.all_classes():
- if domain_class.ident == ident:
- return domain_class
- raise NotImplementedError(_("The domain \"%s\" does not
exist") % ident)
+ return config_domain_registry[ident]
@classmethod
@@ -628,6 +609,20 @@ class ConfigDomain(object):
+class ConfigDomainRegistry(cmk.gui.plugin_registry.ClassRegistry):
+ def plugin_base_class(self):
+ return ConfigDomain
+
+
+ def _register(self, plugin_class):
+ self._entries[plugin_class.ident] = plugin_class
+
+
+config_domain_registry = ConfigDomainRegistry()
+
+
+
+(a)config_domain_registry.register
class ConfigDomainCore(ConfigDomain):
needs_sync = True
needs_activation = True
@@ -646,6 +641,7 @@ class ConfigDomainCore(ConfigDomain):
+(a)config_domain_registry.register
class ConfigDomainGUI(ConfigDomain):
needs_sync = True
needs_activation = False
@@ -664,6 +660,7 @@ class ConfigDomainGUI(ConfigDomain):
+(a)config_domain_registry.register
class ConfigDomainEventConsole(ConfigDomain):
needs_sync = True
needs_activation = True
@@ -693,6 +690,7 @@ class ConfigDomainEventConsole(ConfigDomain):
+(a)config_domain_registry.register
class ConfigDomainCACertificates(ConfigDomain):
needs_sync = True
needs_activation = True
@@ -818,6 +816,7 @@ class ConfigDomainCACertificates(ConfigDomain):
+(a)config_domain_registry.register
class ConfigDomainOMD(ConfigDomain):
needs_sync = True
needs_activation = True
@@ -4356,6 +4355,7 @@ class CRESiteManagement(SiteManagement):
# to extract SiteManagement() to a separate module (depends on Folder, add_change, ...).
# As soon as we have untied this we should re-establish a watolib plugin hierarchy and
# move this to a CEE/CME specific watolib plugin
+(a)config_domain_registry.register
class ConfigDomainLiveproxy(ConfigDomain):
needs_sync = False
needs_activation = False
diff --git a/tests/unit/cmk/gui/test_watolib.py b/tests/unit/cmk/gui/test_watolib.py
index 58f45d2..da238a4 100644
--- a/tests/unit/cmk/gui/test_watolib.py
+++ b/tests/unit/cmk/gui/test_watolib.py
@@ -25,3 +25,19 @@ def test_registered_ac_tests():
'ACTestSizeOfExtensions',
'ACTestTmpfs'
]
+
+
+def test_registered_config_domains():
+ registered = sorted(watolib.config_domain_registry.keys())
+ assert registered == [
+ 'apache',
+ 'ca-certificates',
+ 'check_mk',
+ 'diskspace',
+ 'ec',
+ 'liveproxyd',
+ 'mknotifyd',
+ 'multisite',
+ 'omd',
+ 'rrdcached',
+ ]