105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
import os
|
|
from fastapi import FastAPI, Request, Response
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.security import OAuth2PasswordBearer
|
|
from jose import JWTError, jwt
|
|
from datetime import datetime, timedelta
|
|
import json,logging,time
|
|
from contextlib import asynccontextmanager
|
|
|
|
from dotenv import load_dotenv
|
|
import uvicorn
|
|
|
|
# 加载 .env 文件中的环境变量
|
|
load_dotenv() # 默认加载项目根目录的 .env 文件
|
|
|
|
from app.asr_service import asr_router
|
|
from app.monitor_service import monitor_router
|
|
from app.tts_service import tts_router,tts_lifespan
|
|
from app.login_service import login_router
|
|
from app.chat_service import chat_router
|
|
from app.payment_service import payment_router
|
|
from app.system_admin import system_admin_router
|
|
from app.wps_office_service import wps_router
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""生命周期管理"""
|
|
# 服务启动初始化
|
|
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
|
|
print(" ASR & Monitor Service Start")
|
|
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
|
|
# 启动TTS路由器的生命周期
|
|
tts_lifespan_ctx = tts_lifespan(app)
|
|
await tts_lifespan_ctx.__aenter__()
|
|
yield
|
|
# 关闭TTS路由器的生命周期
|
|
await tts_lifespan_ctx.__aexit__(None, None, None)
|
|
# 服务停止清理
|
|
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
|
|
print(" Service Stopped Cleanly")
|
|
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
|
|
|
|
|
|
# 创建应用实例
|
|
app = FastAPI(lifespan=lifespan)
|
|
|
|
# 配置CORS
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"], # 允许所有来源,也可以指定具体的域名,例如 ["https://example.com"]
|
|
allow_credentials=True, # 是否允许发送 cookies
|
|
allow_methods=["*"], # 允许所有方法,也可以指定具体的方法,例如 ["GET", "POST"]
|
|
allow_headers=["*"], # 允许所有头信息,也可以指定具体的头信息
|
|
expose_headers=["Content-Range", "Content-Length"] # 关键添加
|
|
)
|
|
|
|
logger = logging.getLogger("api")
|
|
|
|
|
|
# @app.middleware("http")
|
|
async def log_requests(request: Request, call_next):
|
|
"""
|
|
请求日志记录中间件
|
|
"""
|
|
start_time = time.perf_counter()
|
|
|
|
# 记录请求信息
|
|
logger.info(f"Request: {request.method} {request.url}")
|
|
logger.info(f"Headers: {dict(request.headers)}")
|
|
logger.info(f"Client: {request.client.host}:{request.client.port}")
|
|
|
|
# 读取请求体(注意:这会消耗流式数据)
|
|
request_body = await request.body()
|
|
if request_body:
|
|
logger.info(f"Request body: {request_body.decode('utf-8', errors='ignore')}")
|
|
|
|
# 调用下一个中间件或路由处理程序
|
|
response = await call_next(request)
|
|
|
|
# 计算处理时间
|
|
process_time = time.perf_counter() - start_time
|
|
|
|
# 记录响应信息
|
|
logger.info(f"Response status: {response.status_code}")
|
|
logger.info(f"Process time: {process_time:.4f}s")
|
|
|
|
return response
|
|
|
|
# 挂载子路由
|
|
app.include_router(asr_router, prefix="/asr")
|
|
app.include_router(monitor_router, prefix="/monitor")
|
|
app.include_router(tts_router, prefix="/tts")
|
|
app.include_router(login_router, prefix="/auth")
|
|
app.include_router(chat_router, prefix="/chat")
|
|
app.include_router(payment_router, prefix="/payment")
|
|
app.include_router(system_admin_router,prefix="/system_admin")
|
|
app.include_router(wps_router,prefix="/wps")
|
|
# 挂载静态文件(可选)
|
|
# app.mount("/static", StaticFiles(directory="static"), name="static")
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run("app.main:app", host="0.0.0.0", port=9580) |