from __future__ import annotations
from pathlib import Path
from typing import NamedTuple
DEV = Path("/proc/net/dev")
class ReceiveStats(NamedTuple):
bytes: int
packets: int
errs: int
drop: int
fifo: int
frame: int
compressed: int
multicast: int
class TransmitStats(NamedTuple):
bytes: int
packets: int
errs: int
drop: int
fifo: int
colls: int
carrier: int
compressed: int
class StatsResult(NamedTuple):
interface: str
receive: ReceiveStats
transmit: TransmitStats
def interface_stats(interface: str) -> StatsResult | None:
with DEV.open() as fd:
# skip header
for _ in range(2):
next(fd)
# read statistics
for iface, *data in map(str.split, fd):
iface = iface.removesuffix(":")
if iface == interface:
# convert all data to int
data = tuple(map(int, data))
# instanciate from data a NamedTuple
receive = ReceiveStats(*data[0:8])
transmit = TransmitStats(*data[8:])
# return combined NamedTuple
return StatsResult(iface, receive, transmit)
Comments
0 B
|👍
/👎