Skip to content

Commit defe4ec

Browse files
authored
Change middleware format (#393)
1 parent 8e5a4e1 commit defe4ec

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed

model-engine/model_engine_server/api/app.py

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,42 @@
2727
logger_name,
2828
make_logger,
2929
)
30+
from starlette.middleware import Middleware
31+
from starlette.middleware.base import BaseHTTPMiddleware
3032

3133
logger = make_logger(logger_name())
3234

33-
app = FastAPI(title="launch", version="1.0.0", redoc_url="/api")
35+
36+
class CustomMiddleware(BaseHTTPMiddleware):
37+
async def dispatch(self, request: Request, call_next):
38+
try:
39+
LoggerTagManager.set(LoggerTagKey.REQUEST_ID, str(uuid.uuid4()))
40+
return await call_next(request)
41+
except Exception as e:
42+
tb_str = traceback.format_exception(etype=type(e), value=e, tb=e.__traceback__)
43+
request_id = LoggerTagManager.get(LoggerTagKey.REQUEST_ID)
44+
timestamp = datetime.now(pytz.timezone("US/Pacific")).strftime("%Y-%m-%d %H:%M:%S %Z")
45+
structured_log = {
46+
"error": str(e),
47+
"request_id": str(request_id),
48+
"traceback": "".join(tb_str),
49+
}
50+
logger.error("Unhandled exception: %s", structured_log)
51+
return JSONResponse(
52+
{
53+
"status_code": 500,
54+
"content": {
55+
"error": "Internal error occurred. Our team has been notified.",
56+
"timestamp": timestamp,
57+
"request_id": request_id,
58+
},
59+
}
60+
)
61+
62+
63+
app = FastAPI(
64+
title="launch", version="1.0.0", redoc_url="/api", middleware=[Middleware(CustomMiddleware)]
65+
)
3466

3567
app.include_router(batch_job_router_v1)
3668
app.include_router(inference_task_router_v1)
@@ -44,33 +76,6 @@
4476
app.include_router(trigger_router_v1)
4577

4678

47-
@app.middleware("http")
48-
async def dispatch(request: Request, call_next):
49-
try:
50-
LoggerTagManager.set(LoggerTagKey.REQUEST_ID, str(uuid.uuid4()))
51-
return await call_next(request)
52-
except Exception as e:
53-
tb_str = traceback.format_exception(etype=type(e), value=e, tb=e.__traceback__)
54-
request_id = LoggerTagManager.get(LoggerTagKey.REQUEST_ID)
55-
timestamp = datetime.now(pytz.timezone("US/Pacific")).strftime("%Y-%m-%d %H:%M:%S %Z")
56-
structured_log = {
57-
"error": str(e),
58-
"request_id": str(request_id),
59-
"traceback": "".join(tb_str),
60-
}
61-
logger.error("Unhandled exception: %s", structured_log)
62-
return JSONResponse(
63-
{
64-
"status_code": 500,
65-
"content": {
66-
"error": "Internal error occurred. Our team has been notified.",
67-
"timestamp": timestamp,
68-
"request_id": request_id,
69-
},
70-
}
71-
)
72-
73-
7479
# TODO: Remove this once we have a better way to serve internal docs
7580
INTERNAL_DOCS_PATH = str(Path(__file__).parents[3] / "launch_internal/site")
7681
if os.path.exists(INTERNAL_DOCS_PATH):

model-engine/setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ test=pytest
44
[coverage:run]
55
omit =
66
model_engine_server/entrypoints/*
7+
model_engine_server/api/app.py
78

89
# TODO: Fix pylint errors
910
# [pylint]

0 commit comments

Comments
 (0)