X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=health_renderer.py;h=038e315c48144435255cec9720e1b90be0e731fa;hb=e4dca16bbd329afdb587e8488767d88e17777254;hp=63f923fe74e04b6c7274c76edd8061b1bdfbefd9;hpb=d6990436e08a57ce211b10058dc61fb223cb94ec;p=kiosk.git diff --git a/health_renderer.py b/health_renderer.py index 63f923f..038e315 100644 --- a/health_renderer.py +++ b/health_renderer.py @@ -1,97 +1,97 @@ +#!/usr/bin/env python3 + +import os +import time +from typing import Dict, List + import constants import file_writer -import os import renderer -import time +import utils + class periodic_health_renderer(renderer.debuggable_abstaining_renderer): - def __init__(self, name_to_timeout_dict): + def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: super(periodic_health_renderer, self).__init__(name_to_timeout_dict, False) - def debug_prefix(self): + def debug_prefix(self) -> str: return "health" - def periodic_render(self, key): - f = file_writer.file_writer('periodic-health_6_300.html') - 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, + 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) - timestamps + 'last_rsnapshot_hourly' : hours * 24, - timestamps + 'last_rsnapshot_daily' : days * 3, - timestamps + 'last_rsnapshot_weekly' : days * 14, - timestamps + 'last_rsnapshot_monthly' : days * 70, + now = time.time() + n = 0 + for x in sorted(limits): + ts = os.stat(x).st_mtime + age = now - ts + self.debug_print("%s -- age is %ds, limit is %ds" % (x, age, limits[x])) + if age < limits[x]: + f.write( + '\n' + ) + else: + f.write( + '\n' + ) + f.write("
\n") - 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, + name = x.replace(timestamps, "") + name = name.replace("last_", "") + name = name.replace("_", " ") + duration = utils.describe_duration_briefly(int(age)) - 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 x in sorted(limits): - ts = os.stat(x).st_mtime - age = now - ts - self.debug_print("%s -- age is %ds, limit is %ds" % (x, age, limits[x])) - if age < limits[x]: - f.write('\n') - else: - f.write('\n') - f.write("
\n") - - name = x.replace(timestamps, "") - name = name.replace("last_", "") - name = name.replace("_", " ") - days = divmod(age, constants.seconds_per_day) - hours = divmod(days[1], constants.seconds_per_hour) - minutes = divmod(hours[1], constants.seconds_per_minute) - - self.debug_print("%s is %d days %02d:%02d old." % ( - name, days[0], hours[0], minutes[0])) - f.write("%s
\n%d days %02d:%02d old.\n" % ( - name, days[0], hours[0], minutes[0])) - f.write("
\n\n\n") - n += 1 - if n % 3 == 0: - f.write("\n\n\n") - self.write_footer(f) - f.close() + self.debug_print(f"{name} is {duration} old.") + f.write(f"{name}
\n{ts} old.\n") + f.write("
\n\n\n") + n += 1 + if n % 3 == 0: + f.write("\n\n\n") + self.write_footer(f) return True - def write_header(self, f): - f.write(""" + def write_header(self, f: file_writer.file_writer) -> None: + f.write( + """