From eb81a1fedf47cff9ec5a2711d2606a5006a86877 Mon Sep 17 00:00:00 2001 From: Tim Schubert Date: Sun, 1 Dec 2024 15:14:31 +0100 Subject: [PATCH] feat: count failed units in status --- home/status | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/home/status b/home/status index 176467a..45e78d8 100755 --- a/home/status +++ b/home/status @@ -5,6 +5,7 @@ import sys import time import requests import logging +import subprocess from datetime import datetime @@ -25,7 +26,7 @@ class Cat(Status): catwalk = " " * (cat_width - index) + 1 * "🐈🏳️‍🌈" + " " * index self.index = (index + 1) % cat_width - return catwalk + return {"full_text": catwalk} class Space(Status): @@ -37,7 +38,7 @@ class Space(Status): if self.backoff == 0: self.update() - return self.c_status + return {"full_text": self.c_status} def update(self): spacestatus_url = "https://status.stratum0.org/status.json" @@ -65,12 +66,26 @@ class Battery(Status): battery = f"{status} {capacity}%" - return battery + return {"full_text": battery} class Time(Status): - def status(state): - return datetime.now().strftime("%Vth %A %H:%M") + def status(self): + return {"full_text": datetime.now().strftime("%Vth %A %H:%M") } + + +class FailedUnits(Status): + def status(self): + proc = subprocess.run(["systemctl", "list-units", "--failed"], capture_output = True) + stdout = proc.stdout.decode('utf-8') + failed = 0 + for line in stdout: + if 'failed' in line: + failed += 1 + if failed is 0: + return {"full_text": f"No failed units"} + else: + return {"full_text": f"There are {failed} failed units", "color": "#ff0000"} def print_header(): @@ -94,7 +109,7 @@ def run(interval, widgets): except Exception as e: logger.error(e) if status: - body += {"full_text": f"{status}"}, + body += status, print(json.dumps(body), ",", flush=True) @@ -108,6 +123,6 @@ if __name__ == "__main__": # Interval in seconds interval = 1.0 - widgets = [Cat(), Space(), Battery(), Time()] + widgets = [Cat(), FailedUnits(), Space(), Battery(), Time()] run(interval, widgets)