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