'commit'
This commit is contained in:
70
Start.py
Normal file
70
Start.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
project_root = os.path.dirname(os.path.abspath(__file__))
|
||||
if project_root not in sys.path:
|
||||
sys.path.append(project_root)
|
||||
|
||||
|
||||
def setup_api_logger():
|
||||
logger = logging.getLogger("Start")
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.propagate = False
|
||||
if logger.handlers:
|
||||
return logger
|
||||
log_dir = os.path.join(project_root, "Logs")
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
log_file = os.path.join(log_dir, "YLT_Analytics_Api.log")
|
||||
file_handler = logging.FileHandler(log_file, encoding="utf-8")
|
||||
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||
file_handler.setFormatter(formatter)
|
||||
logger.addHandler(file_handler)
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setFormatter(formatter)
|
||||
logger.addHandler(console_handler)
|
||||
return logger
|
||||
|
||||
|
||||
logger = setup_api_logger()
|
||||
logger.info("YLT_Analytics_Api module imported")
|
||||
|
||||
from Controller.YltAnalyticsController import router as ylt_router, init_db, close_db
|
||||
from Controller.DegreeController import router as degree_router
|
||||
from Util.Win32Patch import patch
|
||||
from Util.RedisKit import RedisKit
|
||||
|
||||
patch()
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
logger.info("YLT Analytics API startup")
|
||||
await init_db()
|
||||
# Initialize Redis connection
|
||||
await RedisKit().get_connection()
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
logger.info("YLT Analytics API shutdown")
|
||||
await close_db()
|
||||
|
||||
|
||||
app = FastAPI(title="YLT Analytics API", lifespan=lifespan)
|
||||
|
||||
static_dir = os.path.join(project_root, "static")
|
||||
app.mount("/static", StaticFiles(directory=static_dir), name="static")
|
||||
|
||||
|
||||
app.include_router(ylt_router)
|
||||
app.include_router(degree_router)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logger.info("Starting YLT Analytics API with uvicorn on http://0.0.0.0:8000")
|
||||
import uvicorn
|
||||
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
Reference in New Issue
Block a user