From 7bc7c5dbc96acbfeb55728c48d999e2e9008ca94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laura=20Kl=C3=BCnder?=
Date: Thu, 9 Nov 2023 18:27:57 +0100
Subject: [PATCH] improve some mesh ui, show more details
---
src/c3nav/mesh/models.py | 3 ++
.../mesh/templates/mesh/node_detail.html | 35 +++++++++++++------
src/c3nav/mesh/templates/mesh/nodes.html | 29 ++++++++++-----
src/c3nav/mesh/views/firmware.py | 2 +-
src/c3nav/mesh/views/nodes.py | 5 ++-
5 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/src/c3nav/mesh/models.py b/src/c3nav/mesh/models.py
index 733972c1..a6c1d3d0 100644
--- a/src/c3nav/mesh/models.py
+++ b/src/c3nav/mesh/models.py
@@ -194,6 +194,9 @@ class MeshNode(models.Model):
sha256_hash=firmware_msg.app_desc.app_elf_sha256,
)
+ # overriden by prefetch_firmwares()
+ firmware_desc = None
+
@cached_property
def chip(self) -> ChipType:
return self.last_messages[MeshMessageType.CONFIG_HARDWARE].parsed.chip
diff --git a/src/c3nav/mesh/templates/mesh/node_detail.html b/src/c3nav/mesh/templates/mesh/node_detail.html
index 35428c82..3f9b93a9 100644
--- a/src/c3nav/mesh/templates/mesh/node_detail.html
+++ b/src/c3nav/mesh/templates/mesh/node_detail.html
@@ -13,8 +13,19 @@
{% comment %}todo: more details{% endcomment %}
- Uplink: {% if node.uplink %}{{ node.uplink.node }}
{% endif %}
-
+ Uplink:
+ {% with uplink=node.get_uplink %}
+ {% if uplink %}
+ {{ uplink.node }}
+ {% if uplink.node == node %}
+ (direct)
+ {% endif %}
+ {% else %}
+ offline
+ {% endif %}
+ {% endwith %}
+
+
Last signin:
{{ node.last_signin.date }} {{ node.last_signin.time|date:"H:i:s" }}
({% blocktrans trimmed with timesince=node.last_signin|timesince %}
@@ -23,7 +34,7 @@
Last Message:
- {{ node.last_msg.date }} {{ node.last_msg.time|date:"H:i:s" }}
+ {{ node.last_messages.any.datetime.date }} {{ node.last_messages.any.datetime|date:"H:i:s" }}
({% blocktrans trimmed with timesince=node.last_msg|timesince %}
{{ timesince }} ago
{% endblocktrans %})
@@ -64,15 +75,19 @@
Firmware
- Firmware: {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.project_name }} {{ node.last_messages.CONFIG_FIRMWARE.parsed.version }} (IDF {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.idf_version }})
-
- Compile Date: {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.compile_date }} {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.compile_time }}
-
- SHA256: {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.app_elf_sha256 }}
+ {% if node.firmware_desc.build %}
+ Firmware: {{ node.firmware_desc.project_name }} {{ node.firmware_desc.version }}
+ Build: {{ node.firmware_desc.build.variant }}
+ Created: {{ node.firmware_desc.created }}
+ {% else %}
+ Firmware: {{ node.firmware_desc.project_name }} {{ node.firmware_desc.version }}
+ First seen: {{ node.firmware_desc.created }}
+ SHA256: {{ node.firmware_desc.sha256_hash }}
+ {% endif %}
-
Uplink
+
Uplink configuration
Enabled: {{ node.last_messages.CONFIG_UPLINK.parsed.enabled }},
SSID: {{ node.last_messages.CONFIG_UPLINK.parsed.ssid }},
@@ -88,7 +103,7 @@
-
Position
+
Position configuration
X={{ node.last_messages.CONFIG_POSITION.parsed.x_pos }}, Y={{ node.last_messages.CONFIG_POSITION.parsed.y_pos }}, Z={{ node.last_messages.CONFIG_POSITION.parsed.z_pos }}
diff --git a/src/c3nav/mesh/templates/mesh/nodes.html b/src/c3nav/mesh/templates/mesh/nodes.html
index 72c6fa4b..863fa300 100644
--- a/src/c3nav/mesh/templates/mesh/nodes.html
+++ b/src/c3nav/mesh/templates/mesh/nodes.html
@@ -17,15 +17,22 @@
{{ node }} |
- {{ node.last_messages.CONFIG_BOARD.parsed.board_config.board.pretty_name }}
- ({{ node.last_messages.CONFIG_HARDWARE.parsed.chip.pretty_name }} rev{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_major }}.{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_minor }})
+ {{ node.last_messages.CONFIG_BOARD.parsed.board_config.board.pretty_name }}
+ ({{ node.last_messages.CONFIG_HARDWARE.parsed.chip.pretty_name }} rev{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_major }}.{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_minor }})
|
- {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.version }}
- (IDF {{ node.last_messages.CONFIG_FIRMWARE.parsed.app_desc.idf_version }})
+ {% if node.firmware_desc.build %}
+ {{ node.firmware_desc.project_name }} {{ node.firmware_desc.version }}
+
+ {{ node.firmware_desc.build.variant }}
+
+ {% else %}
+ {{ node.firmware_desc.project_name }} {{ node.firmware_desc.version }}
+ {{ node.firmware_desc.sha256_hash }}
+ {% endif %}
|
- {% blocktrans trimmed with timesince=node.last_msg|timesince %}
+ {% blocktrans trimmed with timesince=node.last_messages.any.datetime|timesince %}
{{ timesince }} ago
{% endblocktrans %}
|
@@ -34,9 +41,15 @@
{{ timesince }} ago
{% endblocktrans %}
- {% comment %}todo: hide uplink if timed out{% endcomment %}
- {% comment %}todo: more details{% endcomment %}
- {% if node.uplink %}{{ node.uplink.node }}{% endif %} |
+
+ {% with uplink=node_get_uplink %}
+ {% if uplink %}
+ {{ node.uplink.node }}
+ {% else %}
+ offline
+ {% endif %}
+ {% endwith %}
+ |
{% endfor %}
diff --git a/src/c3nav/mesh/views/firmware.py b/src/c3nav/mesh/views/firmware.py
index 06e4b368..c2d7367d 100644
--- a/src/c3nav/mesh/views/firmware.py
+++ b/src/c3nav/mesh/views/firmware.py
@@ -44,7 +44,7 @@ class FirmwareDetailView(MeshControlMixin, DetailView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data()
- nodes = list(MeshNode.objects.all().prefetch_firmwares().prefetch_last_messages(
+ nodes: list[MeshNode] = list(MeshNode.objects.all().prefetch_firmwares().prefetch_last_messages(
MeshMessageType.CONFIG_BOARD,
))
builds = self.get_object().builds.all()
diff --git a/src/c3nav/mesh/views/nodes.py b/src/c3nav/mesh/views/nodes.py
index 04958d7f..4410eed8 100644
--- a/src/c3nav/mesh/views/nodes.py
+++ b/src/c3nav/mesh/views/nodes.py
@@ -1,5 +1,4 @@
from django.contrib.messages.views import SuccessMessageMixin
-from django.db.models import Max
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
@@ -17,7 +16,7 @@ class NodeListView(MeshControlMixin, ListView):
context_object_name = "nodes"
def get_queryset(self):
- return super().get_queryset().annotate(last_msg=Max('received_messages__datetime')).prefetch_last_messages()
+ return super().get_queryset().prefetch_last_messages().prefetch_firmwares()
def post(self, request):
return redirect(
@@ -32,7 +31,7 @@ class NodeDetailView(MeshControlMixin, DetailView):
context_object_name = "node"
def get_queryset(self):
- return super().get_queryset().annotate(last_msg=Max('received_messages__datetime')).prefetch_last_messages()
+ return super().get_queryset().prefetch_last_messages().prefetch_firmwares()
class NodeEditView(MeshControlMixin, SuccessMessageMixin, UpdateView):