Skip to content

Commit aafd8e8

Browse files
apollo_network_benchmark: added network usage metrics
1 parent 4fc2e7d commit aafd8e8

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

crates/apollo_network_benchmark/src/bin/broadcast_network_stress_test_node/metrics.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,11 @@ define_metrics!(
1818
MetricGauge { SYSTEM_PROCESS_CPU_USAGE_PERCENT, "system_process_cpu_usage_percent", "CPU usage percentage of the current process" },
1919
MetricGauge { SYSTEM_PROCESS_MEMORY_USAGE_BYTES, "system_process_memory_usage_bytes", "Memory usage in bytes of the current process" },
2020
MetricGauge { SYSTEM_PROCESS_VIRTUAL_MEMORY_USAGE_BYTES, "system_process_virtual_memory_usage_bytes", "Virtual memory usage in bytes of the current process" },
21+
22+
// system metrics for network usage
23+
MetricGauge { SYSTEM_NETWORK_BYTES_SENT_TOTAL, "system_network_bytes_sent_total", "Total bytes sent across all network interfaces since system start" },
24+
MetricGauge { SYSTEM_NETWORK_BYTES_RECEIVED_TOTAL, "system_network_bytes_received_total", "Total bytes received across all network interfaces since system start" },
25+
MetricGauge { SYSTEM_NETWORK_BYTES_SENT_CURRENT, "system_network_bytes_sent_current", "Bytes sent across all network interfaces since last measurement" },
26+
MetricGauge { SYSTEM_NETWORK_BYTES_RECEIVED_CURRENT, "system_network_bytes_received_current", "Bytes received across all network interfaces since last measurement" },
2127
},
2228
);

crates/apollo_network_benchmark/src/bin/broadcast_network_stress_test_node/system_metrics.rs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
use std::time::Duration;
22

33
use apollo_metrics::metrics::LossyIntoF64;
4-
use sysinfo::{Pid, System};
4+
use sysinfo::{Networks, Pid, System};
55
use tokio::time::interval;
66
use tracing::warn;
77

88
use crate::metrics::{
99
SYSTEM_AVAILABLE_MEMORY_BYTES,
1010
SYSTEM_CPU_COUNT,
11+
SYSTEM_NETWORK_BYTES_RECEIVED_CURRENT,
12+
SYSTEM_NETWORK_BYTES_RECEIVED_TOTAL,
13+
SYSTEM_NETWORK_BYTES_SENT_CURRENT,
14+
SYSTEM_NETWORK_BYTES_SENT_TOTAL,
1115
SYSTEM_PROCESS_CPU_USAGE_PERCENT,
1216
SYSTEM_PROCESS_MEMORY_USAGE_BYTES,
1317
SYSTEM_PROCESS_VIRTUAL_MEMORY_USAGE_BYTES,
@@ -41,15 +45,45 @@ fn collect_system_and_process_metrics(system: &mut System, current_pid: Pid) {
4145
}
4246
}
4347

48+
/// Collects network interface metrics (bytes sent/received)
49+
fn collect_network_metrics(networks: &mut Networks) {
50+
networks.refresh(false);
51+
52+
let mut total_bytes_sent: u64 = 0;
53+
let mut total_bytes_received: u64 = 0;
54+
let mut current_bytes_sent: u64 = 0;
55+
let mut current_bytes_received: u64 = 0;
56+
57+
for (interface_name, data) in networks.iter() {
58+
// Skip virtual interfaces used for traffic control and loopback to avoid
59+
// double-counting
60+
if interface_name == "lo" || interface_name.starts_with("ifb") {
61+
continue;
62+
}
63+
64+
total_bytes_sent += data.total_transmitted();
65+
total_bytes_received += data.total_received();
66+
current_bytes_sent += data.transmitted();
67+
current_bytes_received += data.received();
68+
}
69+
70+
SYSTEM_NETWORK_BYTES_SENT_TOTAL.set(total_bytes_sent.into_f64());
71+
SYSTEM_NETWORK_BYTES_RECEIVED_TOTAL.set(total_bytes_received.into_f64());
72+
SYSTEM_NETWORK_BYTES_SENT_CURRENT.set(current_bytes_sent.into_f64());
73+
SYSTEM_NETWORK_BYTES_RECEIVED_CURRENT.set(current_bytes_received.into_f64());
74+
}
75+
4476
pub async fn monitor_process_metrics(interval_seconds: u64) {
4577
let mut interval = interval(Duration::from_secs(interval_seconds));
4678
let current_pid = sysinfo::get_current_pid().expect("Failed to get current process PID");
4779

4880
struct State {
4981
system: System,
82+
networks: Networks,
5083
}
5184

52-
let mut state = Some(State { system: System::new_all() });
85+
let mut state =
86+
Some(State { system: System::new_all(), networks: Networks::new_with_refreshed_list() });
5387

5488
loop {
5589
interval.tick().await;
@@ -59,6 +93,7 @@ pub async fn monitor_process_metrics(interval_seconds: u64) {
5993
// threads
6094
state = tokio::task::spawn_blocking(move || {
6195
collect_system_and_process_metrics(&mut passed_state.system, current_pid);
96+
collect_network_metrics(&mut passed_state.networks);
6297
Some(passed_state)
6398
})
6499
.await

0 commit comments

Comments
 (0)