Files
agent/src/app/main.py
T

63 lines
1.7 KiB
Python

import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from starlette.requests import Request
from app.infra.logging_setup import configure_logging
from app.infra.error_handlers import register_error_handlers
from app.core.application import ModularApplication
def _configure_logging() -> None:
configure_logging()
_configure_logging()
def create_app() -> FastAPI:
app = FastAPI(title="Agent Backend MVP", version="0.1.0")
modules = ModularApplication()
app.state.modules = modules
logger = logging.getLogger("app.http")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=False,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(modules.api.public_router())
register_error_handlers(app)
@app.middleware("http")
async def log_http_requests(request: Request, call_next):
logger.warning("http request: method=%s path=%s query=%s", request.method, request.url.path, request.url.query)
try:
response = await call_next(request)
logger.warning(
"http response: method=%s path=%s status=%s",
request.method,
request.url.path,
response.status_code,
)
return response
except Exception:
logger.exception("http request failed: method=%s path=%s", request.method, request.url.path)
raise
@app.on_event("startup")
async def startup() -> None:
modules.startup()
@app.get("/health")
async def health() -> dict:
return modules.health_payload()
return app
app = create_app()