print any collected debug output when returning a timeout error

This commit is contained in:
Sarah Hoffmann
2024-01-28 20:20:25 +01:00
parent 3cc3e3b2e3
commit 76eadc562c
2 changed files with 18 additions and 3 deletions

View File

@@ -16,6 +16,7 @@ from falcon.asgi import App, Request, Response
from nominatim.api import NominatimAPIAsync from nominatim.api import NominatimAPIAsync
import nominatim.api.v1 as api_impl import nominatim.api.v1 as api_impl
import nominatim.api.logging as loglib
from nominatim.config import Configuration from nominatim.config import Configuration
class HTTPNominatimError(Exception): class HTTPNominatimError(Exception):
@@ -45,8 +46,15 @@ async def timeout_error_handler(req: Request, resp: Response, #pylint: disable=u
per exception info. per exception info.
""" """
resp.status = 503 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):

View File

@@ -15,7 +15,7 @@ import asyncio
from starlette.applications import Starlette from starlette.applications import Starlette
from starlette.routing import Route from starlette.routing import Route
from starlette.exceptions import HTTPException 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.requests import Request
from starlette.middleware import Middleware from starlette.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
@@ -23,6 +23,7 @@ from starlette.middleware.cors import CORSMiddleware
from nominatim.api import NominatimAPIAsync from nominatim.api import NominatimAPIAsync
import nominatim.api.v1 as api_impl import nominatim.api.v1 as api_impl
import nominatim.api.logging as loglib
from nominatim.config import Configuration from nominatim.config import Configuration
class ParamWrapper(api_impl.ASGIAdaptor): class ParamWrapper(api_impl.ASGIAdaptor):
@@ -115,6 +116,12 @@ async def timeout_error(request: Request, #pylint: disable=unused-argument
_: Exception) -> Response: _: Exception) -> Response:
""" Error handler for query timeouts. """ 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)