--Added link nodes abstraction
This commit is contained in:
george committed 2026-09-09 18:04:22 +05:30
1 parent 254f8f1816
commit 96be1fc94e
1 file changed
+98 -4
+98 -4
View File
@@ -15,6 +15,7 @@ from sqlalchemy.orm import Session
from models import NodeInterface from models import NodeInterface
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
from sqlalchemy.exc import SQLAlchemyError
load_dotenv() load_dotenv()
@@ -59,6 +60,10 @@ class LinkNodeRequest(BaseModel):
password: str password: str
class NodeLinkRequest(BaseModel):
from_node: str
to_node: str
#POST /register-node #POST /register-node
# { # {
# "node_name": "node2", # "node_name": "node2",
@@ -304,8 +309,9 @@ def register_node(data: RegisterNodeRequest, token_data: dict = Depends(verify_t
# "user": "postgres", # "user": "postgres",
# "password": "postgres" # "password": "postgres"
# } # }
@app.post("/link-nodes") #!!!!!!!!!!!!INIT synchronize_structure := false, synchronize_data := false !!!!!!!!!!!
def link_nodes(data: LinkNodeRequest,token_data: dict = Depends(verify_token)): # @app.post("/link-nodes")
def link_nodes(data: LinkNodeRequest):
conn = None conn = None
cur = None cur = None
@@ -363,8 +369,6 @@ def link_nodes(data: LinkNodeRequest,token_data: dict = Depends(verify_token)):
"subscription_name": data.subscription_name, "subscription_name": data.subscription_name,
"subscriber": data.subscriber_host, "subscriber": data.subscriber_host,
"provider": data.provider_host, "provider": data.provider_host,
"authenticated_as": token_data["sub"],
} }
except Exception as e: except Exception as e:
@@ -596,3 +600,93 @@ def delete_node_interface(
if conn: if conn:
conn.close() conn.close()
@app.post("/spock/link-nodes-abstract")
def link_nodes_abstract(data: NodeLinkRequest,db: Session = Depends(get_db),token_data: dict = Depends(verify_token)):
try:
from_node = data.from_node
to_node = data.to_node
print("From Node:", from_node)
from_node_data = (
db.query(NodeInterface)
.filter(NodeInterface.if_name == from_node)
.first()
)
if not from_node_data:
raise HTTPException(
status_code=404,
detail=f"Node '{from_node}' not found"
)
print("fromFound:", from_node_data.if_name)
print("fromHost:", from_node_data.host)
print("fromPort:", from_node_data.port)
print("fromDbname:", from_node_data.dbname)
print("fromUser:", from_node_data.user)
#================================================
print("===============================================")
print("To Node:", to_node)
to_node_data = (
db.query(NodeInterface)
.filter(NodeInterface.if_name == to_node)
.first()
)
if not to_node_data:
raise HTTPException(
status_code=404,
detail=f"Node '{to_node}' not found"
)
print("toFound:", to_node_data.if_name)
print("toHost:", to_node_data.host)
print("toPort:", to_node_data.port)
print("toDbname:", to_node_data.dbname)
print("toUser:", to_node_data.user)
#=============================================================================
# Build internal function input
link_data = LinkNodeRequest(
subscription_name=f"{to_node}_from_{from_node}",
subscriber_host=to_node_data.host,
subscriber_port=to_node_data.port,
provider_host=from_node_data.host,
provider_port=from_node_data.port,
dbname=to_node_data.dbname,
user=to_node_data.user,
password="postgres"
)
# Call internal function
result = link_nodes(link_data)
#==============================================================================
return {
"from_node": from_node,
"to_node": to_node
}
except HTTPException:
raise
except SQLAlchemyError as e:
print("Database error:", str(e))
raise HTTPException(
status_code=500,
detail="Management database error"
)
except Exception as e:
print("Unexpected error:", str(e))
raise HTTPException(
status_code=500,
detail="Internal server error"
)