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.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
)

@ -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"
if not simulation_id:
if duration == 17520:
simulation_id = TR_RBD_ID
else:
simulation = await run_rbd_simulation(
sim_hours=duration,
token=token
)
simulation_id = simulation.get("data")
await wait_for_workflow(simulation_id=simulation_id.get("data"))
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...")
except Exception as e:
print(f"Workflow {workflow_id} not found, treating as done.")
return "NOT_FOUND"
await asyncio.sleep(30)
await wait_for_workflow(simulation_id=simulation_id)
results = await get_simulation_results(

@ -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

@ -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

@ -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")
Loading…
Cancel
Save