main
Cizz22 3 months ago
parent 32276ef053
commit 078a03caa0

@ -5,6 +5,7 @@ from fastapi.params import Query
from src.auth.service import Token from src.auth.service import Token
from src.calculation_target_reliability.service import get_simulation_results 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.database.core import CollectorDbSession, DbSession
from src.models import StandardResponse from src.models import StandardResponse
@ -24,7 +25,7 @@ async def get_target_reliability(
"""Get all scope pagination.""" """Get all scope pagination."""
results = await get_simulation_results( results = await get_simulation_results(
simulation_id = "default", simulation_id = TC_RBD_ID,
token=token token=token
) )

@ -4,7 +4,8 @@ from temporalio.client import Client
from fastapi import APIRouter, HTTPException, status from fastapi import APIRouter, HTTPException, status
from fastapi.params import Query 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.database.core import DbSession, CollectorDbSession
from src.auth.service import Token from src.auth.service import Token
from src.models import StandardResponse from src.models import StandardResponse
@ -55,36 +56,19 @@ async def get_target_reliability(
# oh_duration=duration # oh_duration=duration
# ) # )
if not simulation_id or duration == 17520: if not simulation_id:
simulation_id = "f04f365e-25d8-4036-87c2-ba1bfe1f9229" if duration == 17520:
else: simulation_id = TR_RBD_ID
temporal_client = await Client.connect(TEMPORAL_URL) else:
simulation = await run_rbd_simulation(
simulation_id = await run_rbd_simulation( sim_hours=duration,
sim_hours=duration, token=token
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...")
except Exception as e: simulation_id = simulation.get("data")
print(f"Workflow {workflow_id} not found, treating as done.") await wait_for_workflow(simulation_id=simulation_id.get("data"))
return "NOT_FOUND" else:
await wait_for_workflow(simulation_id=simulation_id)
await asyncio.sleep(30)
results = await get_simulation_results( results = await get_simulation_results(

@ -1,6 +1,10 @@
import asyncio
from datetime import datetime, timedelta from datetime import datetime, timedelta
import random import random
from typing import List, Optional 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, def generate_down_periods(start_date: datetime, end_date: datetime,
num_periods: Optional[int] = None, min_duration: int = 3, 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)) down_periods.append((period_start, period_end))
return sorted(down_periods) 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

@ -7,6 +7,7 @@ from sqlalchemy import Select, func, select
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from src.auth.service import Token from src.auth.service import Token
from src.config import TC_RBD_ID
from src.database.core import DbSession from src.database.core import DbSession
from src.overhaul_scope.service import get_all from src.overhaul_scope.service import get_all
from src.standard_scope.model import StandardScope from src.standard_scope.model import StandardScope
@ -94,7 +95,7 @@ async def create_calculation(
created_by=created_by, 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( # results = await create_calculation_result_service(
# db_session=db_session, calculation=calculation_data, token=token # db_session=db_session, calculation=calculation_data, token=token

@ -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") 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") 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") 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") TR_RBD_ID = config("TR_RBD_ID", default="f04f365e-25d8-4036-87c2-ba1bfe1f9229")
TC_RBD_ID = config("TC_RBD_ID", default="http://192.168.1.8:7233") 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") 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") DEFAULT_TC_ID = config("DEFAULT_TC_ID", default="44f483f3-bfe4-4094-a59f-b97a10f2fea6")
Loading…
Cancel
Save