import json
from subprocess import check_output
from pathlib import Path
def to_unit(value: int | str | bytes) -> str:
if isinstance(value, (str, bytes)):
value = int(value)
for unit in ("B", "KiB", "MiB", "GiB", "TiB"):
if value < 1024:
break
value /= 1024
return f"{value:.3f} {unit}"
def get_stats_mib(interface: str) -> tuple[str, str]:
data = json.loads(check_output(["ip", "-j", "-s", "link", "show", "dev", interface]))
stats = data[0]["stats64"]
return to_unit(stats["rx"]["bytes"]), to_unit(stats["tx"]["bytes"])
def get_stats_mib_py(interface: str) -> tuple[str, str]:
if_path = Path("/sys/class/net") / interface / "statistics"
if not if_path.exists():
raise ValueError(f"Interface {interface} does not exist.")
rx = to_unit(if_path.joinpath("rx_bytes").read_bytes())
tx = to_unit(if_path.joinpath("tx_bytes").read_bytes())
return rx, tx
get_stats_mib_py("eno1")
Comments
0 B
|👍
/👎