from owrx.controllers.admin import AuthorizationMixin from owrx.controllers.template import WebpageController from owrx.breadcrumb import Breadcrumb, BreadcrumbItem, BreadcrumbMixin from owrx.service import Services from owrx.web.receivers import Receivers from owrx.web.repeaters import Repeaters from owrx.web.eibi import EIBI from datetime import datetime import json import time import os import re import logging logger = logging.getLogger(__name__) class ServiceController(AuthorizationMixin, WebpageController): timeStarted = time.time() def indexAction(self): self.serve_template("services.html", **self.template_variables()) def template_variables(self): variables = super().template_variables() variables["services"] = self.renderServices() return variables @staticmethod def renderServices(): return """ {services}
Service SDR Profile Frequency
{status}
""".format( services="".join(ServiceController.renderService(c) for c in Services.listAll()), status=ServiceController.renderStatus() ) # Get last started timestamp @staticmethod def lastStarted(): return ServiceController.timeStarted @staticmethod def lastBooted(): try: with open('/proc/uptime', 'r') as f: return time.time() - float(f.readline().split()[0]) except: return 0 @staticmethod def renderTime(ts): ts = datetime.fromtimestamp(ts) td = str(datetime.now() - ts).split(".", 1)[0] ts = ts.astimezone().strftime("%H:%M:%S %Z, %d %b %Y") return ts + ", " + td + " ago" @staticmethod def renderStatus(): result = "" ts = ServiceController.lastBooted() if ts > 0: ts = ServiceController.renderTime(ts) result += "
System booted at {0}.
\n".format(ts) ts = ServiceController.lastStarted() if ts > 0: ts = ServiceController.renderTime(ts) result += "
Server started at {0}.
\n".format(ts) ts = EIBI.getSharedInstance().lastDownloaded() if ts > 0: ts = ServiceController.renderTime(ts) result += "
Shortwave schedule downloaded at {0}.
\n".format(ts) else: result += "
Shortwave schedule not downloaded.
\n" ts = Repeaters.getSharedInstance().lastDownloaded() if ts > 0: ts = ServiceController.renderTime(ts) result += "
Repeaters database downloaded at {0}.
\n".format(ts) else: result += "
Repeaters database not downloaded.
\n" ts = Receivers.getSharedInstance().lastDownloaded() if ts > 0: ts = ServiceController.renderTime(ts) result += "
Receivers database downloaded at {0}.
\n".format(ts) else: result += "
Receivers database not downloaded.
\n" return result @staticmethod def renderService(c): # Choose units based on frequency freq = c["freq"] if freq >= 1000000000: freq = freq / 1000000000 unit = "GHz" elif freq >= 30000000: freq = freq / 1000000 unit = "MHz" elif freq >= 1000: freq = freq / 1000 unit = "kHz" else: unit = "Hz" # Removing trailing zeros, converting mode to upper case freq = re.sub(r"\.?0+$", "", "{0}".format(freq)) # Format row return "{0}{1} {2}{3}{4}".format( c["mode"].upper(), c["sdr"], c["band"], freq, unit )