From 940b5772259ba5651cbdca081344d9c268da5a43 Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Fri, 24 Apr 2020 16:22:10 +0200 Subject: [PATCH] [modules] re-enable dnf --- modules/contrib/dnf.py | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 modules/contrib/dnf.py diff --git a/modules/contrib/dnf.py b/modules/contrib/dnf.py new file mode 100644 index 0000000..d3ceebf --- /dev/null +++ b/modules/contrib/dnf.py @@ -0,0 +1,77 @@ +# pylint: disable=C0111,R0903 + +"""Displays DNF package update information (///) + +Requires the following executable: + * dnf + +Parameters: + * dnf.interval: Time in minutes between two consecutive update checks (defaults to 30 minutes) + +""" + +import threading + +import bumblebee.util +import bumblebee.input +import bumblebee.output +import bumblebee.engine + +def get_dnf_info(widget): + try: + res = bumblebee.util.execute("dnf updateinfo") + except RuntimeError: + pass + + security = 0 + bugfixes = 0 + enhancements = 0 + other = 0 + for line in res.split("\n"): + + if not line.startswith(" "): continue + elif "ecurity" in line: + for s in line.split(): + if s.isdigit(): security += int(s) + elif "ugfix" in line: + for s in line.split(): + if s.isdigit(): bugfixes += int(s) + elif "hancement" in line: + for s in line.split(): + if s.isdigit(): enhancements += int(s) + else: + for s in line.split(): + if s.isdigit(): other += int(s) + + widget.set("security", security) + widget.set("bugfixes", bugfixes) + widget.set("enhancements", enhancements) + widget.set("other", other) + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + widget = bumblebee.output.Widget(full_text=self.updates) + super(Module, self).__init__(engine, config, widget) + self.interval_factor(60) + self.interval(30) + + def updates(self, widget): + result = [] + for t in ["security", "bugfixes", "enhancements", "other"]: + result.append(str(widget.get(t, 0))) + return "/".join(result) + + def update(self, widgets): + thread = threading.Thread(target=get_dnf_info, args=(widgets[0],)) + thread.start() + + def state(self, widget): + cnt = 0 + for t in ["security", "bugfixes", "enhancements", "other"]: + cnt += widget.get(t, 0) + if cnt == 0: + return "good" + if cnt > 50 or widget.get("security", 0) > 0: + return "critical" + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4