fix: trafic réseau — ne compter que les interfaces physiques
psutil.net_io_counters() sans filtre additionne br-*, veth*, docker0 ce qui triplait le trafic réel. On ne garde maintenant que les interfaces physiques (enp*, eth*, wlan*, bond*) pour DL/UL et total. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
0895c15778
commit
2c3ab22565
+13
-8
@@ -10,6 +10,7 @@ app = FastAPI()
|
|||||||
|
|
||||||
HOST_ROOT = os.environ.get("HOST_ROOT", "")
|
HOST_ROOT = os.environ.get("HOST_ROOT", "")
|
||||||
_net_last = {"t": 0.0, "bytes_sent": 0, "bytes_recv": 0}
|
_net_last = {"t": 0.0, "bytes_sent": 0, "bytes_recv": 0}
|
||||||
|
_PHYS_IFACE = re.compile(r"^(eth|en[ps]|wlan|wlp|bond|ens)\d")
|
||||||
_hw_cache: dict = {}
|
_hw_cache: dict = {}
|
||||||
_hw_cache_ts = 0.0
|
_hw_cache_ts = 0.0
|
||||||
HW_TTL = 60.0
|
HW_TTL = 60.0
|
||||||
@@ -296,18 +297,22 @@ def get_live() -> dict:
|
|||||||
swap = psutil.swap_memory()
|
swap = psutil.swap_memory()
|
||||||
disks = _read_host_disks()
|
disks = _read_host_disks()
|
||||||
|
|
||||||
net_now = psutil.net_io_counters()
|
# Trafic réseau : ne sommer que les interfaces physiques (exclut br-, veth, docker0…)
|
||||||
|
per_nic = psutil.net_io_counters(pernic=True)
|
||||||
|
phys = {k: v for k, v in per_nic.items() if _PHYS_IFACE.match(k)}
|
||||||
|
recv_total = sum(v.bytes_recv for v in phys.values())
|
||||||
|
sent_total = sum(v.bytes_sent for v in phys.values())
|
||||||
now = time.time()
|
now = time.time()
|
||||||
dt = now - _net_last["t"] if _net_last["t"] else 1.0
|
dt = now - _net_last["t"] if _net_last["t"] else 1.0
|
||||||
dl = (net_now.bytes_recv - _net_last["bytes_recv"]) / dt if _net_last["t"] else 0
|
dl = (recv_total - _net_last["bytes_recv"]) / dt if _net_last["t"] else 0
|
||||||
ul = (net_now.bytes_sent - _net_last["bytes_sent"]) / dt if _net_last["t"] else 0
|
ul = (sent_total - _net_last["bytes_sent"]) / dt if _net_last["t"] else 0
|
||||||
_net_last = {"t": now, "bytes_sent": net_now.bytes_sent, "bytes_recv": net_now.bytes_recv}
|
_net_last = {"t": now, "bytes_sent": sent_total, "bytes_recv": recv_total}
|
||||||
|
|
||||||
# Interfaces : filtrer loopback et bridges Docker
|
# Interfaces physiques uniquement pour l'affichage
|
||||||
net_ifaces = {}
|
net_ifaces = {}
|
||||||
stats = psutil.net_if_stats()
|
stats = psutil.net_if_stats()
|
||||||
for iface, addrs in psutil.net_if_addrs().items():
|
for iface, addrs in psutil.net_if_addrs().items():
|
||||||
if iface == "lo" or iface.startswith("br-") or iface == "docker0":
|
if not _PHYS_IFACE.match(iface):
|
||||||
continue
|
continue
|
||||||
for a in addrs:
|
for a in addrs:
|
||||||
if a.family == 2:
|
if a.family == 2:
|
||||||
@@ -349,8 +354,8 @@ def get_live() -> dict:
|
|||||||
"network": {
|
"network": {
|
||||||
"dl_bps": max(0.0, dl),
|
"dl_bps": max(0.0, dl),
|
||||||
"ul_bps": max(0.0, ul),
|
"ul_bps": max(0.0, ul),
|
||||||
"total_recv": net_now.bytes_recv,
|
"total_recv": recv_total,
|
||||||
"total_sent": net_now.bytes_sent,
|
"total_sent": sent_total,
|
||||||
"interfaces": net_ifaces,
|
"interfaces": net_ifaces,
|
||||||
},
|
},
|
||||||
"temperatures": temps,
|
"temperatures": temps,
|
||||||
|
|||||||
Reference in New Issue
Block a user