mirror of
https://github.com/pablorevilla-meshtastic/meshview.git
synced 2026-03-04 23:27:46 +01:00
upload local
This commit is contained in:
13
main.py
13
main.py
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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: <a href="/nodelist">Nodes</a> - <a href="/chat">Conversations</a> - <a href="/firehose">See <strong>everything</strong> </a>
|
||||
- Mesh Graph <a href="/graph/longfast">LF</a> - <a href="/graph/mediumslow">MS </a> - <a href="/stats">Stats </a>
|
||||
- <a href="/net">Weekly Net</a> - <a href="/map">Map</a></div><br>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user