mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-05-12 02:19:59 +08:00
主要变更:
1. **数据库集成**:
* 引入 MySQL 数据库支持,使用 SQLAlchemy 和 `databases` 库持久化存储应用程序设置。
* 添加了 `app/database` 目录,包含数据库连接、模型和初始化逻辑。
* 更新 `requirements.txt` 添加数据库相关依赖 (`pymysql`, `sqlalchemy`, `aiomysql`, `databases`, `python-dotenv`)。
2. **配置管理重构**:
* 重构 `ConfigService` (`app/service/config/config_service.py`),使其从数据库加载和保存设置,并支持从 `.env` 文件同步初始配置到数据库。
* 修改 `Settings` 模型 (`app/config/config.py`) 以包含数据库连接信息,并添加了从数据库加载/同步配置的逻辑。
* 配置相关的路由 (`app/router/config_routes.py`) 更新为异步,并调用新的 `ConfigService` 方法。
* `KeyManager` (`app/service/key/key_manager.py`) 现在可以在配置更新后重置和重新初始化。
3. **错误日志查看器**:
* 新增 `/logs` 页面 (`app/templates/error_logs.html`) 用于展示应用程序错误日志。
* 添加了相应的路由 (`app/router/log_routes.py`)、静态资源 (`app/static/css/error_logs.css`, `app/static/js/error_logs.js`) 和日志记录器 (`app/log/logger.py`)。
* 在配置页面和密钥管理页面的导航栏中添加了指向日志页面的链接。
4. **异步操作**:
* 将配置服务和相关路由转换为异步 (`async def`) 以支持异步数据库操作。
5. **其他**:
* 更新了应用程序初始化逻辑 (`app/core/application.py`, `app/core/initialization.py`) 以包含数据库连接的建立和关闭。
87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
"""
|
||
应用程序工厂模块,负责创建和配置FastAPI应用程序实例
|
||
"""
|
||
from contextlib import asynccontextmanager
|
||
from fastapi import FastAPI
|
||
from fastapi.staticfiles import StaticFiles
|
||
|
||
from app.config.config import settings, sync_initial_settings
|
||
from app.log.logger import get_application_logger
|
||
from app.middleware.middleware import setup_middlewares
|
||
from app.exception.exceptions import setup_exception_handlers
|
||
from app.router.routes import setup_routers
|
||
from app.service.key.key_manager import get_key_manager_instance
|
||
from app.core.initialization import initialize_app
|
||
from app.database.connection import connect_to_db, disconnect_from_db
|
||
from app.database.initialization import initialize_database
|
||
|
||
logger = get_application_logger()
|
||
|
||
@asynccontextmanager
|
||
async def lifespan(app: FastAPI):
|
||
"""
|
||
应用程序生命周期管理器
|
||
|
||
Args:
|
||
app: FastAPI应用实例
|
||
"""
|
||
# 启动事件
|
||
logger.info("Application starting up...")
|
||
try:
|
||
# 初始化数据库
|
||
initialize_database()
|
||
logger.info("Database initialized successfully")
|
||
|
||
# 连接到数据库
|
||
await connect_to_db()
|
||
|
||
# 同步初始配置(DB优先,然后同步回DB)
|
||
await sync_initial_settings()
|
||
|
||
# 初始化KeyManager (使用可能已从DB更新的settings)
|
||
await get_key_manager_instance(settings.API_KEYS)
|
||
logger.info("KeyManager initialized successfully")
|
||
except Exception as e:
|
||
logger.error(f"Failed to initialize application: {str(e)}")
|
||
raise
|
||
|
||
yield # 应用程序运行期间
|
||
|
||
# 关闭事件
|
||
logger.info("Application shutting down...")
|
||
|
||
# 断开数据库连接
|
||
await disconnect_from_db()
|
||
|
||
def create_app() -> FastAPI:
|
||
"""
|
||
创建并配置FastAPI应用程序实例
|
||
|
||
Returns:
|
||
FastAPI: 配置好的FastAPI应用程序实例
|
||
"""
|
||
# 初始化应用程序
|
||
initialize_app()
|
||
|
||
# 创建FastAPI应用
|
||
app = FastAPI(
|
||
title="Gemini Balance API",
|
||
description="Gemini API代理服务,支持负载均衡和密钥管理",
|
||
version="1.0.0",
|
||
lifespan=lifespan
|
||
)
|
||
|
||
# 配置静态文件
|
||
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
||
|
||
# 配置中间件
|
||
setup_middlewares(app)
|
||
|
||
# 配置异常处理器
|
||
setup_exception_handlers(app)
|
||
|
||
# 配置路由
|
||
setup_routers(app)
|
||
|
||
return app
|