nomadnet-website/pages/status.mu

56 lines
1.6 KiB
Plaintext
Executable File

#!/usr/bin/env python3
import os
import time
import subprocess
import json
import hswro
UNIT_STATUS_ALLOWED_LINES = ["Active:", "Tasks:", "Memory:", "CPU:"]
def sizeof_fmt(num, suffix="B"):
for unit in ("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"):
if abs(num) < 1024.0:
return f"{num:3.1f}{unit}{suffix}"
num /= 1024.0
return f"{num:.1f}Yi{suffix}"
def systemd_unit_status(unit_name: str):
unit_status_raw = subprocess.run(["systemctl", "status", unit_name], capture_output=True)
for allowed in UNIT_STATUS_ALLOWED_LINES:
for line in unit_status_raw.stdout.splitlines():
line = line.decode('utf-8')
if allowed in line:
print(line)
def get_temp():
with open("/sys/class/thermal/thermal_zone0/temp", "r") as f:
t = f.read()
t = float(t) / 1000
print(f" CPU Temp: {t:.1f}°C")
status_raw = subprocess.run(["/home/reticulum/venv/bin/rnstatus", "-j"], capture_output=True)
status = json.loads(status_raw.stdout)
hswro.header("Status")
get_temp()
print(subprocess.run(["uptime"], capture_output=True).stdout.decode('utf-8'))
print("> Service status")
print(">> rnst status")
systemd_unit_status("rnsd")
print(">> nomadnet status")
systemd_unit_status("nomadnet")
print("> Interfaces")
for i in status['interfaces']:
print(">> ", i['short_name'])
print("`!Clients:`! ", i['clients'])
print("`!Current RX:`! ", i['rxs'])
print("`!Current TX:`! ", i['txs'])
print("`!Total RX:`! ", sizeof_fmt(i['rxb']))
print("`!Total TX:`! ", sizeof_fmt(i['txb']))
hswro.footer()