Module: check_mk
Branch: master
Commit: da00a039cb812f5bea297966529c78192321af1d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=da00a039cb812f…
Author: Moritz Kiemer <mo(a)mathias-kettner.de>
Date: Fri Feb 15 09:03:19 2019 +0100
mk_jolokia.py: prepare default params for argparse
We want to have shared code with the agent, so prepare
to use these arguments in agents argparse logic.
Change-Id: I1cbdb02bb4b55885f64e01f4736f2ab9099c9695
---
agents/plugins/mk_jolokia.py | 56 +++++++++++++++++++----------------
tests/unit/plugins/test_mk_jolokia.py | 11 ++++---
2 files changed, 35 insertions(+), 32 deletions(-)
diff --git a/agents/plugins/mk_jolokia.py b/agents/plugins/mk_jolokia.py
index 74ab972..a8dc71b 100755
--- a/agents/plugins/mk_jolokia.py
+++ b/agents/plugins/mk_jolokia.py
@@ -28,7 +28,6 @@ import os
import socket
import sys
import urllib2
-import copy
try:
try:
@@ -55,30 +54,6 @@ except ImportError as import_error:
VERBOSE = '--verbose' in sys.argv
DEBUG = '--debug' in sys.argv
-DEFAULT_CONFIG = {
- # Default global configuration values
- "protocol": "http",
- "server": "localhost",
- "port": 8080,
- "timeout": 1.0,
- "user": "monitoring",
- "password": None,
- "mode": "digest",
- "suburi": "jolokia",
- "instance": None,
- "verify": None, # if not set, we change it to True
- "client_cert": None,
- "client_key": None,
- "service_url": None,
- "service_user": None,
- "service_password": None,
- "product": None,
- "custom_vars": [],
- # List of instances to monitor. Each instance is a dict where
- # the global configuration values can be overridden.
- "instances": [{}],
-}
-
QUERY_SPECS_GENERIC = [
("java.lang:type=Memory", "NonHeapMemoryUsage/used",
"NonHeapMemoryUsage", [], False),
("java.lang:type=Memory", "NonHeapMemoryUsage/max",
"NonHeapMemoryMax", [], False),
@@ -162,6 +137,31 @@ QUERY_SPECS_SPECIFIC = {
False),],
}
+# Default global configuration: key, value [, help]
+DEFAULT_CONFIG_TUPLES = (
+ ("protocol", "http", "Protocol to use (http/https)."),
+ ("server", "localhost", "Host name or IP address of the
Jolokia server."),
+ ("port", 8080, "TCP Port of the Jolokia server."),
+ ("suburi", "jolokia", "Path-component of the URI to
query."),
+ ("user", "monitoring", "Username to use for
connecting."),
+ ("password", None, "Password to use for connecting."),
+ ("mode", "digest", "Authentication mode. Can be
\"basic\", \"digest\" or \"https\"."),
+ ("instance", None, "Name of the instance in the monitoring. Defaults
to port."),
+ ("verify", None),
+ ("client_cert", None, "Path to client cert for https
authentication."),
+ ("client_key", None, "Client cert secret for https
authentication."),
+ ("service_url", None),
+ ("service_user", None),
+ ("service_password", None),
+ ("product", None, "Product description. Available: %s" % \
+ ", ".join(QUERY_SPECS_SPECIFIC.keys())),
+ ("timeout", 1.0, "Connection/read timeout for requests."),
+ ("custom_vars", []),
+ # List of instances to monitor. Each instance is a dict where
+ # the global configuration values can be overridden.
+ ("instances", [{}]),
+)
+
class SkipInstance(RuntimeError):
pass
@@ -171,6 +171,10 @@ class SkipMBean(RuntimeError):
pass
+def get_default_config_dict():
+ return {t[0]: t[1] for t in DEFAULT_CONFIG_TUPLES}
+
+
def write_section(name, iterable):
sys.stdout.write('<<<%s:sep(0)>>>\n' % name)
for line in iterable:
@@ -497,7 +501,7 @@ def generate_values(inst, var_list):
def yield_configured_instances(custom_config=None):
if custom_config is None:
- custom_config = copy.deepcopy(DEFAULT_CONFIG)
+ custom_config = get_default_config_dict()
conffile = os.path.join(os.getenv("MK_CONFDIR", "/etc/check_mk"),
"jolokia.cfg")
if os.path.exists(conffile):
diff --git a/tests/unit/plugins/test_mk_jolokia.py
b/tests/unit/plugins/test_mk_jolokia.py
index 3170f98..5b896fa 100644
--- a/tests/unit/plugins/test_mk_jolokia.py
+++ b/tests/unit/plugins/test_mk_jolokia.py
@@ -2,7 +2,6 @@
# pylint: disable=protected-access
import os
import sys
-import copy
import pytest
from testlib import cmk_path # pylint: disable=import-error
@@ -15,7 +14,7 @@ SANITIZE = mk_jolokia.JolokiaInstance._sanitize_config
@pytest.mark.parametrize("removed", ["protocol", "server",
"port", "suburi", "timeout"])
def test_missing_config_basic(removed):
- config = copy.deepcopy(mk_jolokia.DEFAULT_CONFIG)
+ config = mk_jolokia.get_default_config_dict()
config.pop(removed)
with pytest.raises(ValueError):
SANITIZE(config)
@@ -26,7 +25,7 @@ def test_missing_config_auth():
msg_pattern = r'Missing key\(s\): %s in configuration for UnitTest' %
key_string
return pytest.raises(ValueError, match=msg_pattern)
- config = copy.deepcopy(mk_jolokia.DEFAULT_CONFIG)
+ config = mk_jolokia.get_default_config_dict()
for key in ("password", "user", "service_password",
"client_cert", "client_key"):
config.pop(key)
config["instance"] = "UnitTest"
@@ -53,20 +52,20 @@ def test_missing_config_auth():
def test_config_instance():
- config = copy.deepcopy(mk_jolokia.DEFAULT_CONFIG)
+ config = mk_jolokia.get_default_config_dict()
assert SANITIZE(config).get("instance") == "8080"
config["instance"] = "some spaces in string"
assert SANITIZE(config).get("instance") ==
"some_spaces_in_string"
def test_config_timeout():
- config = copy.deepcopy(mk_jolokia.DEFAULT_CONFIG)
+ config = mk_jolokia.get_default_config_dict()
config["timeout"] = '23'
assert isinstance(SANITIZE(config).get("timeout"), float)
def test_config_legacy_cert_path_to_verify():
- config = copy.deepcopy(mk_jolokia.DEFAULT_CONFIG)
+ config = mk_jolokia.get_default_config_dict()
config["verify"] = None
assert SANITIZE(config).get("verify") is True
config["cert_path"] = "_default"