56 lines
1.6 KiB
Plaintext
Executable File
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()
|