diff --git a/src/aeros_simulation/router.py b/src/aeros_simulation/router.py index bb3ccfa..fd016fa 100644 --- a/src/aeros_simulation/router.py +++ b/src/aeros_simulation/router.py @@ -74,6 +74,7 @@ async def get_simulation(db_session: DbSession, simulation_id): async def run_simulations( db_session: DbSession, simulation_in: SimulationInput, + background_tasks: BackgroundTasks ): """RUN Simulation""" @@ -81,43 +82,54 @@ async def run_simulations( db_session=db_session, simulation_in=simulation_in ) simulation_id = simulation.id - - # simulation_id = "efa8ef4c-0417-4d2d-95f3-41e4283737ab" project = await get_project(db_session=db_session) - try: - sim_data = simulation_in.model_dump(exclude={"SimulationName", "IsDefault"}) - sim_data["HubCnnId"] = str(simulation_id) - sim_data["projectName"] = project.project_name + sim_data = simulation_in.model_dump(exclude={"SimulationName", "IsDefault"}) + sim_data["HubCnnId"] = str(simulation_id) + sim_data["projectName"] = project.project_name + # Prepare async background task + async def run_full_simulation(): + try: + results = await update_equipment_for_simulation( + db_session=db_session, + project_name=project.project_name, + schematic_name=simulation_in.SchematicName, + custom_input=simulation_in.CustomInput, + ) - # # ##background_tasks.add_task(execute_simulation, db_session=db_session ,simulation_id=simulation_id, sim_data=sim_data) + await execute_simulation( + db_session=db_session, + simulation_id=simulation_id, + sim_data=sim_data, + is_saved=True, + eq_update=results, + ) - results = await update_equipment_for_simulation( - db_session=db_session, project_name=project.project_name, schematic_name=simulation_in.SchematicName, custom_input=simulation_in.CustomInput - ) + await calculate_plant_eaf( + db_session=db_session, + simulation_id=simulation_id, + is_default=simulation_in.IsDefault, + konkin_offset=simulation_in.Konkin_offset, + ) - await execute_simulation( - db_session=db_session, simulation_id=simulation_id, sim_data=sim_data, is_saved=True, eq_update=results - ) - - await calculate_plant_eaf(db_session=db_session, simulation_id=simulation_id, is_default=simulation_in.IsDefault, konkin_offset=simulation_in.Konkin_offset) - - result = await update_contribution_bulk_mappings(db_session=db_session, simulation_id=simulation_id) - + await update_contribution_bulk_mappings( + db_session=db_session, simulation_id=simulation_id + ) - return { - "data": str(simulation_id), - "status": "success", - "message": "Simulation created successfully", - } + except Exception as e: + # TODO: log error into DB or logger + print(f"Simulation {simulation_id} failed: {e}") - except Exception as e: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) - ) + # Add to background + background_tasks.add_task(run_full_simulation) + return { + "data": str(simulation_id), + "status": "success", + "message": "Simulation started successfully", + } @router.get( "/result/calc/{simulation_id}",