918bbed0fc
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service) - 移除登录页面上的明文密码提示 - 改进前端错误处理,避免数据加载失败导致登录显示错误
126 lines
3.2 KiB
Python
126 lines
3.2 KiB
Python
"""
|
|
网关管理路由
|
|
处理网关连接、断开、状态查询
|
|
"""
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from typing import List
|
|
import logging
|
|
|
|
from ..models import GatewayConnectRequest, GatewayDisconnectRequest, GatewayStatus, ApiResponse
|
|
from ..deps import get_current_user, get_vn_service
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/list", response_model=List[GatewayStatus])
|
|
async def list_gateways(
|
|
current_user: dict = Depends(get_current_user),
|
|
vn_service=Depends(get_vn_service)
|
|
):
|
|
"""
|
|
获取所有可用网关列表
|
|
|
|
返回系统支持的所有网关,包括已连接和未连接的网关
|
|
"""
|
|
gateways = await vn_service.get_available_gateways()
|
|
return [
|
|
GatewayStatus(
|
|
gateway_name=g["gateway_name"],
|
|
gateway_type=g.get("gateway_type", "unknown"),
|
|
status=g.get("status", "disconnected")
|
|
)
|
|
for g in gateways
|
|
]
|
|
|
|
|
|
@router.get("/{name}/setting")
|
|
async def get_gateway_setting(
|
|
name: str,
|
|
current_user: dict = Depends(get_current_user),
|
|
vn_service=Depends(get_vn_service)
|
|
):
|
|
"""
|
|
获取网关配置模板
|
|
|
|
返回指定网关的配置模板,用于前端生成配置表单
|
|
"""
|
|
setting = await vn_service.get_gateway_setting(name)
|
|
return {
|
|
"gateway_name": name,
|
|
"setting": setting
|
|
}
|
|
|
|
|
|
@router.get("/{name}/status")
|
|
async def get_gateway_status(
|
|
name: str,
|
|
current_user: dict = Depends(get_current_user),
|
|
vn_service=Depends(get_vn_service)
|
|
):
|
|
"""
|
|
获取网关连接状态
|
|
|
|
返回指定网关的连接状态
|
|
"""
|
|
status_info = await vn_service.get_gateway_status(name)
|
|
return status_info
|
|
|
|
|
|
@router.post("/{name}/connect")
|
|
async def connect_gateway(
|
|
name: str,
|
|
request: GatewayConnectRequest,
|
|
current_user: dict = Depends(get_current_user),
|
|
vn_service=Depends(get_vn_service)
|
|
):
|
|
"""
|
|
连接网关
|
|
|
|
- **gateway_name**: 网关名称
|
|
- **gateway_type**: 网关类型 (ctp, ib, okx, binance)
|
|
- **setting**: 网关配置参数
|
|
"""
|
|
success = await vn_service.connect_gateway(
|
|
gateway_name=request.gateway_name,
|
|
gateway_type=request.gateway_type.value,
|
|
setting=request.setting
|
|
)
|
|
|
|
if success:
|
|
return ApiResponse(
|
|
success=True,
|
|
message=f"Gateway {request.gateway_name} is connecting"
|
|
)
|
|
else:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Failed to connect gateway {request.gateway_name}"
|
|
)
|
|
|
|
|
|
@router.post("/{name}/disconnect")
|
|
async def disconnect_gateway(
|
|
name: str,
|
|
current_user: dict = Depends(get_current_user),
|
|
vn_service=Depends(get_vn_service)
|
|
):
|
|
"""
|
|
断开网关
|
|
|
|
- **name**: 网关名称
|
|
"""
|
|
success = await vn_service.disconnect_gateway(name)
|
|
|
|
if success:
|
|
return ApiResponse(
|
|
success=True,
|
|
message=f"Gateway {name} disconnected successfully"
|
|
)
|
|
else:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Failed to disconnect gateway {name}"
|
|
)
|