diff --git a/Cargo.lock b/Cargo.lock index a69ad3257c..ff2531307a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "nym-network-monitor" -version = "1.1.5" +version = "1.1.6" dependencies = [ "anyhow", "axum 0.7.9", diff --git a/common/types/src/monitoring.rs b/common/types/src/monitoring.rs index d932c4ff5e..f20c5ac5ca 100644 --- a/common/types/src/monitoring.rs +++ b/common/types/src/monitoring.rs @@ -11,7 +11,7 @@ static NETWORK_MONITORS: LazyLock> = LazyLock::new(|| { nm }); -#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone, ToSchema)] +#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone, ToSchema, Eq, PartialEq, Hash)] pub struct RouteResult { pub layer1: u32, pub layer2: u32, diff --git a/nym-network-monitor/Cargo.toml b/nym-network-monitor/Cargo.toml index d682478d74..6a8b45ba3a 100644 --- a/nym-network-monitor/Cargo.toml +++ b/nym-network-monitor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-network-monitor" -version = "1.1.5" +version = "1.1.6" authors.workspace = true repository.workspace = true homepage.workspace = true diff --git a/nym-network-monitor/src/accounting.rs b/nym-network-monitor/src/accounting.rs index 05a980a641..c5a8d07222 100644 --- a/nym-network-monitor/src/accounting.rs +++ b/nym-network-monitor/src/accounting.rs @@ -546,42 +546,45 @@ pub async fn submit_metrics(database_url: Option<&String>) -> anyhow::Result<()> .collect::, _>>()?; let network_account = NetworkAccount::finalize()?; - let accounting_routes = network_account.accounting_routes; - info!("Submitting {} accounting routes", accounting_routes.len()); - match accounting_routes - .chunks(10) - .map(|chunk| { - let route_results = chunk - .iter() - .map(|route| { - RouteResult::new( - route.mix_nodes.0, - route.mix_nodes.1, - route.mix_nodes.2, - route.gateway_node, - route.success, - ) - }) - .collect::>(); - let monitor_results = MonitorResults::Route(route_results); - let monitor_message = MonitorMessage::new(monitor_results, private_key); - client.post(&route_submit_url).json(&monitor_message).send() + let route_results = network_account.accounting_routes + .iter() + .map(|route| { + RouteResult::new( + route.mix_nodes.0, + route.mix_nodes.1, + route.mix_nodes.2, + route.gateway_node, + route.success, + ) }) - .collect::>() - .collect::>>() - .await + .collect::>() .into_iter() - .collect::, _>>() - { - Ok(_) => info!( - "Successfully submitted accounting routes to {}", - nym_api_url - ), - Err(e) => error!( - "Error submitting accounting routes to {}: {}", - nym_api_url, e - ), - }; + .collect::>(); + info!("Submitting {} accounting routes", route_results.len()); + for batch in route_results.chunks(1000) { + match batch + .chunks(100) + .map(|chunk| { + let monitor_results = MonitorResults::Route(chunk.to_vec()); + let monitor_message = MonitorMessage::new(monitor_results, private_key); + client.post(&route_submit_url).json(&monitor_message).send() + }) + .collect::>() + .collect::>>() + .await + .into_iter() + .collect::, _>>() + { + Ok(_) => info!( + "Successfully submitted accounting routes to {}", + nym_api_url + ), + Err(e) => error!( + "Error submitting accounting routes to {}: {}", + nym_api_url, e + ), + }; + } } } } else {