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)
|