From 18c33a823e6b4f604d3774e6344123e8a9973f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 5 Oct 2023 00:03:08 +0200 Subject: [PATCH] some bugfixes for route management --- .../templates/control/mesh_messages.html | 2 +- .../templates/control/mesh_node_detail.html | 17 ++++++++++++++++ src/c3nav/mesh/consumers.py | 20 +++++++++++++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/c3nav/control/templates/control/mesh_messages.html b/src/c3nav/control/templates/control/mesh_messages.html index b4ad86aa..d7abf8eb 100644 --- a/src/c3nav/control/templates/control/mesh_messages.html +++ b/src/c3nav/control/templates/control/mesh_messages.html @@ -30,7 +30,7 @@ {% for msg in mesh_messages %} - {{ msg.datetime }} + {{ msg.datetime.date }} {{ msg.datetime.time|date:"H:i:s" }} {{ msg.src_node }} {{ msg.get_message_type_display }} diff --git a/src/c3nav/control/templates/control/mesh_node_detail.html b/src/c3nav/control/templates/control/mesh_node_detail.html index 4ce6f106..5213e628 100644 --- a/src/c3nav/control/templates/control/mesh_node_detail.html +++ b/src/c3nav/control/templates/control/mesh_node_detail.html @@ -11,6 +11,23 @@ Address: {{ node.address }}
Name: {% if node.name %}{{ node.name }}{% else %}{% trans '(no name)' %}{% endif %}

+

+ Uplink: {{ node.uplink }}
+ + Last signin: + {{ node.last_signin.date }} {{ node.last_signin.time|date:"H:i:s" }} + ({% blocktrans trimmed with timesince=node.last_signin|timesince %} + {{ timesince }} ago + {% endblocktrans %}) +
+ + Last Message: + {{ node.last_msg.date }} {{ node.last_msg.time|date:"H:i:s" }} + ({% blocktrans trimmed with timesince=node.last_msg|timesince %} + {{ timesince }} ago + {% endblocktrans %}) +
+

{% trans 'Edit' %} diff --git a/src/c3nav/mesh/consumers.py b/src/c3nav/mesh/consumers.py index 29f90f6d..2e435218 100644 --- a/src/c3nav/mesh/consumers.py +++ b/src/c3nav/mesh/consumers.py @@ -72,7 +72,7 @@ class MeshConsumer(WebsocketConsumer): }) # add this node as a destination that this uplink handles (duh) - self.add_dst_nodes((src_node.address, )) + self.add_dst_nodes(nodes=(src_node, )) return @@ -84,10 +84,10 @@ class MeshConsumer(WebsocketConsumer): self.log_received_message(src_node, msg) if isinstance(msg, messages.MeshAddDestinationsMessage): - self.add_dst_nodes(src_node.mac_addresses) + self.add_dst_nodes(addresses=msg.mac_addresses) if isinstance(msg, messages.MeshRemoveDestinationsMessage): - self.remove_dst_nodes(src_node.mac_addresses) + self.remove_dst_nodes(addresses=msg.mac_addresses) def mesh_uplink_consumer(self, data): # message handler: if we are not the given uplink, leave this group @@ -112,7 +112,19 @@ class MeshConsumer(WebsocketConsumer): data=msg.tojson() ) - def add_dst_nodes(self, addresses): + def add_dst_nodes(self, nodes=None, addresses=None): + nodes = list(nodes) if nodes else [] + addresses = set(addresses) if addresses else set() + + missing_addresses = addresses - set(node.address for node in nodes) + + if missing_addresses: + MeshNode.objects.bulk_create( + [MeshNode(address=address) for address in missing_addresses], + ignore_conflicts=True + ) + addresses |= missing_addresses + for address in addresses: # create group name for this address group = get_mesh_comm_group(address)