73 lines
2.9 KiB
Python
73 lines
2.9 KiB
Python
import asyncio
|
|
import logging
|
|
from contextlib import asynccontextmanager
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from core.config import settings
|
|
from core.database import init_db, AsyncSessionLocal
|
|
from services.mqtt_subscriber import run_subscriber
|
|
from services.seed import run_all_seeds
|
|
from api.routes import (
|
|
health, sites, readings, alarms, ws, assets,
|
|
power, env, reports, capacity,
|
|
generator, fire, cooling, leak, network, maintenance, floor_layout,
|
|
scenarios, settings as settings_router,
|
|
)
|
|
|
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s")
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
logger.info(f"Starting {settings.APP_NAME}")
|
|
await init_db()
|
|
async with AsyncSessionLocal() as session:
|
|
await run_all_seeds(session)
|
|
# Start MQTT subscriber as a background task
|
|
task = asyncio.create_task(run_subscriber())
|
|
yield
|
|
task.cancel()
|
|
try:
|
|
await task
|
|
except asyncio.CancelledError:
|
|
pass
|
|
logger.info("Shutdown complete")
|
|
|
|
|
|
app = FastAPI(
|
|
title=settings.APP_NAME,
|
|
version="0.2.0",
|
|
docs_url="/docs",
|
|
redoc_url="/redoc",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=settings.CORS_ORIGINS,
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(health.router, prefix="/api", tags=["health"])
|
|
app.include_router(sites.router, prefix="/api/sites", tags=["sites"])
|
|
app.include_router(readings.router, prefix="/api/readings", tags=["readings"])
|
|
app.include_router(alarms.router, prefix="/api/alarms", tags=["alarms"])
|
|
app.include_router(ws.router, prefix="/api", tags=["websocket"])
|
|
app.include_router(assets.router, prefix="/api/assets", tags=["assets"])
|
|
app.include_router(power.router, prefix="/api/power", tags=["power"])
|
|
app.include_router(env.router, prefix="/api/env", tags=["env"])
|
|
app.include_router(reports.router, prefix="/api/reports", tags=["reports"])
|
|
app.include_router(capacity.router, prefix="/api/capacity", tags=["capacity"])
|
|
app.include_router(generator.router, prefix="/api/generator", tags=["generator"])
|
|
app.include_router(fire.router, prefix="/api/fire", tags=["fire"])
|
|
app.include_router(cooling.router, prefix="/api/cooling", tags=["cooling"])
|
|
app.include_router(leak.router, prefix="/api/leak", tags=["leak"])
|
|
app.include_router(network.router, prefix="/api/network", tags=["network"])
|
|
app.include_router(maintenance.router, prefix="/api/maintenance", tags=["maintenance"])
|
|
app.include_router(floor_layout.router, prefix="/api/floor-layout", tags=["floor-layout"])
|
|
app.include_router(scenarios.router, prefix="/api/scenarios", tags=["scenarios"])
|
|
app.include_router(settings_router.router, prefix="/api/settings", tags=["settings"])
|