From 29f8e4d631cbe8a03f3c3afef326a2c6c1d232a3 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Thu, 9 Oct 2025 17:14:50 +0700 Subject: [PATCH] fix --- src/aeros_contribution/router.py | 4 +-- src/aeros_contribution/service.py | 28 +++++++++++++------ src/aeros_simulation/service.py | 4 +-- .../simulation_save_service.py | 5 +++- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/aeros_contribution/router.py b/src/aeros_contribution/router.py index ce3e01c..19aa264 100644 --- a/src/aeros_contribution/router.py +++ b/src/aeros_contribution/router.py @@ -10,11 +10,11 @@ router = APIRouter() active_simulations = {} -@router.get("", response_model=StandardResponse[None]) +@router.get("", response_model=StandardResponse[dict]) async def get_all_simulation(db_session: DbSession): """Get all simulation.""" - simulation_id = "b2dc96df-4d1f-4616-88ed-73ea9dfd62ae" + simulation_id = "eb8a1214-3d8f-48a9-8fa3-877a69a1fe98" results = await update_contribution_bulk_mappings(db_session=db_session, simulation_id=simulation_id) diff --git a/src/aeros_contribution/service.py b/src/aeros_contribution/service.py index e9d28e8..578d5c5 100644 --- a/src/aeros_contribution/service.py +++ b/src/aeros_contribution/service.py @@ -93,19 +93,27 @@ def k_of_n_availability(availabilities: list[float], k: int) -> float: -def get_all_components(structure: Structure) -> set: - """Extract all component names from a structure.""" +def get_all_components(structure) -> set: + """Extract all component/location_tag strings from a nested structure (series, parallel, k_of_n).""" components = set() - - def extract_components(substructure): + + def extract(substructure): if isinstance(substructure, str): + # Found a component or location tag components.add(substructure) elif isinstance(substructure, dict): - for component_list in substructure.values(): - for component in component_list: - extract_components(component) - - extract_components(structure) + # If it's k_of_n, check "components" + if "k_of_n" in substructure and "components" in substructure["k_of_n"]: + for comp in substructure["k_of_n"]["components"]: + extract(comp) + # If it's series/parallel or other nested structures + for value in substructure.values(): + extract(value) + elif isinstance(substructure, list): + for item in substructure: + extract(item) + + extract(structure) return components @@ -206,6 +214,7 @@ def compute_all_importance_measures(structure: Structure, availabilities: Dict[s log.warning(f"Missing components (assuming 100% availability): {missing_components}") for comp in missing_components: normalized_availabilities[comp] = 1.0 + # Calculate system baseline availability @@ -222,6 +231,7 @@ def compute_all_importance_measures(structure: Structure, availabilities: Dict[s criticality = criticality_importance(structure, normalized_availabilities, component) fv = fussell_vesely_importance(structure, normalized_availabilities, component) + results[component] = { 'birnbaum_importance': birnbaum, 'criticality_importance': criticality, diff --git a/src/aeros_simulation/service.py b/src/aeros_simulation/service.py index 668d7cb..2bcba8d 100644 --- a/src/aeros_simulation/service.py +++ b/src/aeros_simulation/service.py @@ -9,7 +9,7 @@ import httpx from fastapi import HTTPException, status import ijson import requests -from sqlalchemy import delete, select, update, and_ +from sqlalchemy import delete, desc, select, update, and_ from sqlalchemy.orm import selectinload from src.config import AEROS_BASE_URL, AEROS_BASE_URL_OLD, DEFAULT_PROJECT_NAME @@ -40,7 +40,7 @@ active_simulations = {} async def get_all(common: CommonParameters, status): query = select(AerosSimulation) if status: - query = query.where(AerosSimulation.status == "completed") + query = query.where(AerosSimulation.status == "completed").order_by(desc(AerosSimulation.created_at)) results = await search_filter_sort_paginate(model=query, **common) diff --git a/src/aeros_simulation/simulation_save_service.py b/src/aeros_simulation/simulation_save_service.py index dfd41b0..40fec74 100644 --- a/src/aeros_simulation/simulation_save_service.py +++ b/src/aeros_simulation/simulation_save_service.py @@ -242,7 +242,10 @@ async def create_calc_result_object( beta=eq_reliability["beta"] if node_type == "RegularNode" else None, eta=eq_reliability["eta"] if node_type == "RegularNode" else None, mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None, - parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None + parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None, + contribution=0, + criticality=0, + contribution_factor=0 )