From bbf57482fcbd48f1c976b70a513d7d2a3305d5c3 Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Thu, 2 May 2024 11:01:50 +0200 Subject: [PATCH] change stats model to cater for both endpoints after nym-node intro --- explorer-api/src/mix_node/http.rs | 26 ++++++++++++++++---------- explorer-api/src/mix_node/models.rs | 9 +++++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/explorer-api/src/mix_node/http.rs b/explorer-api/src/mix_node/http.rs index bb5cce49e7..6f45c65c6e 100644 --- a/explorer-api/src/mix_node/http.rs +++ b/explorer-api/src/mix_node/http.rs @@ -34,7 +34,7 @@ async fn get_mix_node_description(host: &str, port: u16) -> Result response.json::().await, Err(_) => { let second_try = reqwest::get(format!("http://{host}:{port}/api/v1/description")).await; @@ -44,19 +44,25 @@ async fn get_mix_node_description(host: &str, port: u16) -> Result Result { - let first_try = reqwest::get(format!("http://{host}:{port}/stats")).await; + // old endpoint for nym-mixnodes + let primary_url = format!("http://{host}:{port}/stats"); + // new endpoint for nym-nodes + let secondary_url = format!("http://{host}:{port}/api/v1/metrics/mixing"); - match first_try { - Ok(response) => response.json::().await, - Err(_) => { - //fallback for new endpoint for nym-nodes - let second_try = - reqwest::get(format!("http://{host}:{port}/api/v1/metrics/mixing")).await; - second_try?.json::().await + let primary_response = reqwest::get(&primary_url).await; + if let Ok(response) = primary_response { + if let Ok(stats) = response.json::().await { + return Ok(stats); } } -} + let secondary_response = reqwest::get(&secondary_url).await; + if let Ok(response) = secondary_response { + return response.json::().await; + } + + Err("failed to fetch stats from both endpoints") +} #[openapi(tag = "mix_nodes")] #[get("/")] pub(crate) async fn get_by_id( diff --git a/explorer-api/src/mix_node/models.rs b/explorer-api/src/mix_node/models.rs index 4adfa6dd86..abf83ce008 100644 --- a/explorer-api/src/mix_node/models.rs +++ b/explorer-api/src/mix_node/models.rs @@ -98,25 +98,30 @@ pub(crate) struct NodeDescription { pub(crate) location: String, } -#[derive(Serialize, Clone, Deserialize, JsonSchema)] +#[derive(Serialize, Clone, Deserialize, JsonSchema, Debug)] pub(crate) struct NodeStats { #[serde( serialize_with = "humantime_serde::serialize", deserialize_with = "humantime_serde::deserialize" )] update_time: SystemTime, - #[serde( serialize_with = "humantime_serde::serialize", deserialize_with = "humantime_serde::deserialize" )] previous_update_time: SystemTime, + #[serde(alias = "received_since_startup", default)] packets_received_since_startup: u64, + #[serde(alias = "sent_since_startup", default)] packets_sent_since_startup: u64, + #[serde(alias = "dropped_since_startup", default)] packets_explicitly_dropped_since_startup: u64, + #[serde(alias = "received_since_last_update", default)] packets_received_since_last_update: u64, + #[serde(alias = "sent_since_last_update", default)] packets_sent_since_last_update: u64, + #[serde(alias = "dropped_since_last_update", default)] packets_explicitly_dropped_since_last_update: u64, }