Fix portnum selection.

I guess that only worked on the search page before.
This commit is contained in:
Jason Michalski
2024-05-20 22:38:29 -07:00
parent 1afe4e49a1
commit d25fd6ffd8
4 changed files with 51 additions and 37 deletions

View File

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

View File

@@ -2,14 +2,14 @@
<a
role="button"
class="btn {{ 'btn-primary' if packet_event == 'packet' else 'btn-secondary'}}"
href="/packet_list/{{node_id}}"
href="/packet_list/{{node_id}}?{{query_string}}"
>
TX/RX
</a>
<a
role="button"
class="btn {{ 'btn-primary' if packet_event == 'uplinked' else 'btn-secondary'}}"
href="/uplinked_list/{{node_id}}"
href="/uplinked_list/{{node_id}}?{{query_string}}"
>
Uplinked
</a>

View File

@@ -0,0 +1,21 @@
{% extends "base.html" %}
{% block body %}
{% include "search_form.html" %}
<ul>
{% for node in nodes %}
<li>
<a href="/packet_list/{{node.node_id}}?{{query_string}}">
{{node.node_id | node_id_to_hex}}
{% if node.long_name %}
{{node.short_name}} &mdash; {{node.long_name}}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
{% endblock %}

View File

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