Merge pull request #33 from SConaway/error-page

Use error template for more issues
This commit is contained in:
Pablo Revilla
2025-08-15 08:32:34 -07:00
committed by GitHub
2 changed files with 72 additions and 21 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 %}
+62 -21
View File
@@ -268,14 +268,28 @@ async def packet_list(request):
try:
node_id = int(request.match_info["node_id"])
except (KeyError, ValueError):
return web.Response(status=400, text="Invalid or missing node ID")
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, 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:
@@ -293,7 +307,14 @@ async def packet_list(request):
has_telemetry = await has_telemetry_task
if node is None:
return web.Response(status=404, text="Node not found")
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, status=404, content_type="text/html")
# Render template
template = env.get_template("node.html")
@@ -318,7 +339,14 @@ async def packet_list(request):
except Exception as e:
# Log full traceback for diagnostics
traceback.print_exc()
return web.Response(status=500, text="Internal server error")
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,
)
return web.Response(text=rendered, content_type="text/html")
@routes.get("/packet_details/{packet_id}")
@@ -1039,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):
@@ -1148,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")
@@ -1232,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):
@@ -1260,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: