Files
wov-api/app/routers/instances.py
T

52 lines
1.4 KiB
Python

"""节点实例管理路由。
提供管理后台查看节点实例与手动停止实例的能力。实例生命周期仍由
NodeManager 控制,路由只转发停止请求。
"""
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from app.db import Database
from app.node_manager import NodeManager
router = APIRouter(prefix="/api/admin/node-instances", tags=["node-instances"])
def _get_db() -> Database:
"""从应用状态延迟获取数据库实例。"""
from app.main import app
return app.state.db
def _get_manager() -> NodeManager:
"""从应用状态延迟获取节点管理器。"""
from app.main import app
return app.state.node_manager
@router.get("")
def list_instances(db: Database = Depends(_get_db)) -> list[dict]:
"""返回全部节点实例记录。"""
return db.list_instances()
@router.post("/{instance_id}/stop")
def stop_instance(
instance_id: str,
db: Database = Depends(_get_db),
manager: NodeManager = Depends(_get_manager),
) -> dict:
"""请求停止指定实例;停止后实例记录保留为 stopped 状态。"""
manager.stop_instance(instance_id)
instance = next(
(item for item in db.list_instances() if item["id"] == instance_id),
None,
)
if instance is None:
raise HTTPException(status_code=404, detail="instance not found")
return {"stopped": instance_id}