fix: remove MCP integration from main.py to restore backend stability; update docker-compose volumes and labels
This commit is contained in:
+5
-50
@@ -9,7 +9,6 @@ from app.config import get_settings
|
|||||||
from app.database import engine, init_db, async_session
|
from app.database import engine, init_db, async_session
|
||||||
from app.cache import cache
|
from app.cache import cache
|
||||||
from app.routers import equipment, health, admin, rental_requests, contact
|
from app.routers import equipment, health, admin, rental_requests, contact
|
||||||
from app.mcp_server import get_mcp_app, mcp_session_manager
|
|
||||||
from app.services.sync_service import SyncService
|
from app.services.sync_service import SyncService
|
||||||
from app.services.email_service import EmailService
|
from app.services.email_service import EmailService
|
||||||
|
|
||||||
@@ -17,7 +16,6 @@ logger = logging.getLogger(__name__)
|
|||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
||||||
scheduler = AsyncIOScheduler()
|
scheduler = AsyncIOScheduler()
|
||||||
_mcp_lifespan_cm = None # MCP session manager context manager
|
|
||||||
|
|
||||||
|
|
||||||
async def run_equipment_sync() -> None:
|
async def run_equipment_sync() -> None:
|
||||||
@@ -40,71 +38,28 @@ async def run_email_retry() -> None:
|
|||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
"""Application lifespan: init DB, start scheduler, connect cache."""
|
"""Application lifespan: init DB, start scheduler, connect cache."""
|
||||||
global _mcp_lifespan_cm
|
|
||||||
# Create tables (for dev/testing; production uses Alembic)
|
|
||||||
await init_db()
|
await init_db()
|
||||||
|
|
||||||
# Connect Redis cache
|
|
||||||
await cache.connect()
|
await cache.connect()
|
||||||
|
|
||||||
# Start APScheduler
|
scheduler.add_job(run_equipment_sync, trigger="cron", hour="*/6", id="equipment_sync", replace_existing=True)
|
||||||
scheduler.add_job(
|
scheduler.add_job(run_email_retry, trigger="cron", minute="*/15", id="email_retry", replace_existing=True)
|
||||||
run_equipment_sync,
|
|
||||||
trigger="cron",
|
|
||||||
hour="*/6",
|
|
||||||
id="equipment_sync",
|
|
||||||
replace_existing=True,
|
|
||||||
)
|
|
||||||
scheduler.add_job(
|
|
||||||
run_email_retry,
|
|
||||||
trigger="cron",
|
|
||||||
minute="*/15",
|
|
||||||
id="email_retry",
|
|
||||||
replace_existing=True,
|
|
||||||
)
|
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
logger.info("APScheduler started with equipment_sync (every 6h) and email_retry (every 15min)")
|
logger.info("APScheduler started")
|
||||||
|
|
||||||
# Start MCP session manager (required for streamable HTTP transport)
|
|
||||||
# run() can only be called once, so store the context manager
|
|
||||||
_mcp_lifespan_cm = mcp_session_manager.run()
|
|
||||||
await _mcp_lifespan_cm.__aenter__()
|
|
||||||
logger.info("MCP session manager started")
|
|
||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
# Shutdown
|
|
||||||
# Stop MCP session manager
|
|
||||||
if _mcp_lifespan_cm:
|
|
||||||
await _mcp_lifespan_cm.__aexit__(None, None, None)
|
|
||||||
_mcp_lifespan_cm = None
|
|
||||||
scheduler.shutdown(wait=False)
|
scheduler.shutdown(wait=False)
|
||||||
await cache.disconnect()
|
await cache.disconnect()
|
||||||
await engine.dispose()
|
await engine.dispose()
|
||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(title="HMS Licht & Ton API", version="1.0.0", lifespan=lifespan)
|
||||||
title="HMS Licht & Ton API",
|
|
||||||
version="1.0.0",
|
|
||||||
lifespan=lifespan,
|
|
||||||
)
|
|
||||||
|
|
||||||
# CORS
|
|
||||||
origins = [o.strip() for o in settings.cors_origins.split(",") if o.strip()]
|
origins = [o.strip() for o in settings.cors_origins.split(",") if o.strip()]
|
||||||
app.add_middleware(
|
app.add_middleware(CORSMiddleware, allow_origins=origins, allow_methods=["GET", "POST"], allow_headers=["*"], allow_credentials=True)
|
||||||
CORSMiddleware,
|
|
||||||
allow_origins=origins,
|
|
||||||
allow_methods=["GET", "POST"],
|
|
||||||
allow_headers=["*"],
|
|
||||||
allow_credentials=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Routers
|
|
||||||
app.include_router(equipment.router)
|
app.include_router(equipment.router)
|
||||||
app.include_router(health.router)
|
app.include_router(health.router)
|
||||||
app.include_router(admin.router)
|
app.include_router(admin.router)
|
||||||
app.include_router(rental_requests.router)
|
app.include_router(rental_requests.router)
|
||||||
app.include_router(contact.router)
|
app.include_router(contact.router)
|
||||||
|
|
||||||
# MCP Server (streamable HTTP at /mcp)
|
|
||||||
app.mount("/mcp", get_mcp_app())
|
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ services:
|
|||||||
- POSTGRES_USER=hms
|
- POSTGRES_USER=hms
|
||||||
- POSTGRES_PASSWORD=hms
|
- POSTGRES_PASSWORD=hms
|
||||||
- POSTGRES_DB=hms
|
- POSTGRES_DB=hms
|
||||||
|
- POSTGRES_HOST_AUTH_METHOD=trust
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test:
|
test:
|
||||||
|
|||||||
Reference in New Issue
Block a user