diff --git a/setup.cfg b/setup.cfg index bb53b3cbaab8bfb0cbee27942d5c4fee1562fb45..8f25e82f2171f20026544cf5ad887bee3f16e0d1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,4 +5,4 @@ version = 1.7 [options] packages = find: scripts = vcheck.py -install_requires = prometheus_client; requests; pyyaml; packaging +install_requires = prometheus_client; requests; pyyaml; semver diff --git a/test_requirements b/test_requirements index a2a130be474da70a02704f1c659a1135929f97a5..8ff32243ad1b9d98062449669bd4eb5c9bc49d2d 100644 --- a/test_requirements +++ b/test_requirements @@ -1,6 +1,6 @@ prometheus_client requests pyyaml -packaging +semver pytest pytest-cov diff --git a/vcheck.py b/vcheck.py index 244675b095a75956620bb30b12ead530d82a22de..d5e3e0d439a63a685e2b71e6a99bee867fa31905 100755 --- a/vcheck.py +++ b/vcheck.py @@ -11,7 +11,8 @@ import threading import json import re import yaml -from packaging import version +import semver +import logging html_start = """<!DOCTYPE html> <html> @@ -163,13 +164,17 @@ def remove_by_label(g, p): g.remove(*sample.labels.values()) +def version_parse(version): + return semver.Version.parse(version, optional_minor_and_patch=True) + + def latest(versions, pattern): p = re.compile(pattern) v = [ v for v in versions if p.search(v) ] if len(v) == 0: return None, None else: - v.sort(key = version.parse, reverse = True) + v.sort(key = version_parse, reverse = True) return v[0], None @@ -274,16 +279,16 @@ def read_conf(confd): 'version' in entry for entry in doc): checks += doc else: - print(f'{f}: Format error') + logging.error(f'{f}: Format error') except yaml.YAMLError as err: - print(f'{f}: {err}') + logging.error(f'{f}: {err}') return checks def missing(d, *keys): for k in keys: if k not in d: - print(f"check {d['name']} missing required key {k}") + logging.error(f'check {d["name"]} missing required key {k}') return(f'config missing required key {k}') return None @@ -317,7 +322,7 @@ def check(confd, v): (current, error) = debian(c['id'], c['release']) else: error = f"check \"{c['check']}\" unknown" - print(f"check {c['name']} has unknown check {c['check']}") + logging.warning(f'check {c["name"]} has unknown check {c["check"]}') if not current: res += td(c['name'], c['version'], f'UNKNOWN: {error}', 'unknown') @@ -358,13 +363,13 @@ def start_http_server(port, addr=''): t = threading.Thread(target=httpd.serve_forever) t.daemon = True t.start() - print('serving on port', port) + logging.info(f'Serving on port {port}') def shutdown(signal, frame): global running running = False - print(f'{Signals(signal).name} received') + logging.info(f'{Signals(signal).name} received') def params(): port = environ.get('VC_PORT', default='8080') @@ -392,9 +397,10 @@ def run(port, confd, recheck): break sleep(1) - print('stopping server') + logging.info('stopping server') if __name__ == '__main__': # pragma: no cover + logging.basicConfig(level=logging.INFO) signal(SIGINT, shutdown) signal(SIGHUP, shutdown) signal(SIGTERM, shutdown)