Files
ragflow_python/asr-monitor-test/app/main.py
qcloud 074747f902
Some checks failed
tests / ragflow_tests (push) Has been cancelled
106.51.72.204 上的gitea重新初始化,提交到远程
2025-10-09 16:55:45 +08:00

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)