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