]> 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
 
 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):
 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
         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):
 
 
 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.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
 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
 
 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):
 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.
     """
                         _: 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)
 
 
     return PlainTextResponse("Query took too long to process.", status_code=503)