From cf4ab374fe6725e7a304df5e7e1f8dfcc31e6c73 Mon Sep 17 00:00:00 2001 From: George Date: Wed, 16 Sep 2026 15:54:45 +0530 Subject: [PATCH] feat: --Added API to show c-luster --Added API to show nodes --- main.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) 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