diff --git a/src/calculation_budget_constrains/router.py b/src/calculation_budget_constrains/router.py index 0d294d4..798fa1c 100644 --- a/src/calculation_budget_constrains/router.py +++ b/src/calculation_budget_constrains/router.py @@ -5,6 +5,7 @@ from fastapi.params import Query from src.auth.service import Token from src.calculation_target_reliability.service import get_simulation_results +from src.config import TC_RBD_ID from src.database.core import CollectorDbSession, DbSession from src.models import StandardResponse @@ -24,7 +25,7 @@ async def get_target_reliability( """Get all scope pagination.""" results = await get_simulation_results( - simulation_id = "default", + simulation_id = TC_RBD_ID, token=token ) diff --git a/src/calculation_target_reliability/router.py b/src/calculation_target_reliability/router.py index dbabb06..92a2577 100644 --- a/src/calculation_target_reliability/router.py +++ b/src/calculation_target_reliability/router.py @@ -4,7 +4,8 @@ from temporalio.client import Client from fastapi import APIRouter, HTTPException, status from fastapi.params import Query -from src.config import TEMPORAL_URL +from src.calculation_target_reliability.utils import wait_for_workflow +from src.config import TEMPORAL_URL, TR_RBD_ID from src.database.core import DbSession, CollectorDbSession from src.auth.service import Token from src.models import StandardResponse @@ -55,36 +56,19 @@ async def get_target_reliability( # oh_duration=duration # ) - if not simulation_id or duration == 17520: - simulation_id = "f04f365e-25d8-4036-87c2-ba1bfe1f9229" - else: - temporal_client = await Client.connect(TEMPORAL_URL) - - simulation_id = await run_rbd_simulation( - sim_hours=duration, - token=token - ) - - workflow_id = f"simulation-{simulation_id}" - - while True: - try: - handle = temporal_client.get_workflow_handle(workflow_id=workflow_id) - desc = await handle.describe() - status = desc.status.name - - if status not in ["RUNNING", "CONTINUED_AS_NEW"]: - print(f"Workflow {workflow_id} finished with status: {status}") - return status - - print(f"Workflow {workflow_id} still {status}, checking again in {30} seconds...") + if not simulation_id: + if duration == 17520: + simulation_id = TR_RBD_ID + else: + simulation = await run_rbd_simulation( + sim_hours=duration, + token=token + ) - except Exception as e: - print(f"Workflow {workflow_id} not found, treating as done.") - return "NOT_FOUND" - - await asyncio.sleep(30) - + simulation_id = simulation.get("data") + await wait_for_workflow(simulation_id=simulation_id.get("data")) + else: + await wait_for_workflow(simulation_id=simulation_id) results = await get_simulation_results( diff --git a/src/calculation_target_reliability/utils.py b/src/calculation_target_reliability/utils.py index 91befc2..6dd1b69 100644 --- a/src/calculation_target_reliability/utils.py +++ b/src/calculation_target_reliability/utils.py @@ -1,6 +1,10 @@ +import asyncio from datetime import datetime, timedelta import random from typing import List, Optional +from temporalio.client import Client + +from src.config import TEMPORAL_URL, TR_RBD_ID def generate_down_periods(start_date: datetime, end_date: datetime, num_periods: Optional[int] = None, min_duration: int = 3, @@ -52,3 +56,36 @@ def generate_down_periods(start_date: datetime, end_date: datetime, down_periods.append((period_start, period_end)) return sorted(down_periods) + + +async def wait_for_workflow(simulation_id, max_retries=3): + workflow_id = f"simulation-{simulation_id}" # use returned ID + retries = 0 + temporal_client = await Client.connect(TEMPORAL_URL) + + while True: + try: + handle = temporal_client.get_workflow_handle(workflow_id=workflow_id) + desc = await handle.describe() + status = desc.status.name + + if status not in ["RUNNING", "CONTINUED_AS_NEW"]: + print(f"✅ Workflow {workflow_id} finished with status: {status}") + break + + print(f"⏳ Workflow {workflow_id} still {status}, checking again in 30s...") + + except Exception as e: + retries += 1 + if retries > max_retries: + print(f"⚠️ Workflow {workflow_id} not found after {max_retries} retries, treating as done. Error: {e}") + break + else: + print(f"⚠️ Workflow {workflow_id} not found (retry {retries}/{max_retries}), waiting 10s before retry...") + await asyncio.sleep(10) + continue + + retries = 0 # reset retries if describe() worked + await asyncio.sleep(30) + + return simulation_id \ No newline at end of file diff --git a/src/calculation_time_constrains/flows.py b/src/calculation_time_constrains/flows.py index 96b4b1a..14e0556 100644 --- a/src/calculation_time_constrains/flows.py +++ b/src/calculation_time_constrains/flows.py @@ -7,6 +7,7 @@ from sqlalchemy import Select, func, select from sqlalchemy.orm import joinedload from src.auth.service import Token +from src.config import TC_RBD_ID from src.database.core import DbSession from src.overhaul_scope.service import get_all from src.standard_scope.model import StandardScope @@ -94,7 +95,7 @@ async def create_calculation( created_by=created_by, ) - rbd_simulation_id = simulation_id or "8847f0a2-ea15-462a-8286-12293fca41f7" + rbd_simulation_id = simulation_id or TC_RBD_ID # results = await create_calculation_result_service( # db_session=db_session, calculation=calculation_data, token=token diff --git a/src/config.py b/src/config.py index 39ebfdc..305c2b8 100644 --- a/src/config.py +++ b/src/config.py @@ -84,12 +84,12 @@ MAXIMO_API_KEY = config("MAXIMO_API_KEY", default="keys") AUTH_SERVICE_API = config("AUTH_SERVICE_API", default="http://192.168.1.82:8000/auth") REALIBILITY_SERVICE_API = config("REALIBILITY_SERVICE_API", default="http://192.168.1.82:8000/reliability") RBD_SERVICE_API = config("RBD_SERVICE_API", default="http://192.168.1.82:8000/rbd") -TEMPORAL_URL = config("TEMPORAL_URL", default="http://192.168.1.8:7233") +TEMPORAL_URL = config("TEMPORAL_URL", default="http://192.168.1.86:7233") -TR_RBD_ID = config("TR_RBD_ID", default="http://192.168.1.8:7233") -TC_RBD_ID = config("TC_RBD_ID", default="http://192.168.1.8:7233") +TR_RBD_ID = config("TR_RBD_ID", default="f04f365e-25d8-4036-87c2-ba1bfe1f9229") +TC_RBD_ID = config("TC_RBD_ID", default="8847f0a2-ea15-462a-8286-12293fca41f7") DASHBOARD_OH_RBD_ID = config("DASHBOARD_OH_RBD_ID", default="http://192.168.1.8:7233") DEFAULT_TC_ID = config("DEFAULT_TC_ID", default="44f483f3-bfe4-4094-a59f-b97a10f2fea6") \ No newline at end of file