Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 87 additions & 8 deletions omada_respondd/omada_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,88 @@ def scrape(url):
logger.error("Error: %s" % (ex))


def _to_float(value, default=0.0):
if value is None:
return default

if isinstance(value, str):
value = value.strip().split(" ")[0].replace(",", ".")

try:
return float(value)
except (TypeError, ValueError):
return default


def _to_int(value, default=0):
if value is None:
return default

try:
return int(float(value))
except (TypeError, ValueError):
return default


def _extract_loadavg(ap, more_ap_infos):
sys_stats = ap.get("sys_stats", {})
candidates = [
sys_stats.get("loadavg_1"),
sys_stats.get("loadavg1"),
ap.get("loadavg_1"),
ap.get("loadavg1"),
more_ap_infos.get("loadavg_1"),
more_ap_infos.get("loadavg1"),
]

for candidate in candidates:
if candidate is not None:
return _to_float(candidate, 0.0)

# Some Omada versions only expose CPU utilization; use a scaled value as fallback.
cpu_util = _to_float(more_ap_infos.get("cpuUtil"), -1.0)
if 0.0 <= cpu_util <= 100.0:
return cpu_util / 100.0

return 0.0


def _extract_memory(ap, more_ap_infos):
sys_stats = ap.get("sys_stats", {})

mem_used = _to_int(
sys_stats.get("mem_used", ap.get("mem_used", more_ap_infos.get("memUsed"))),
0,
)
mem_buffer = _to_int(
sys_stats.get(
"mem_buffer", ap.get("mem_buffer", more_ap_infos.get("memBuffer", 0))
),
0,
)
mem_total = _to_int(
sys_stats.get(
"mem_total", ap.get("mem_total", more_ap_infos.get("memTotal", 0))
),
0,
)

if mem_total <= 0:
mem_util = _to_float(more_ap_infos.get("memUtil"), -1.0)
if 0.0 <= mem_util <= 100.0:
mem_total = 100 * 1024
mem_used = int(mem_total * (mem_util / 100.0))
mem_buffer = 0

if mem_total <= 0:
mem_total = 100 * 1024

mem_used = min(max(mem_used, 0), mem_total)
mem_buffer = max(mem_buffer, 0)

return mem_used, mem_buffer, mem_total


def get_ap_frequency(channelData: str) -> Optional[int]:
if channelData == "N/A":
return None
Expand Down Expand Up @@ -209,8 +291,7 @@ def get_infos():
tx = tx + radioTraffic5g.get("tx", 0)
rx = rx + radioTraffic5g.get("rx", 0)

moreAPInfos.get("cpuUtil") # TODO: cpuUtil in Prozent
moreAPInfos.get("memUtil") # TODO: memUtil in Prozent
mem_used, mem_buffer, mem_total = _extract_memory(ap, moreAPInfos)

frequency24 = None
wp2g = moreAPInfos.get("wp2g", None)
Expand Down Expand Up @@ -287,12 +368,10 @@ def get_infos():
firmware=ap.get("version", None),
uptime=moreAPInfos.get("uptimeLong", None),
contact=snmp.get("contact", None),
load_avg=float(
ap.get("sys_stats", {}).get("loadavg_1", 0.0)
),
mem_used=ap.get("sys_stats", {}).get("mem_used", 0),
mem_buffer=ap.get("sys_stats", {}).get("mem_buffer", 0),
mem_total=ap.get("sys_stats", {}).get("mem_total", 0),
load_avg=_extract_loadavg(ap, moreAPInfos),
mem_used=mem_used,
mem_buffer=mem_buffer,
mem_total=mem_total,
tx_bytes=tx,
rx_bytes=rx,
gateway=offloader.get("gateway", None),
Expand Down
10 changes: 7 additions & 3 deletions omada_respondd/respondd_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,10 @@ def getStatistics(self):
aps = self._aps
statistics: List[StatisticsInfo] = []
for ap in aps.accesspoints:
mem_total = max(int(ap.mem_total), 1024)
mem_used = min(max(int(ap.mem_used), 0), mem_total)
mem_buffer = max(int(ap.mem_buffer), 0)

wirelessinfos: List[WirelessInfo] = []

if ap.frequency24:
Expand Down Expand Up @@ -327,9 +331,9 @@ def getStatistics(self):
node_id=ap.mac.replace(":", ""),
loadavg=ap.load_avg,
memory=MemoryInfo(
total=int(ap.mem_total / 1024),
free=int((ap.mem_total - ap.mem_used) / 1024),
buffers=int(ap.mem_buffer / 1024),
total=int(mem_total / 1024),
free=int((mem_total - mem_used) / 1024),
buffers=int(mem_buffer / 1024),
),
traffic=TrafficInfo(
tx=txInfo(bytes=int(ap.tx_bytes)),
Expand Down
Loading