diff --git a/main.py b/main.py index de2ac4e..0b5288c 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,7 @@ from models import NodeInterface, Cluster import os from dotenv import load_dotenv from sqlalchemy.exc import SQLAlchemyError - +from typing import List load_dotenv() origins = os.getenv("CORS_ORIGINS", "").split(",") @@ -70,6 +70,20 @@ class ClusterRequest(BaseModel): links: list[tuple[str, str]] + +class NodeResponse(BaseModel): + node_name: str + uuid: UUID + + +class ClusterNodesResponse(BaseModel): + cluster_name: str + nodes: List[NodeResponse] + +class ClusterResponse(BaseModel): + uuid: UUID + cluster_name: str + #POST /register-node # { # "node_name": "node2", @@ -785,3 +799,58 @@ def create_cluster(data: ClusterRequest,db: Session = Depends(get_db),token_data status_code=500, detail="Cluster creation failed" ) + +@app.get( + "/spock/cluster-nodes/{cluster_uuid}", + response_model=ClusterNodesResponse +) +def get_cluster_nodes( + cluster_uuid: UUID, + db: Session = Depends(get_db), + token_data=Depends(verify_token) + ): + + cluster = ( + db.query(Cluster) + .filter(Cluster.uuid == cluster_uuid) + .first() + ) + if not cluster: + raise HTTPException( + status_code=404, + detail=f"Cluster with UUID '{cluster_uuid}' not found" + ) + nodes = ( + db.query(NodeInterface) + .filter(NodeInterface.cluster_id == cluster.uuid) + .all() + ) + return { + "cluster_name": cluster.cluster_name, + "nodes": [ + { + "node_name": node.if_name, + "uuid": node.uuid + } + for node in nodes + ] + } + + +@app.get( + "/spock/clusters", + response_model=List[ClusterResponse] +) +def get_clusters( + db: Session = Depends(get_db), + token_data=Depends(verify_token) +): + clusters = db.query(Cluster).all() + + return [ + { + "uuid": cluster.uuid, + "cluster_name": cluster.cluster_name + } + for cluster in clusters + ] \ No newline at end of file