Improved RNS Transport stats

This commit is contained in:
Mark Qvist 2025-01-26 01:12:06 +01:00
parent fc3e97b8fc
commit cc87e8c109
2 changed files with 57 additions and 21 deletions

View File

@ -115,7 +115,7 @@ class MQTT():
remote_telemeter = Telemeter.from_packed(telemetry)
read_telemetry = remote_telemeter.read_all()
telemetry_timestamp = read_telemetry["time"]["utc"]
root_path = f"lxmf/telemetry/{RNS.prettyhexrep(context_dest)}"
root_path = f"lxmf/telemetry/{RNS.hexrep(context_dest, delimit=False)}"
for sensor in remote_telemeter.sensors:
s = remote_telemeter.sensors[sensor]
topics = s.render_mqtt()

View File

@ -2505,9 +2505,13 @@ class Fuel(Sensor):
class RNSTransport(Sensor):
SID = Sensor.SID_RNS_TRANSPORT
STALE_TIME = 5
STALE_TIME = 1
def __init__(self):
self._last_traffic_rxb = 0
self._last_traffic_txb = 0
self._last_update = 0
self._update_lock = threading.Lock()
super().__init__(type(self).SID, type(self).STALE_TIME)
def setup_sensor(self):
@ -2518,24 +2522,50 @@ class RNSTransport(Sensor):
self.data = None
def update_data(self):
r = RNS.Reticulum.get_instance()
ifstats = r.get_interface_stats()
rss = None
if "rss" in ifstats:
rss = ifstats.pop("rss")
self.data = {
"transport_enabled": RNS.Reticulum.transport_enabled(),
"transport_identity": RNS.Transport.identity.hash,
"transport_uptime": time.time()-RNS.Transport.start_time if RNS.Reticulum.transport_enabled() else None,
"traffic_rxb": ifstats["rxb"],
"traffic_txb": ifstats["txb"],
"speed_rx": ifstats["rxs"],
"speed_tx": ifstats["txs"],
"memory_used": rss,
"ifstats": ifstats,
"link_count": r.get_link_count(),
"path_table": sorted(r.get_path_table(max_hops=RNS.Transport.PATHFINDER_M-1), key=lambda e: (e["interface"], e["hops"]) )
}
with self._update_lock:
if time.time() - self._last_update < self.STALE_TIME:
return
r = RNS.Reticulum.get_instance()
self._last_update = time.time()
ifstats = r.get_interface_stats()
rss = None
if "rss" in ifstats:
rss = ifstats.pop("rss")
if self.last_update == 0:
RNS.log("NO CALC DIFF")
rxs = ifstats["rxs"]
txs = ifstats["txs"]
else:
td = time.time()-self.last_update
rxd = ifstats["rxb"] - self._last_traffic_rxb
txd = ifstats["txb"] - self._last_traffic_txb
rxs = (rxd/td)*8
txs = (txd/td)*8
RNS.log(f"CALC DIFFS: td={td}, rxd={rxd}, txd={txd}")
RNS.log(f" rxs={rxs}, txs={txs}")
self._last_traffic_rxb = ifstats["rxb"]
self._last_traffic_txb = ifstats["txb"]
self.data = {
"transport_enabled": RNS.Reticulum.transport_enabled(),
"transport_identity": RNS.Transport.identity.hash,
"transport_uptime": time.time()-RNS.Transport.start_time if RNS.Reticulum.transport_enabled() else None,
"traffic_rxb": ifstats["rxb"],
"traffic_txb": ifstats["txb"],
"speed_rx": rxs,
"speed_tx": txs,
"speed_rx_inst": ifstats["rxs"],
"speed_tx_inst": ifstats["txs"],
"memory_used": rss,
"ifstats": ifstats,
"interface_count": len(ifstats["interfaces"]),
"link_count": r.get_link_count(),
"path_table": sorted(r.get_path_table(max_hops=RNS.Transport.PATHFINDER_M-1), key=lambda e: (e["interface"], e["hops"]) )
}
def pack(self):
d = self.data
@ -2592,9 +2622,12 @@ class RNSTransport(Sensor):
"traffic_txb": d["traffic_txb"],
"speed_rx": d["speed_rx"],
"speed_tx": d["speed_tx"],
"speed_rx_inst": d["speed_rx_inst"],
"speed_tx_inst": d["speed_tx_inst"],
"memory_used": d["memory_used"],
"path_count": len(d["path_table"]),
"link_count": d["link_count"],
"interface_count": len(ifs),
"interfaces": ifs,
"remote_transport_node_count": len(transport_nodes),
"remote_transport_nodes": transport_nodes,
@ -2632,9 +2665,12 @@ class RNSTransport(Sensor):
f"{topic}/traffic_txb": v["traffic_txb"],
f"{topic}/speed_rx": v["speed_rx"],
f"{topic}/speed_tx": v["speed_tx"],
f"{topic}/speed_rx_inst": v["speed_rx_inst"],
f"{topic}/speed_tx_inst": v["speed_tx_inst"],
f"{topic}/memory_used": v["memory_used"],
f"{topic}/path_count": v["path_count"],
f"{topic}/link_count": v["link_count"],
f"{topic}/interface_count": v["interface_count"],
f"{topic}/remote_transport_node_count": v["remote_transport_node_count"],
}
@ -2900,7 +2936,7 @@ class LXMFPropagation(Sensor):
def mqtt_desthash(desthash):
if type(desthash) == bytes:
return RNS.prettyhexrep(desthash)
return RNS.hexrep(desthash, delimit=False)
else:
return None