Module: check_mk
Branch: master
Commit: a908c127d73dc7f689ec0cb743f6bbc1e6fffa71
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=a908c127d73dc7…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Oct 14 14:58:58 2016 +0200
Moved helper functions to own module
---
cmk_base/packaging.py | 13 ++++---
cmk_base/utils.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++++
modules/automation.py | 3 +-
modules/check_mk_base.py | 67 +++---------------------------------
4 files changed, 103 insertions(+), 69 deletions(-)
diff --git a/cmk_base/packaging.py b/cmk_base/packaging.py
index 98d476e..5d5943e 100644
--- a/cmk_base/packaging.py
+++ b/cmk_base/packaging.py
@@ -38,6 +38,8 @@ import cmk.paths
import cmk.log
logger = cmk.log.get_logger(__name__)
+import cmk_base.utils
+
pac_ext = ".mkp"
# TODO: Subclass MKGeneralException()?
@@ -528,16 +530,16 @@ def verify_check_mk_version(package):
min_version = package["version.min_required"]
cmk_version = cmk.__version__
- if is_daily_build_version(min_version):
- min_branch = branch_of_daily_build(min_version)
+ if cmk_base.utils.is_daily_build_version(min_version):
+ min_branch = cmk_base.utils.branch_of_daily_build(min_version)
if min_branch == "master":
return # can not check exact version
else:
# use the branch name (e.g. 1.2.8 as min version)
min_version = min_branch
- if is_daily_build_version(cmk_version):
- branch = branch_of_daily_build(cmk_version)
+ if cmk_base.utils.is_daily_build_version(cmk_version):
+ branch = cmk_base.utils.branch_of_daily_build(cmk_version)
if branch == "master":
return # can not check exact version
else:
@@ -546,7 +548,8 @@ def verify_check_mk_version(package):
compatible = True
try:
- compatible = parse_check_mk_version(min_version) <=
parse_check_mk_version(cmk_version)
+ compatible = cmk_base.utils.parse_check_mk_version(min_version) \
+ <= cmk_base.utils.parse_check_mk_version(cmk_version)
except:
# Be compatible: When a version can not be parsed, then skip this check
if cmk.debug.enabled():
diff --git a/cmk_base/utils.py b/cmk_base/utils.py
new file mode 100644
index 0000000..36ecde2
--- /dev/null
+++ b/cmk_base/utils.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2014 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at
http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# tails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+"""This is an unsorted collection of functions which are needed in
+Check_MK modules and/or cmk_base modules code."""
+
+# TODO: Try to find a better place for them.
+
+
+# Works with Check_MK version (without tailing .cee and/or .demo)
+def is_daily_build_version(v):
+ return len(v) == 10 or '-' in v
+
+
+# Works with Check_MK version (without tailing .cee and/or .demo)
+def branch_of_daily_build(v):
+ if len(v) == 10:
+ return "master"
+ else:
+ return v.split('-')[0]
+
+
+# Parses versions of Check_MK and converts them into comparable integers.
+# This does not handle daily build numbers, only official release numbers.
+# 1.2.4p1 -> 01020450001
+# 1.2.4 -> 01020450000
+# 1.2.4b1 -> 01020420100
+# 1.2.3i1p1 -> 01020310101
+# 1.2.3i1 -> 01020310100
+# TODO: Copied to werks.py - find location for common code.
+def parse_check_mk_version(v):
+ def extract_number(s):
+ number = ''
+ for i, c in enumerate(s):
+ try:
+ int(c)
+ number += c
+ except ValueError:
+ s = s[i:]
+ return number and int(number) or 0, s
+ return number and int(number) or 0, ''
+
+ parts = v.split('.')
+ while len(parts) < 3:
+ parts.append("0")
+
+ major, minor, rest = parts
+ sub, rest = extract_number(rest)
+
+ if not rest:
+ val = 50000
+ elif rest[0] == 'p':
+ num, rest = extract_number(rest[1:])
+ val = 50000 + num
+ elif rest[0] == 'i':
+ num, rest = extract_number(rest[1:])
+ val = 10000 + num*100
+
+ if rest and rest[0] == 'p':
+ num, rest = extract_number(rest[1:])
+ val += num
+ elif rest[0] == 'b':
+ num, rest = extract_number(rest[1:])
+ val = 20000 + num*100
+
+ return int('%02d%02d%02d%05d' % (int(major), int(minor), sub, val))
diff --git a/modules/automation.py b/modules/automation.py
index 5705e95..0768f98 100644
--- a/modules/automation.py
+++ b/modules/automation.py
@@ -1155,8 +1155,7 @@ def automation_create_or_edit_package(args, mode):
def automation_install_package(args):
import cmk_base.packaging
- file_content = sys.stdin.read()
- input_file = fake_file(file_content)
+ input_file = StringIO(sys.stdin.read())
try:
return cmk_base.packaging.install_package(file_object=input_file)
except Exception, e:
diff --git a/modules/check_mk_base.py b/modules/check_mk_base.py
index 37ab13e..046d1fa 100644
--- a/modules/check_mk_base.py
+++ b/modules/check_mk_base.py
@@ -61,6 +61,7 @@ import cmk.crash_reporting as crash_reporting
import cmk.paths
import cmk_base.agent_simulator
+import cmk_base.utils
# PLANNED CLEANUP:
# - central functions for outputting verbose information and bailing
@@ -1308,10 +1309,10 @@ def is_expected_agent_version(agent_version, expected_version):
elif type(expected_version) == tuple and expected_version[0] ==
'at_least':
spec = expected_version[1]
- if is_daily_build_version(agent_version) and 'daily_build' in spec:
+ if cmk_base.utils.is_daily_build_version(agent_version) and
'daily_build' in spec:
expected = int(spec['daily_build'].replace('.',
''))
- branch = branch_of_daily_build(agent_version)
+ branch = cmk_base.utils.branch_of_daily_build(agent_version)
if branch == "master":
agent = int(agent_version.replace('.', ''))
@@ -1322,7 +1323,8 @@ def is_expected_agent_version(agent_version, expected_version):
return False
elif 'release' in spec:
- if parse_check_mk_version(agent_version) <
parse_check_mk_version(spec['release']):
+ if cmk_base.utils.parse_check_mk_version(agent_version) \
+ < cmk_base.utils.parse_check_mk_version(spec['release']):
return False
return True
@@ -1333,65 +1335,6 @@ def is_expected_agent_version(agent_version, expected_version):
(agent_version, expected_version, e))
-# Works with Check_MK version (without tailing .cee and/or .demo)
-def is_daily_build_version(v):
- return len(v) == 10 or '-' in v
-
-
-# Works with Check_MK version (without tailing .cee and/or .demo)
-def branch_of_daily_build(v):
- if len(v) == 10:
- return "master"
- else:
- return v.split('-')[0]
-
-
-# Parses versions of Check_MK and converts them into comparable integers.
-# This does not handle daily build numbers, only official release numbers.
-# 1.2.4p1 -> 01020450001
-# 1.2.4 -> 01020450000
-# 1.2.4b1 -> 01020420100
-# 1.2.3i1p1 -> 01020310101
-# 1.2.3i1 -> 01020310100
-# TODO: Copied to werks.py - find location for common code.
-def parse_check_mk_version(v):
- def extract_number(s):
- number = ''
- for i, c in enumerate(s):
- try:
- int(c)
- number += c
- except ValueError:
- s = s[i:]
- return number and int(number) or 0, s
- return number and int(number) or 0, ''
-
- parts = v.split('.')
- while len(parts) < 3:
- parts.append("0")
-
- major, minor, rest = parts
- sub, rest = extract_number(rest)
-
- if not rest:
- val = 50000
- elif rest[0] == 'p':
- num, rest = extract_number(rest[1:])
- val = 50000 + num
- elif rest[0] == 'i':
- num, rest = extract_number(rest[1:])
- val = 10000 + num*100
-
- if rest and rest[0] == 'p':
- num, rest = extract_number(rest[1:])
- val += num
- elif rest[0] == 'b':
- num, rest = extract_number(rest[1:])
- val = 20000 + num*100
-
- return int('%02d%02d%02d%05d' % (int(major), int(minor), sub, val))
-
-
# Loops over all checks for a host, gets the data, calls the check
# function that examines that data and sends the result to the Core.
def do_all_checks_on_host(hostname, ipaddress, only_check_types = None,
fetch_agent_version = True):