From d25fd6ffd817b8050f25cfdcb08b8768ba15bc77 Mon Sep 17 00:00:00 2001 From: Jason Michalski Date: Mon, 20 May 2024 22:38:29 -0700 Subject: [PATCH] Fix portnum selection. I guess that only worked on the search page before. --- meshview/store.py | 13 ++++----- meshview/templates/buttons.html | 4 +-- meshview/templates/search.html | 21 ++++++++++++++ meshview/web.py | 50 +++++++++++++++------------------ 4 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 meshview/templates/search.html diff --git a/meshview/store.py b/meshview/store.py index 67b9947..3d85758 100644 --- a/meshview/store.py +++ b/meshview/store.py @@ -162,15 +162,12 @@ async def get_packet(packet_id): return result.scalar_one_or_none() -async def get_uplinked_packets(node_id): +async def get_uplinked_packets(node_id, portnum=None): async with database.async_session() as session: - result = await session.execute( - select(Packet) - .join(PacketSeen) - .where(PacketSeen.node_id == node_id) - .order_by(Packet.import_time.desc()) - .limit(500) - ) + q = select(Packet).join(PacketSeen).where(PacketSeen.node_id == node_id).order_by(Packet.import_time.desc()).limit(500) + if portnum: + q = q.where(Packet.portnum == portnum) + result = await session.execute(q) return result.scalars() diff --git a/meshview/templates/buttons.html b/meshview/templates/buttons.html index be80487..9959bff 100644 --- a/meshview/templates/buttons.html +++ b/meshview/templates/buttons.html @@ -2,14 +2,14 @@ TX/RX Uplinked diff --git a/meshview/templates/search.html b/meshview/templates/search.html new file mode 100644 index 0000000..8c9d2e7 --- /dev/null +++ b/meshview/templates/search.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + + +{% block body %} + +{% include "search_form.html" %} + + + +{% endblock %} diff --git a/meshview/web.py b/meshview/web.py index a287bc0..5e4c4e6 100644 --- a/meshview/web.py +++ b/meshview/web.py @@ -231,38 +231,32 @@ async def node_match(request): @routes.get("/packet_list/{node_id}") async def packet_list(request): node_id = int(request.match_info["node_id"]) - - async with asyncio.TaskGroup() as tg: - raw_packets = tg.create_task(store.get_packets(node_id)) - node = tg.create_task(store.get_node(node_id)) - trace = tg.create_task(build_trace(node_id)) - neighbors = tg.create_task(build_neighbors(node_id)) - has_telemetry = tg.create_task(store.has_packets(node_id, PortNum.TELEMETRY_APP)) - - packets = (Packet.from_model(p) for p in await raw_packets) - - template = env.get_template("node.html") - return web.Response( - text=template.render( - raw_node_id=node_id_to_hex(node_id), - node_id=node_id, - node=await node, - packets=packets, - packet_event="packet", - trace=await trace, - neighbors=await neighbors, - has_telemetry=await has_telemetry, - ), - content_type="text/html", - ) + if portnum := request.query.get("portnum"): + portnum = int(portnum) + else: + portnum = None + return await _packet_list(request, store.get_packets(node_id, portnum), 'packet') @routes.get("/uplinked_list/{node_id}") async def uplinked_list(request): node_id = int(request.match_info["node_id"]) + if portnum := request.query.get("portnum"): + portnum = int(portnum) + else: + portnum = None + return await _packet_list(request, store.get_uplinked_packets(node_id, portnum), 'uplinked') + + +async def _packet_list(request, raw_packets, packet_event): + node_id = int(request.match_info["node_id"]) + if portnum := request.query.get("portnum"): + portnum = int(portnum) + else: + portnum = None async with asyncio.TaskGroup() as tg: - raw_packets = tg.create_task(store.get_uplinked_packets(node_id)) + raw_packets = tg.create_task(raw_packets) node = tg.create_task(store.get_node(node_id)) trace = tg.create_task(build_trace(node_id)) neighbors = tg.create_task(build_neighbors(node_id)) @@ -276,11 +270,13 @@ async def uplinked_list(request): raw_node_id=node_id_to_hex(node_id), node_id=node_id, node=await node, + portnum=portnum, packets=packets, - packet_event="uplinked", + packet_event=packet_event, trace=await trace, neighbors=await neighbors, has_telemetry=await has_telemetry, + query_string=request.query_string, ), content_type="text/html", ) @@ -346,7 +342,7 @@ async def events(request): uplinked = [ u for u in event.uplinked - if portnum is None or portnum == p.portnum + if portnum is None or portnum == u.portnum ] event.clear() try: