X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=health_renderer.py;h=cfa6a8a2dfd0f47ff6777a7e09fab95c53b97721;hb=6cd5b068127501d2b48e8ac67b7432bffc5fce53;hp=302e793efda2b5e5ae968a38ffcaa8adab22e1a0;hpb=144f769da44d2a8411e320e2e66ad1dbc48ed091;p=kiosk.git diff --git a/health_renderer.py b/health_renderer.py index 302e793..cfa6a8a 100644 --- a/health_renderer.py +++ b/health_renderer.py @@ -1,159 +1,28 @@ #!/usr/bin/env python3 -import os -import time +import logging +import subprocess from typing import Dict -import constants import file_writer import renderer -import utils -class periodic_health_renderer(renderer.debuggable_abstaining_renderer): - def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: - super(periodic_health_renderer, self).__init__(name_to_timeout_dict, False) +logger = logging.getLogger(__file__) + - def debug_prefix(self) -> str: - return "health" +class periodic_health_renderer(renderer.abstaining_renderer): + def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: + super().__init__(name_to_timeout_dict) def periodic_render(self, key: str) -> bool: with file_writer.file_writer("periodic-health_6_300.html") as f: - timestamps = "/timestamps/" - days = constants.seconds_per_day - hours = constants.seconds_per_hour - mins = constants.seconds_per_minute - minutes = mins - limits = { - timestamps + "last_http_probe_wannabe_house": mins * 10, - timestamps + "last_http_probe_meerkat_cabin": mins * 10, - timestamps + "last_http_probe_dns_house": mins * 10, - timestamps + "last_http_probe_rpi_cabin": mins * 10, - timestamps + "last_http_probe_rpi_house": mins * 10, - timestamps + "last_http_probe_therm_house": mins * 10, - timestamps + "last_rsnapshot_hourly": hours * 24, - timestamps + "last_rsnapshot_daily": days * 3, - timestamps + "last_rsnapshot_weekly": days * 14, - timestamps + "last_rsnapshot_monthly": days * 70, - timestamps + "last_zfssnapshot_hourly": hours * 5, - timestamps + "last_zfssnapshot_daily": hours * 36, - timestamps + "last_zfssnapshot_weekly": days * 9, - timestamps + "last_zfssnapshot_monthly": days * 70, - timestamps + "last_zfssnapshot_cleanup": hours * 24, - timestamps + "last_zfs_scrub": days * 9, - timestamps + "last_backup_zfs_scrub": days * 9, - timestamps + "last_cabin_zfs_scrub": days * 9, - timestamps + "last_zfsxfer_backup.house": hours * 36, - timestamps + "last_zfsxfer_ski.dyn.guru.org": days * 7, - timestamps + "last_photos_sync": hours * 8, - timestamps + "last_disk_selftest_short": days * 14, - timestamps + "last_disk_selftest_long": days * 31, - timestamps + "last_backup_disk_selftest_short": days * 14, - timestamps + "last_backup_disk_selftest_long": days * 31, - timestamps + "last_cabin_disk_selftest_short": days * 14, - timestamps + "last_cabin_disk_selftest_long": days * 31, - timestamps + "last_cabin_rpi_ping": mins * 10, - timestamps + "last_healthy_wifi": mins * 10, - timestamps + "last_healthy_network": mins * 10, - timestamps + "last_scott_sync": days * 2, - } - self.write_header(f) - - now = time.time() - n = 0 - for filepath, limit_sec in sorted(limits.items()): - ts = os.stat(filepath).st_mtime - age = now - ts - self.debug_print(f"{filepath} -- age: {age}, limit {limit_sec}") - if age < limits[filepath]: - # OK - f.write( - '\n' - ) - txt_color="#ffffff" - else: - # BAD! - f.write( - '\n' - ) - txt_color="#000000" - f.write(f"
\n") - - name = filepath.replace(timestamps, "") - name = name.replace("last_", "") - name = name.replace("_", " ") - duration = utils.describe_duration_briefly(int(age)) - - self.debug_print(f"{name} is {duration} old.") - f.write(f"{name}
\n{duration} old.\n") - f.write("
\n\n\n") - n += 1 - if n % 3 == 0: - f.write("\n\n\n") - self.write_footer(f) + command = "/home/pi/bin/cronhealth.py --kiosk_mode" + p = subprocess.Popen(command, shell=True, bufsize=0, stdout=subprocess.PIPE) + for line in iter(p.stdout.readline, b''): + f.write(line.decode("utf-8")) + p.stdout.close() return True - def write_header(self, f: file_writer.file_writer) -> None: - f.write( - """ - - - - - - - - - - -

Periodic Cronjob Health Report

-
-
- - -""" - ) - - def write_footer(self, f: file_writer.file_writer) -> None: - f.write( - """ - -
- -""" - ) - - #test = periodic_health_renderer({"Test", 123}) #test.periodic_render("Test")