upload local

This commit is contained in:
madeofstown
2025-03-02 17:12:42 -08:00
parent e879030d70
commit c8bc651970
6 changed files with 42 additions and 11 deletions

13
main.py
View File

@@ -7,6 +7,7 @@ from meshview import database
from meshview import store
from meshview import web
from meshview import http
from meshview import models
async def load_database_from_mqtt(mqtt_server: str , mqtt_port: int, topic: list, mqtt_user: str | None = None, mqtt_passwd: str | None = None):
@@ -25,6 +26,17 @@ async def main(config):
if config["mqtt"]["password"] != "":
mqtt_passwd: str = config["mqtt"]["password"]
mqtt_topics = json.loads(config["mqtt"]["topics"])
# Create database with site configuration
async with database.async_session() as session:
site_config = models.SiteConfig(
site_domain = config["site"]["domain"],
site_title = config["site"]["title"],
site_message = config["site"]["message"]
)
session.add(site_config)
# print("Site configuration loaded to database")
async with asyncio.TaskGroup() as tg:
tg.create_task(
@@ -55,6 +67,7 @@ def load_config(file_path):
return config
if __name__ == '__main__':
parser = argparse.ArgumentParser("meshview")
parser.add_argument("--config", help="Path to the configuration file.", default="config.ini")

View File

@@ -70,3 +70,9 @@ class Traceroute(Base):
route: Mapped[bytes] = mapped_column(nullable=True)
import_time: Mapped[datetime] = mapped_column(nullable=True)
class SiteConfig(Base):
__tablename__="site_config"
id: Mapped[int] = mapped_column(primary_key=True)
site_domain: Mapped[str] = mapped_column(nullable=False)
site_title: Mapped[str] = mapped_column(nullable=False)
site_message: Mapped[str] = mapped_column(nullable=True)

View File

@@ -8,7 +8,7 @@ from meshtastic.protobuf.portnums_pb2 import PortNum
from meshtastic.protobuf.mesh_pb2 import User, HardwareModel
from meshview import database
from meshview import decode_payload
from meshview.models import Packet, PacketSeen, Node, Traceroute
from meshview.models import Packet, PacketSeen, Node, Traceroute, SiteConfig
from meshview import notify
@@ -556,4 +556,10 @@ async def get_nodes(role=None, channel=None, hw_model=None):
return [] # Return an empty list in case of failure
async def get_site_config():
async with database.async_session() as session:
query = select(SiteConfig)
result = await session.execute(query)
site_config = result.scalars().all()[-1]
return site_config

View File

@@ -33,7 +33,8 @@
</style>
</head>
<body hx-indicator="#spinner">
<br><div style="text-align:center"><strong>Bay Area Mesh - http://bayme.sh</strong></div>
<br><div style="text-align:center"><strong>{{ site_config.site_title }} - {{ site_config.site_domain }}</strong></div>
<div style="text-align: center;">{{ site_config.site_message }}</div>
<div style="text-align:center">Quick Links:&nbsp;&nbsp;<a href="/nodelist">Nodes</a>&nbsp;-&nbsp;<a href="/chat">Conversations</a>&nbsp;-&nbsp;<a href="/firehose">See <strong>everything</strong> </a>
&nbsp;-&nbsp;Mesh Graph <a href="/graph/longfast">LF</a>&nbsp;-&nbsp;<a href="/graph/mediumslow">MS </a>&nbsp;-&nbsp;<a href="/stats">Stats </a>
&nbsp;-&nbsp;<a href="/net">Weekly Net</a>&nbsp;-&nbsp;<a href="/map">Map</a></div><br>

View File

@@ -3,11 +3,10 @@
{% block body %}
<div class="container">
<div class="row">
<div class="col-6">
<div>
{% include 'packet.html' %}
</div>
<div
class="col-6 sticky-top"
id="packet_details"
hx-get="/packet_details/{{packet.id}}"
hx-trigger="load"

View File

@@ -104,7 +104,7 @@ routes = web.RouteTableDef()
async def index(request):
template = env.get_template("index.html")
return web.Response(
text=template.render(is_hx_request="HX-Request" in request.headers, node=None),
text=template.render(is_hx_request="HX-Request" in request.headers, node=None, site_config = await store.get_site_config()),
content_type="text/html",
)
@@ -245,6 +245,8 @@ async def node_match(request):
return web.Response(
text=template.render(
node_options=node_options,
site_config = await store.get_site_config()
),
content_type="text/html",
)
@@ -260,6 +262,7 @@ async def packet_list(request):
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"])
@@ -300,6 +303,7 @@ async def _packet_list(request, raw_packets, packet_event):
neighbors=await neighbors,
has_telemetry=await has_telemetry,
query_string=request.query_string,
site_config = await store.get_site_config(),
),
content_type="text/html",
)
@@ -515,6 +519,7 @@ async def packet_details(request):
text=template.render(
packets=(Packet.from_model(p) for p in packets),
portnum=portnum,
site_config = await store.get_site_config(),
),
content_type="text/html",
)
@@ -543,7 +548,7 @@ async def chat(request):
#print("Rendering template...")
template = env.get_template("chat.html")
return web.Response(
text=template.render(packets=filtered_packets),
text=template.render(packets=filtered_packets, site_config = await store.get_site_config()),
content_type="text/html",
)
@@ -567,7 +572,7 @@ async def packet(request):
)
template = env.get_template("packet_index.html")
return web.Response(
text=template.render(packet=Packet.from_model(packet)),
text=template.render(packet=Packet.from_model(packet), site_config = await store.get_site_config()),
content_type="text/html",
)
@@ -1145,6 +1150,7 @@ async def stats(request):
total_packets_seen=total_packets_seen,
total_nodes_longfast=total_nodes_longfast,
total_nodes_mediumslow=total_nodes_mediumslow,
site_config = await store.get_site_config(),
),
content_type="text/html",
)
@@ -1530,7 +1536,7 @@ async def nodelist(request):
template = env.get_template("nodelist.html")
return web.Response(
text=template.render(nodes=nodes),
text=template.render(nodes=nodes, site_config = await store.get_site_config()),
content_type="text/html",
)
except Exception as e:
@@ -1565,7 +1571,7 @@ async def net(request):
# Render template
template = env.get_template("net.html")
return web.Response(
text=template.render(packets=filtered_packets),
text=template.render(packets=filtered_packets, site_config = await store.get_site_config()),
content_type="text/html",
)
@@ -1623,7 +1629,7 @@ async def map(request):
nodes= await store.get_nodes()
template = env.get_template("map.html")
return web.Response(
text=template.render(nodes=nodes),
text=template.render(nodes=nodes, site_config = await store.get_site_config()),
content_type="text/html",
)
except Exception as e: