temporal io implementation
parent
30a4466504
commit
5cb4bafeb1
@ -0,0 +1,35 @@
|
|||||||
|
import asyncio
|
||||||
|
from temporalio.client import Client
|
||||||
|
from temporalio.worker import Worker
|
||||||
|
|
||||||
|
from temporal.activity import calculate_plant_eaf_activity, execute_simulation_activity, update_contribution_bulk_mappings_activity, update_equipment_for_simulation_activity
|
||||||
|
from temporal.workflow import SimulationWorkflow
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
client = await Client.connect("http://192.168.1.86:7233")
|
||||||
|
|
||||||
|
try:
|
||||||
|
worker = Worker(
|
||||||
|
client,
|
||||||
|
task_queue="simulation-task-queue",
|
||||||
|
workflows=[SimulationWorkflow],
|
||||||
|
activities=[
|
||||||
|
update_equipment_for_simulation_activity,
|
||||||
|
execute_simulation_activity,
|
||||||
|
calculate_plant_eaf_activity,
|
||||||
|
update_contribution_bulk_mappings_activity
|
||||||
|
],
|
||||||
|
max_concurrent_workflow_tasks=50,
|
||||||
|
max_concurrent_activities=12
|
||||||
|
)
|
||||||
|
await worker.run()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Worker failed: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
from temporalio import activity
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@activity.defn
|
||||||
|
async def update_equipment_for_simulation_activity(params: dict):
|
||||||
|
# ✅ Import inside the activity function
|
||||||
|
from src.aeros_equipment.service import update_equipment_for_simulation
|
||||||
|
from src.database.core import async_session
|
||||||
|
|
||||||
|
async with async_session() as db_session:
|
||||||
|
return await update_equipment_for_simulation(
|
||||||
|
db_session=db_session,
|
||||||
|
project_name=params["projectName"],
|
||||||
|
overhaul_duration=params["OverhaulDuration"],
|
||||||
|
overhaul_interval=params["OverhaulInterval"],
|
||||||
|
offset=params["OffSet"],
|
||||||
|
schematic_name=params["SchematicName"],
|
||||||
|
custom_input=params["CustomInput"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@activity.defn
|
||||||
|
async def execute_simulation_activity(params: dict):
|
||||||
|
from src.database.core import async_session
|
||||||
|
from src.aeros_simulation.simulation_save_service import execute_simulation
|
||||||
|
async with async_session() as db_session:
|
||||||
|
return await execute_simulation(
|
||||||
|
db_session=db_session,
|
||||||
|
simulation_id=params["sim_data"]["HubCnnId"],
|
||||||
|
sim_data=params["sim_data"],
|
||||||
|
is_saved=True,
|
||||||
|
eq_update=params["eq_update"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@activity.defn
|
||||||
|
async def calculate_plant_eaf_activity(params: dict):
|
||||||
|
from src.aeros_simulation.simulation_save_service import calculate_plant_eaf
|
||||||
|
from src.database.core import async_session
|
||||||
|
|
||||||
|
async with async_session() as db_session:
|
||||||
|
return await calculate_plant_eaf(
|
||||||
|
db_session=db_session,
|
||||||
|
simulation_id=params["HubCnnId"],
|
||||||
|
is_default=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@activity.defn
|
||||||
|
async def update_contribution_bulk_mappings_activity(sim_id: str):
|
||||||
|
from src.aeros_contribution.service import update_contribution_bulk_mappings
|
||||||
|
from src.database.core import async_session
|
||||||
|
|
||||||
|
async with async_session() as db_session:
|
||||||
|
return await update_contribution_bulk_mappings(
|
||||||
|
db_session=db_session,
|
||||||
|
simulation_id=sim_id,
|
||||||
|
)
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
from datetime import timedelta
|
||||||
|
from temporalio import workflow
|
||||||
|
|
||||||
|
from temporal.activity import calculate_plant_eaf_activity, execute_simulation_activity, update_contribution_bulk_mappings_activity, update_equipment_for_simulation_activity
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@workflow.defn
|
||||||
|
class SimulationWorkflow:
|
||||||
|
@workflow.run
|
||||||
|
async def run(self, sim_data: dict) -> str:
|
||||||
|
# 1. Update equipment
|
||||||
|
results = await workflow.execute_activity(
|
||||||
|
update_equipment_for_simulation_activity,
|
||||||
|
{**sim_data}, # ✅ one positional argument
|
||||||
|
start_to_close_timeout=timedelta(days=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
# 2. Execute simulation
|
||||||
|
await workflow.execute_activity(
|
||||||
|
execute_simulation_activity,
|
||||||
|
{"sim_data": sim_data, "eq_update": results},
|
||||||
|
start_to_close_timeout=timedelta(days=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
# 3. Calculate EAF
|
||||||
|
await workflow.execute_activity(
|
||||||
|
calculate_plant_eaf_activity,
|
||||||
|
sim_data,
|
||||||
|
start_to_close_timeout=timedelta(days=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
await workflow.execute_activity(
|
||||||
|
update_contribution_bulk_mappings_activity,
|
||||||
|
sim_data["HubCnnId"],
|
||||||
|
start_to_close_timeout=timedelta(days=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
# etc…
|
||||||
|
return sim_data["HubCnnId"] # simulation_id
|
||||||
Loading…
Reference in New Issue