add new to endpoint get plot
parent
ce3ac1fca4
commit
4a24783377
@ -1,171 +0,0 @@
|
||||
async def save_default_simulation_node(
|
||||
*, db_session: DbSession, project_name: str = "trialapi"
|
||||
):
|
||||
session = await create_session()
|
||||
|
||||
tasks = []
|
||||
all_results = []
|
||||
# Get all schematic
|
||||
schematics = await get_all_schematic_aeros(db_session=db_session)
|
||||
|
||||
for schematic in schematics:
|
||||
sim_data = {
|
||||
"projectName": project_name,
|
||||
"SchematicName": schematic.schematic_name,
|
||||
"SimSeed": 1,
|
||||
"SimDuration": 1,
|
||||
"DurationUnit": "UMinute",
|
||||
"SimNumRun": 1,
|
||||
}
|
||||
|
||||
results = await execute_simulation(db_session=db_session, sim_data=sim_data)
|
||||
mainSchematicId = uuid4()
|
||||
mainSchematic = AerosNode(
|
||||
id=mainSchematicId,
|
||||
node_name="- TJB - Unit 3 -",
|
||||
schematic_name="- TJB - Unit 3 -",
|
||||
schematic_id=None,
|
||||
node_type="SchematicNode",
|
||||
aeros_schematic_id=schematic.id
|
||||
)
|
||||
|
||||
nodes = await save_recusive_simulation_result_node(db_session=db_session, data=results, schematic_name=mainSchematic.node_name, schematic_id=mainSchematicId, aeros_schematic_id=schematic.id)
|
||||
nodes.append(mainSchematic)
|
||||
|
||||
all_results.extend(nodes)
|
||||
|
||||
# delete old data
|
||||
await db_session.execute(delete(AerosNode))
|
||||
|
||||
db_session.add_all(all_results)
|
||||
await db_session.commit()
|
||||
|
||||
async def execute_simulation(
|
||||
*,
|
||||
db_session: DbSession,
|
||||
simulation_id: Optional[UUID] = None,
|
||||
sim_data: dict,
|
||||
is_saved: bool = False,
|
||||
):
|
||||
"""Execute the actual simulation call"""
|
||||
print("Executing simulation with id: %s", simulation_id)
|
||||
|
||||
try:
|
||||
response = await client.post(
|
||||
f"{AEROS_BASE_URL}/api/Simulation/RunSimulation",
|
||||
json=sim_data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
|
||||
if is_saved:
|
||||
simulation = await get_simulation_by_id(
|
||||
db_session=db_session, simulation_id=simulation_id
|
||||
)
|
||||
simulation.status = "proccessing"
|
||||
simulation.result = result
|
||||
await db_session.commit()
|
||||
await save_simulation_result(
|
||||
db_session=db_session, simulation_id=simulation_id, result=result
|
||||
)
|
||||
|
||||
print("Simulation completed with id: %s", simulation_id)
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
simulation = await get_simulation_by_id(
|
||||
db_session=db_session, simulation_id=simulation_id
|
||||
)
|
||||
simulation.status = "failed"
|
||||
simulation.error = str(e)
|
||||
await db_session.commit()
|
||||
|
||||
log.error("Simulation failed with error: %s", str(e))
|
||||
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)
|
||||
)
|
||||
|
||||
async def process_single_schematic(*, db_session: DbSession, sim_data: dict, schematic) -> List[AerosNode]:
|
||||
"""Process a single schematic simulation and return the nodes"""
|
||||
try:
|
||||
# Execute simulation for this schematic
|
||||
results = await execute_simulation(db_session=db_session, sim_data=sim_data)
|
||||
|
||||
# Create main schematic node
|
||||
mainSchematicId = uuid4()
|
||||
mainSchematic = AerosNode(
|
||||
id=mainSchematicId,
|
||||
node_name="- TJB - Unit 3 -",
|
||||
schematic_name="- TJB - Unit 3 -",
|
||||
schematic_id=None,
|
||||
node_type="SchematicNode",
|
||||
aeros_schematic_id=schematic.id
|
||||
)
|
||||
|
||||
# Process simulation results recursively
|
||||
nodes = await save_recusive_simulation_result_node(
|
||||
db_session=db_session,
|
||||
data=results,
|
||||
schematic_name=mainSchematic.node_name,
|
||||
schematic_id=mainSchematicId,
|
||||
aeros_schematic_id=schematic.id
|
||||
)
|
||||
nodes.append(mainSchematic)
|
||||
|
||||
return nodes
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error processing schematic {schematic.schematic_name}: {e}")
|
||||
raise # Re-raise to be caught by asyncio.gather
|
||||
|
||||
async def save_recusive_simulation_result_node(*, db_session: DbSession, data, schematic_name: str, aeros_schematic_id ,schematic_id: Optional[UUID] = None):
|
||||
## Get All schematic
|
||||
|
||||
#doing multiple simulation with all schematic
|
||||
|
||||
#1 Record schmatic ID from master schematic, ex - TJB - Unit 3 - = 1
|
||||
#2 Get The highest parent from Plot data using nodeName == schematicName
|
||||
#3 save the highest parent, add master schematic ID, get highest parent_id,
|
||||
# continue looping through all plot data, check if it regular node and schemmaticName = highest parent schematic ID, save
|
||||
# If schematicName = Parent schematic name, but not regular node, that mean that node is schematic and should have children
|
||||
# search for children schematic and save them
|
||||
|
||||
|
||||
plotResult = data["plotNodeOuts"]
|
||||
|
||||
results = []
|
||||
|
||||
for result in plotResult:
|
||||
|
||||
if result["schematicName"] == schematic_name and result["nodeType"] == "RegularNode":
|
||||
|
||||
node = AerosNode(
|
||||
node_name=result["nodeName"],
|
||||
schematic_id=schematic_id,
|
||||
node_type="RegularNode",
|
||||
schematic_name=schematic_name,
|
||||
aeros_schematic_id=aeros_schematic_id
|
||||
)
|
||||
|
||||
results.append(node)
|
||||
|
||||
elif result["schematicName"] == schematic_name and result["nodeType"] == "SubSchematic":
|
||||
schematicId = uuid4()
|
||||
schematic = AerosNode(
|
||||
id=schematicId,
|
||||
node_name=result["nodeName"],
|
||||
schematic_name=schematic_name,
|
||||
schematic_id=schematic_id,
|
||||
node_type="SchematicNode",
|
||||
aeros_schematic_id=aeros_schematic_id
|
||||
)
|
||||
results.append(schematic)
|
||||
|
||||
res = await save_recusive_simulation_result_node(db_session=db_session, data=data, schematic_name=result["nodeName"], schematic_id=schematicId, aeros_schematic_id=aeros_schematic_id)
|
||||
results.extend(res)
|
||||
else:
|
||||
continue
|
||||
|
||||
return results
|
||||
Loading…
Reference in New Issue