64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
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("YLT_Analytics_Api")
|
|
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, init_db, close_db
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
logger.info("YLT Analytics API startup")
|
|
await init_db()
|
|
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(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)
|