fix: node_id int handling in connector + rule stats data path

- connector.send_message accepts int or string destination
- channels.py converts node_id to str before string operations
- Rule stats write to /data/ (Docker volume) not /opt/meshai/data/
This commit is contained in:
zvx-echo6 2026-05-13 19:27:04 -06:00
commit 32f6a238f8
3 changed files with 13 additions and 10 deletions

View file

@ -229,10 +229,13 @@ class MeshConnector:
try:
if destination:
# DM to specific node
# Convert hex string to int if needed
if destination.startswith("!"):
# DM to specific node - handle int or string
if isinstance(destination, int):
dest_num = destination
elif destination.startswith("!"):
dest_num = int(destination[1:], 16)
elif destination.isdigit():
dest_num = int(destination)
else:
dest_num = int(destination, 16)

View file

@ -168,8 +168,8 @@ class MeshDMChannel(NotificationChannel):
for node_id in self._node_ids:
try:
dest = int(node_id[1:], 16) if node_id.startswith("!") else (int(node_id) if node_id.isdigit() else int(node_id, 16))
self._connector.send_message(text=message, destination=dest, channel=0)
node_id = str(node_id)
self._connector.send_message(text=message, destination=node_id, channel=0)
except Exception as e:
logger.error("Failed to DM %s: %s", node_id, e)
success = False
@ -199,10 +199,10 @@ class MeshDMChannel(NotificationChannel):
for node_id in self._node_ids:
try:
dest = int(node_id[1:], 16) if node_id.startswith("!") else (int(node_id) if node_id.isdigit() else int(node_id, 16))
node_id = str(node_id)
self._connector.send_message(
text="MeshAI DM test",
destination=dest,
destination=node_id,
channel=0,
)
results.append({"node": node_id, "success": True})
@ -249,8 +249,8 @@ class MeshDMChannel(NotificationChannel):
for node_id in self._node_ids:
try:
dest = int(node_id[1:], 16) if node_id.startswith("!") else (int(node_id) if node_id.isdigit() else int(node_id, 16))
self._connector.send_message(text=message, destination=dest, channel=0)
node_id = str(node_id)
self._connector.send_message(text=message, destination=node_id, channel=0)
success_count += 1
except Exception as e:
errors.append(f"{node_id}: {e}")

View file

@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
SEVERITY_ORDER = ["routine", "priority", "immediate"]
# State file for rule statistics
RULE_STATS_FILE = "/opt/meshai/data/rule_stats.json"
RULE_STATS_FILE = "/data/rule_stats.json"
class NotificationRouter: