diff --git a/meshview/store.py b/meshview/store.py index 9828af8..fe5d389 100644 --- a/meshview/store.py +++ b/meshview/store.py @@ -129,6 +129,20 @@ async def get_packets(node_id=None, portnum=None): return result.scalars() +async def get_packets_from(node_id=None, portnum=None): + async with database.async_session() as session: + q = select(Packet) + + if node_id: + q = q.where( + Packet.from_node_id == node_id + ) + if portnum: + q = q.where(Packet.portnum == portnum) + result = await session.execute(q.limit(500).order_by(Packet.import_time.desc())) + return result.scalars() + + async def get_packet(packet_id): async with database.async_session() as session: q = select(Packet).where(Packet.id == packet_id) @@ -136,13 +150,6 @@ async def get_packet(packet_id): return result.scalar_one_or_none() -async def get_position(node_id): - async with database.async_session() as session: - q = select(Packet).where((Packet.from_node_id == node_id) & (Packet.portnum == PortNum.POSITION_APP)).order_by(Packet.import_time.desc()) - result = await session.execute(q) - return result.scalar() - - async def get_uplinked_packets(node_id): async with database.async_session() as session: result = await session.execute( diff --git a/meshview/templates/node.html b/meshview/templates/node.html index 17045c3..e27d6a1 100644 --- a/meshview/templates/node.html +++ b/meshview/templates/node.html @@ -7,7 +7,7 @@ {% block css %} #map{ - height:90%; + height:100%; } #packet_details{ height: 95vh; @@ -26,8 +26,8 @@ sse-connect="/events?node_id={{node_id}}{% if portnum %}&portnum={{portnum}}{% endif %}"> {% endif %}
-
-
+
+
{% if node %}
{{node.long_name}} ({{node.node_id|node_id_to_hex}}) @@ -47,7 +47,7 @@ {% endif %}
-
+
@@ -67,17 +67,16 @@
-{% if position and position.raw_payload.latitude_i %} +{% if trace %} {% endif %} diff --git a/meshview/web.py b/meshview/web.py index d363ed6..6330328 100644 --- a/meshview/web.py +++ b/meshview/web.py @@ -23,10 +23,8 @@ env = Environment(loader=PackageLoader("meshview"), autoescape=select_autoescape async def build_trace(node_id): trace = [] - for raw_p in await store.get_packets(node_id, PortNum.POSITION_APP): + for raw_p in await store.get_packets_from(node_id, PortNum.POSITION_APP): p = Packet.from_model(raw_p) - if p.from_node_id != node_id: - continue if not p.raw_payload.latitude_i or not p.raw_payload.longitude_i: continue trace.append((p.raw_payload.latitude_i * 1e-7, p.raw_payload.longitude_i * 1e-7)) @@ -173,22 +171,21 @@ async def node_search(request): if node_id: node_task = tg.create_task(store.get_node(node_id)) packets_task = tg.create_task(store.get_packets(node_id, portnum=portnum)) - position_task = tg.create_task(store.get_position(node_id)) + trace_task = tg.create_task(build_trace(node_id)) else: loop = asyncio.get_running_loop() node_task = loop.create_future() node_task.set_result(None) packets_task = loop.create_future() packets_task.set_result(()) - position_task = loop.create_future() - position_task.set_result(None) + trace_task = loop.create_future() + trace_task.set_result([]) node_options_task = tg.create_task(store.get_fuzzy_nodes(raw_node_id)) packets = [Packet.from_model(p) for p in packets_task.result()] template = env.get_template("node.html") options = list(node_options_task.result()) - position = Packet.from_model(position_task.result()) if position_task.result() else None return web.Response( text=template.render( @@ -199,8 +196,7 @@ async def node_search(request): packet_event="packet", node_options=options, portnum=portnum, - position=position, - trace=await build_trace(node_id), + trace=trace_task.result(), ), content_type="text/html", ) @@ -226,7 +222,6 @@ async def node_match(request): async def packet_list(request): node_id = int(request.match_info["node_id"]) raw_packets = await store.get_packets(node_id) - position = await store.get_position(node_id) packets = (Packet.from_model(p) for p in raw_packets) template = env.get_template("node.html") @@ -238,7 +233,6 @@ async def packet_list(request): node=node, packets=packets, packet_event="packet", - position=Packet.from_model(position) if position else None, trace=await build_trace(node_id), ), content_type="text/html", @@ -250,7 +244,6 @@ async def uplinked_list(request): node_id = int(request.match_info["node_id"]) raw_packets = await store.get_uplinked_packets(node_id) packets = (Packet.from_model(p) for p in raw_packets) - position = await store.get_position(node_id) node = await store.get_node(node_id) template = env.get_template("node.html") @@ -262,7 +255,6 @@ async def uplinked_list(request): node=node, packets=packets, packet_event="uplinked", - position=Packet.from_model(position) if position else None, trace=await build_trace(node_id), ), content_type="text/html",