From 306f00134f9111e693229d1cf6d9bf5ce6ab618f Mon Sep 17 00:00:00 2001 From: Super User Date: Wed, 28 Jan 2026 22:48:59 -0500 Subject: [PATCH] Handle NULL/string peer totals in Amnezia config --- src/modules/AmneziaWireguardConfiguration.py | 31 +++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/modules/AmneziaWireguardConfiguration.py b/src/modules/AmneziaWireguardConfiguration.py index 6ada7d5f..eb9102a9 100644 --- a/src/modules/AmneziaWireguardConfiguration.py +++ b/src/modules/AmneziaWireguardConfiguration.py @@ -11,6 +11,23 @@ from .WireguardConfiguration import WireguardConfiguration from .DashboardWebHooks import DashboardWebHooks +def _safe_int(value) -> int: + try: + if value is None: + return 0 + if isinstance(value, bool): + return int(value) + if isinstance(value, (int, float)): + return int(value) + if isinstance(value, str): + if value.strip() == "": + return 0 + return int(float(value)) + return int(value) + except Exception: + return 0 + + class AmneziaWireguardConfiguration(WireguardConfiguration): def __init__(self, DashboardConfig, AllPeerJobs: PeerJobs, @@ -31,6 +48,12 @@ class AmneziaWireguardConfiguration(WireguardConfiguration): def toJson(self): self.Status = self.getStatus() + def peer_total(peer): + return _safe_int(peer.cumu_data) + _safe_int(peer.total_data) + def peer_sent(peer): + return _safe_int(peer.cumu_sent) + _safe_int(peer.total_sent) + def peer_receive(peer): + return _safe_int(peer.cumu_receive) + _safe_int(peer.total_receive) return { "Status": self.Status, "Name": self.Name, @@ -45,9 +68,9 @@ class AmneziaWireguardConfiguration(WireguardConfiguration): "SaveConfig": self.SaveConfig, "Info": self.configurationInfo.model_dump(), "DataUsage": { - "Total": sum(list(map(lambda x: x.cumu_data + x.total_data, self.Peers))), - "Sent": sum(list(map(lambda x: x.cumu_sent + x.total_sent, self.Peers))), - "Receive": sum(list(map(lambda x: x.cumu_receive + x.total_receive, self.Peers))) + "Total": sum(list(map(peer_total, self.Peers))), + "Sent": sum(list(map(peer_sent, self.Peers))), + "Receive": sum(list(map(peer_receive, self.Peers))) }, "ConnectedPeers": len(list(filter(lambda x: x.status == "running", self.Peers))), "TotalPeers": len(self.Peers), @@ -319,4 +342,4 @@ class AmneziaWireguardConfiguration(WireguardConfiguration): with self.engine.connect() as conn: restricted = conn.execute(self.peersRestrictedTable.select()).mappings().fetchall() for i in restricted: - self.RestrictedPeers.append(AmneziaWGPeer(i, self)) \ No newline at end of file + self.RestrictedPeers.append(AmneziaWGPeer(i, self))