66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
import logging
|
|
|
|
import models
|
|
from contextlib import asynccontextmanager
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from sqlmodel import SQLModel
|
|
|
|
from api.agent_api import agent_router
|
|
from core.db import engine
|
|
from core.config.settings import settings
|
|
from api.scheduler_api import scheduler_router
|
|
from api.lottery_api import lottery_router
|
|
from core.task.dlt_scheduler import scheduler
|
|
from lc.chef_agent import chef_agent
|
|
|
|
# 配置日志
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# lifespan生命周期
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# ========== 启动时执行 ==========
|
|
logger.info("服务启动,开始创建数据表")
|
|
# 同步建表
|
|
SQLModel.metadata.create_all(engine)
|
|
|
|
# 启动定时调度器
|
|
scheduler.start()
|
|
|
|
# 初始化chef_agent
|
|
chef_agent.initialize()
|
|
|
|
yield # 此处交出控制权,服务开始运行
|
|
# ========== 关闭时执行 ==========
|
|
logger.info("服务关闭,释放资源")
|
|
chef_agent.close()
|
|
scheduler.shutdown()
|
|
|
|
app = FastAPI(lifespan=lifespan)
|
|
app.include_router(scheduler_router)
|
|
app.include_router(lottery_router)
|
|
app.include_router(agent_router)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware, # type: ignore[arg-type]
|
|
allow_origins=settings.ALLOWED_ORIGINS,
|
|
allow_credentials=True,
|
|
allow_methods=settings.ALLOWED_METHODS,
|
|
allow_headers=settings.ALLOWED_HEADERS,
|
|
)
|
|
|
|
@app.get("/")
|
|
def main():
|
|
return {"message": "Hello World"}
|
|
|
|
|
|
# 启动服务 --> uvicorn: Python中的轻量级web服务器
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(app, host="0.0.0.0", port=8000) |