diff --git a/meshview/templates/error.html b/meshview/templates/error.html
index 4408d6c..a847e55 100644
--- a/meshview/templates/error.html
+++ b/meshview/templates/error.html
@@ -4,6 +4,16 @@
Error
{{ error_message }}
+
+ {% if error_details %}
+
+ Error Details
+
+ {{error_details}}
+
+
+ {% endif %}
+
{% endblock %}
diff --git a/meshview/web.py b/meshview/web.py
index a302658..782843d 100644
--- a/meshview/web.py
+++ b/meshview/web.py
@@ -271,17 +271,25 @@ async def packet_list(request):
template = env.get_template("error.html")
rendered = template.render(
error_message="Invalid or missing node ID",
+ error_details=None,
site_config=CONFIG,
SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
- return web.Response(text=rendered, content_type="text/html")
+ return web.Response(text=rendered, status=400, content_type="text/html")
# Parse and validate portnum (optional)
portnum = request.query.get("portnum")
try:
portnum = int(portnum) if portnum else None
except ValueError:
- return web.Response(status=400, text="Invalid portnum value")
+ template = env.get_template("error.html")
+ rendered = template.render(
+ error_message="Invalid portnum value",
+ error_details=None,
+ site_config=CONFIG,
+ SOFTWARE_RELEASE=SOFTWARE_RELEASE,
+ )
+ return web.Response(text=rendered, status=400, content_type="text/html")
# Run tasks concurrently
async with asyncio.TaskGroup() as tg:
@@ -302,10 +310,11 @@ async def packet_list(request):
template = env.get_template("error.html")
rendered = template.render(
error_message="Node not found",
+ error_details=None,
site_config=CONFIG,
SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
- return web.Response(text=rendered, content_type="text/html")
+ return web.Response(text=rendered, status=404, content_type="text/html")
# Render template
template = env.get_template("node.html")
@@ -333,6 +342,7 @@ async def packet_list(request):
template = env.get_template("error.html")
rendered = template.render(
error_message="Internal server error",
+ error_details=traceback.format_exc(),
site_config=CONFIG,
SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
@@ -1057,12 +1067,14 @@ async def nodelist(request):
content_type="text/html",
)
except Exception as e:
-
- return web.Response(
- text="An error occurred while processing your request.",
- status=500,
- content_type="text/plain",
+ template = env.get_template("error.html")
+ rendered = template.render(
+ error_message="An error occurred while processing your request.",
+ error_details=traceback.format_exc(),
+ site_config=CONFIG,
+ SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
+ return web.Response(text=rendered, status=500, content_type="text/html")
@routes.get("/api/nodes")
async def api_nodes(request):
@@ -1166,11 +1178,14 @@ async def net(request):
except Exception as e:
print("Error processing net request")
- return web.Response(
- text="An internal server error occurred.",
- status=500,
- content_type="text/plain",
+ template = env.get_template("error.html")
+ rendered = template.render(
+ error_message="An internal server error occurred.",
+ error_details=traceback.format_exc(),
+ site_config=CONFIG,
+ SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
+ return web.Response(text=rendered, status=500, content_type="text/html")
@routes.get("/map")
@@ -1250,11 +1265,15 @@ async def top(request):
content_type="text/html",
)
except Exception as e:
- return web.Response(
- text=f"An error occurred: {str(e)}",
- status=500,
- content_type="text/plain",
+ print("Error in /top:", e)
+ template = env.get_template("error.html")
+ rendered = template.render(
+ error_message="An error occurred in /top",
+ error_details=traceback.format_exc(),
+ site_config=CONFIG,
+ SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
+ return web.Response(text=rendered, status=500, content_type="text/html")
@routes.get("/chat")
async def chat(request):
@@ -1278,11 +1297,15 @@ async def chat(request):
)
except Exception as e:
print("Error in /chat:", e)
- return web.Response(
- text="An error occurred while processing your request.",
- status=500,
- content_type="text/plain",
+ template = env.get_template("error.html")
+ rendered = template.render(
+ error_message="An error occurred while processing your request.",
+ error_details=traceback.format_exc(),
+ site_config=CONFIG,
+ SOFTWARE_RELEASE=SOFTWARE_RELEASE,
)
+ return web.Response(text=rendered, status=500, content_type="text/html")
+
@routes.get("/chat/updates")
async def chat_updates(request):
try: