#!/usr/bin/env python3 import urllib.request import re import subprocess as sp PATTERN = r'<a\shref="(?P<link>\d\.\d/)">(?P<version>\d\.\d)/</a>\s+(?P<date>\d{2}-[A-Z][a-z]{2}-\d{4} \d{2}:\d{2})\s+-' PKG_NAME = "zabbix-server-pgsql" def parse_apt_version(version_str): return list(map(int, version_str.split(":")[1].split("-")[0].split(".")))[:2] def get_installation(): command = ["apt", "show", PKG_NAME] version = None source = None for line in sp.check_output( command, stderr=sp.PIPE, universal_newlines=True).splitlines(): if line.startswith("Version:"): version = parse_apt_version(line.split(":", 1)[1]) elif line.startswith("APT-Sources:"): source = line.split(":", 1)[1].strip() return version, source def get_remote_versions(): response = urllib.request.urlopen("https://repo.zabbix.com/zabbix/") page_content = response.read().decode("utf-8") for match in re.findall(PATTERN, page_content): link, version, date = match major, minor = map(int, version.split(".")) if minor % 2 == 0: yield (major, minor), date def main(): current_version, source = get_installation() if not source.startswith("http://repo.zabbix.com/"): return current_major, current_minor = current_version highest_version, date = sorted(get_remote_versions())[-1] if (current_major, current_minor) < highest_version: print( "New Zabbix version is available: {} from {}, please upgrade!".format( '.'.join(map(str, highest_version)), date)) if __name__ == "__main__": main()