From 7cfe080e6f82778684f0a22f557db8a9bd8db6df Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Sat, 25 Dec 2021 11:29:14 +0100 Subject: [PATCH] bundles/sshmon: add check_pypi_for_new_release --- bundles/mautrix-telegram/metadata.py | 2 +- bundles/pretalx/metadata.py | 2 +- .../sshmon/files/check_github_for_new_release | 2 +- .../sshmon/files/check_pypi_for_new_release | 58 +++++++++++++++++++ bundles/sshmon/items.py | 7 ++- bundles/sysctl/metadata.py | 7 +++ 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 bundles/sshmon/files/check_pypi_for_new_release create mode 100644 bundles/sysctl/metadata.py diff --git a/bundles/mautrix-telegram/metadata.py b/bundles/mautrix-telegram/metadata.py index 0202450..f168d61 100644 --- a/bundles/mautrix-telegram/metadata.py +++ b/bundles/mautrix-telegram/metadata.py @@ -62,7 +62,7 @@ def icinga_check_for_new_release(metadata): 'mautrix-telegram': { 'services': { 'MAUTRIX-TELEGRAM UPDATE': { - 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_github_for_new_release mautrix/telegram {}'.format(metadata.get('mautrix-telegram/version')), + 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_pypi_for_new_release mautrix-telegram {}'.format(metadata.get('mautrix-telegram/version')), 'vars.notification.mail': True, 'check_interval': '60m', }, diff --git a/bundles/pretalx/metadata.py b/bundles/pretalx/metadata.py index c5a502a..fe5abc1 100644 --- a/bundles/pretalx/metadata.py +++ b/bundles/pretalx/metadata.py @@ -55,7 +55,7 @@ def icinga_check_for_new_release(metadata): 'pretalx': { 'services': { 'PRETALX UPDATE': { - 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_github_for_new_release pretalx/pretalx {}'.format(metadata.get('pretalx/version')), + 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_pypi_for_new_release pretalx {}'.format(metadata.get('pretalx/version')), 'vars.notification.mail': True, 'check_interval': '60m', }, diff --git a/bundles/sshmon/files/check_github_for_new_release b/bundles/sshmon/files/check_github_for_new_release index d00e3ed..e1e1fe8 100644 --- a/bundles/sshmon/files/check_github_for_new_release +++ b/bundles/sshmon/files/check_github_for_new_release @@ -59,7 +59,7 @@ try: else: exit(2) else: - print("Currently installed version matches newest release on github") + print("Currently installed version {} matches newest release on github".format(current_version)) exit(0) except Exception as e: print(repr(e)) diff --git a/bundles/sshmon/files/check_pypi_for_new_release b/bundles/sshmon/files/check_pypi_for_new_release new file mode 100644 index 0000000..39dc7c5 --- /dev/null +++ b/bundles/sshmon/files/check_pypi_for_new_release @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + + +from sys import argv, exit + +from requests import get + +try: + # Arch Linux (possibly future Ubuntu releases) + from packaging.version import parse +except ModuleNotFoundError: + # Debian + from setuptools._vendor.packaging.version import parse + + +assert ( + len(argv) >= 3 +), "Usage: check_pypi_for_new_release [tag prefix]" + +repo = argv[1] +current_version = argv[2] +if len(argv) >= 4: + tag_prefix = argv[3] +else: + tag_prefix = "" + +try: + r = get( + "https://pypi.org/pypi/{}/json".format(repo), + headers={"Accept": "application/json"}, + ) + r.raise_for_status() + + releases = r.json()['releases'] + + newest_release = None + + for version, info in releases.items(): + if version.startswith(tag_prefix): + if newest_release is None or parse(version) > parse(newest_release): + newest_release = version + + assert newest_release is not None, "Could not determine latest release" + + if parse(newest_release) > parse(current_version): + print( + "There is a newer version available: {} (currently installed: {})".format( + newest_release, current_version + ) + ) + + exit(2) + else: + print("Currently installed version {} matches newest release on PyPI".format(current_version)) + exit(0) +except Exception as e: + print(repr(e)) + exit(3) diff --git a/bundles/sshmon/items.py b/bundles/sshmon/items.py index 3568276..594cf66 100644 --- a/bundles/sshmon/items.py +++ b/bundles/sshmon/items.py @@ -50,12 +50,13 @@ files = { for check in { 'cpu_stats', - 'mounts', - 'ram', 'github_for_new_release', 'http_url_for_string', - 'https_certificate_at_url', 'http_wget', + 'https_certificate_at_url', + 'mounts', + 'pypi_for_new_release', + 'ram', 'systemd_unit', }: files["/usr/local/share/icinga/plugins/check_{}".format(check)] = { diff --git a/bundles/sysctl/metadata.py b/bundles/sysctl/metadata.py new file mode 100644 index 0000000..788b142 --- /dev/null +++ b/bundles/sysctl/metadata.py @@ -0,0 +1,7 @@ +defaults = { + 'sysctl': { + 'options': { + 'vm.overcommit_memory': 1, + }, + }, +}