Show tracebacks on errors

This commit is contained in:
Steven Conaway
2025-08-14 18:48:30 -07:00
parent 82783b301f
commit e00c0a426a
2 changed files with 53 additions and 20 deletions
+10
View File
@@ -4,6 +4,16 @@
<div class="container mt-4 text-center">
<h2>Error</h2>
<p>{{ error_message }}</p>
{% if error_details %}
<details>
<summary>Error Details</summary>
<code style="text-align: start;">
<pre>{{error_details}}</pre>
</code>
</details>
{% endif %}
<button class="btn btn-primary mt-3" onclick="window.history.back()">Go Back</button>
</div>
{% endblock %}
+43 -20
View File
@@ -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: