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