from fastapi import FastAPI from contextlib import asynccontextmanager from fastapi.middleware.gzip import GZipMiddleware from fastapi.middleware.cors import CORSMiddleware import logging from datetime import datetime import app.services.project_info as project_info from app.api.v1.router import api_router from app.infra.db.timescaledb import router as timescaledb_router from app.infra.db.postgresql import router as postgresql_router from app.infra.db.timescaledb.database import db as tsdb from app.infra.db.postgresql.database import db as pgdb from app.services.tjnetwork import open_project logger = logging.getLogger() logger.setLevel(logging.INFO) @asynccontextmanager async def lifespan(app: FastAPI): logger.info("**********************************************************") logger.info(str(datetime.now())) logger.info("TJWater CloudService is starting...") logger.info("**********************************************************") # 初始化数据库连接池 tsdb.init_pool() pgdb.init_pool() await tsdb.open() await pgdb.open() if project_info.name: print(project_info.name) open_project(project_info.name) yield # 清理资源 tsdb.close() pgdb.close() app = FastAPI(lifespan=lifespan) # 配置 CORS 中间件 app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有来源 allow_credentials=True, # 允许传递凭证(Cookie、HTTP 头等) allow_methods=["*"], # 允许所有 HTTP 方法 allow_headers=["*"], # 允许所有 HTTP 头 ) app.add_middleware(GZipMiddleware, minimum_size=1000) # Include Routers app.include_router(api_router, prefix="/api/v1") app.include_router(timescaledb_router) app.include_router(postgresql_router)