From e1a023555681571c6460a778231887b3d9fd29b8 Mon Sep 17 00:00:00 2001 From: durch Date: Wed, 25 Jun 2025 10:59:39 +0200 Subject: [PATCH] Filter only on tested nodes --- nym-api/src/simulation_api/handlers/mod.rs | 7 ++++++- nym-api/src/simulation_api/models.rs | 6 ++++++ nym-api/src/support/storage/manager.rs | 5 ++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/nym-api/src/simulation_api/handlers/mod.rs b/nym-api/src/simulation_api/handlers/mod.rs index b5fd54f7ba..fbb5d533a8 100644 --- a/nym-api/src/simulation_api/handlers/mod.rs +++ b/nym-api/src/simulation_api/handlers/mod.rs @@ -237,10 +237,15 @@ async fn compare_methods( .ok_or_else(|| to_axum_error(SimulationApiError::new("Simulation epoch not found")))?; // Get simulation performance data - let mut performance_data = get_performance_by_method(storage, sim_epoch.epoch_id, "new") + let performance_data = get_performance_by_method(storage, sim_epoch.epoch_id, "new") .await .map_err(to_axum_error)?; + let mut performance_data: Vec = performance_data + .into_iter() + .filter(|p| p.total_samples() > 0) + .collect(); + // Populate production performance from node annotations cache let node_annotations = state .node_status_cache diff --git a/nym-api/src/simulation_api/models.rs b/nym-api/src/simulation_api/models.rs index 56ef7463be..066282c216 100644 --- a/nym-api/src/simulation_api/models.rs +++ b/nym-api/src/simulation_api/models.rs @@ -76,6 +76,12 @@ pub struct NodePerformanceData { pub production_performance: Option, } +impl NodePerformanceData { + pub fn total_samples(&self) -> u32 { + self.positive_samples + self.negative_samples + } +} + impl From for NodePerformanceData { fn from(perf: SimulatedNodePerformance) -> Self { Self { diff --git a/nym-api/src/support/storage/manager.rs b/nym-api/src/support/storage/manager.rs index 66512c203d..203fb2d0bc 100644 --- a/nym-api/src/support/storage/manager.rs +++ b/nym-api/src/support/storage/manager.rs @@ -1789,7 +1789,10 @@ impl StorageManager { description: Option<&str>, ) -> Result<(i64, bool), sqlx::Error> { // Check if simulation already exists - if let Some(existing_id) = self.get_existing_simulation_epoch(epoch_id, calculation_method).await? { + if let Some(existing_id) = self + .get_existing_simulation_epoch(epoch_id, calculation_method) + .await? + { return Ok((existing_id, false)); // Return existing ID and false (not newly created) }