| |
| import os |
| import time |
| import base64 |
| from dotenv import load_dotenv |
| from fastapi import FastAPI, Request, HTTPException, Depends, status |
| from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse |
| from fastapi.staticfiles import StaticFiles |
| |
| from fastapi import APIRouter |
| from typing import List, Dict, Any, Optional |
| import logging |
| import asyncio |
|
|
| |
| from app.api.auth import get_auth_token |
| from app.api.metrics import service_metrics, call_records, MAX_RECORDS, get_current_metrics, get_current_records |
| from app.api.gemini_proxy import router as gemini_proxy_router |
| from app.api.metrics import router as metrics_router |
|
|
| |
| load_dotenv() |
|
|
| |
| log_level = logging.WARNING |
|
|
| |
| logging.basicConfig(level=log_level, format='%(asctime)s - %(levelname)s - %(message)s') |
| logger = logging.getLogger(__name__) |
|
|
| |
| |
| |
| uvicorn_access_logger = logging.getLogger("uvicorn.access") |
| uvicorn_access_logger.setLevel(logging.WARNING) |
|
|
| uvicorn_error_logger = logging.getLogger("uvicorn.error") |
| uvicorn_error_logger.setLevel(logging.ERROR) |
|
|
| |
| app = FastAPI(title="Gemini Cookies Proxy", description="基于 Gemini cookies 的代理中转服务") |
|
|
| |
| app.mount("/static", StaticFiles(directory="app/static"), name="static") |
|
|
| |
| |
|
|
| |
| app.include_router(gemini_proxy_router, prefix="/v1", dependencies=[Depends(get_auth_token)]) |
|
|
| |
| app.include_router(metrics_router, prefix="/v1", dependencies=[Depends(get_auth_token)]) |
|
|
|
|
| |
| @app.get("/", include_in_schema=False) |
| async def read_root(): |
| |
| return RedirectResponse(url="/static/login.html") |
|
|
| |
| @app.get("/v1/health", dependencies=[Depends(get_auth_token)]) |
| async def health_check_v1(): |
| """ |
| 健康检查接口,返回服务状态。 |
| """ |
| return JSONResponse(content={"status": "ok"}) |
|
|
| |
| @app.get("/health") |
| async def health_check_root(): |
| """ |
| 根路径健康检查接口,返回服务状态。 |
| """ |
| return JSONResponse(content={"status": "ok", "message": "Root health check successful"}) |
|
|
| |
| @app.get("/favicon.ico", include_in_schema=False) |
| async def get_favicon(): |
| return RedirectResponse(url="/static/favicon.ico") |
|
|
| |
| |
|
|