]> git.openstreetmap.org Git - nominatim.git/commitdiff
print any collected debug output when returning a timeout error
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 28 Jan 2024 19:20:25 +0000 (20:20 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 28 Jan 2024 21:30:34 +0000 (22:30 +0100)
nominatim/server/falcon/server.py
nominatim/server/starlette/server.py

index 00036795ae67b80f5c89726559bdd9860abb0dcb..1551c06257ff405aeca53a1b822ad2577c67ce7e 100644 (file)
@@ -16,6 +16,7 @@ from falcon.asgi import App, Request, Response
 
 from nominatim.api import NominatimAPIAsync
 import nominatim.api.v1 as api_impl
+import nominatim.api.logging as loglib
 from nominatim.config import Configuration
 
 class HTTPNominatimError(Exception):
@@ -45,8 +46,15 @@ async def timeout_error_handler(req: Request, resp: Response, #pylint: disable=u
         per exception info.
     """
     resp.status = 503
-    resp.text = "Query took too long to process."
-    resp.content_type = 'text/plain; charset=utf-8'
+
+    loglib.log().comment('Aborted: Query took too long to process.')
+    logdata = loglib.get_and_disable()
+    if logdata:
+        resp.text = logdata
+        resp.content_type = 'text/html; charset=utf-8'
+    else:
+        resp.text = "Query took too long to process."
+        resp.content_type = 'text/plain; charset=utf-8'
 
 
 class ParamWrapper(api_impl.ASGIAdaptor):
index f793dfde30a274533e2750f7a09a00a792710494..c98289915269fbefa8f56dea30f25e74a7893d3b 100644 (file)
@@ -15,7 +15,7 @@ import asyncio
 from starlette.applications import Starlette
 from starlette.routing import Route
 from starlette.exceptions import HTTPException
-from starlette.responses import Response, PlainTextResponse
+from starlette.responses import Response, PlainTextResponse, HTMLResponse
 from starlette.requests import Request
 from starlette.middleware import Middleware
 from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
@@ -23,6 +23,7 @@ from starlette.middleware.cors import CORSMiddleware
 
 from nominatim.api import NominatimAPIAsync
 import nominatim.api.v1 as api_impl
+import nominatim.api.logging as loglib
 from nominatim.config import Configuration
 
 class ParamWrapper(api_impl.ASGIAdaptor):
@@ -115,6 +116,12 @@ async def timeout_error(request: Request, #pylint: disable=unused-argument
                         _: Exception) -> Response:
     """ Error handler for query timeouts.
     """
+    loglib.log().comment('Aborted: Query took too long to process.')
+    logdata = loglib.get_and_disable()
+
+    if logdata:
+        return HTMLResponse(logdata)
+
     return PlainTextResponse("Query took too long to process.", status_code=503)