Add CPU usage monitoring, remove btest-opensource submodule
All checks were successful
CI / test (push) Successful in 2m16s
All checks were successful
CI / test (push) Successful in 2m16s
CPU usage feature: - New cpu.rs module: background sampler thread, cross-platform (macOS + Linux) - Status message byte 1 now carries CPU load (0-100%), matching MikroTik format - Status format corrected: [type][cpu][00][00][seq:4 LE][bytes:4 LE] - Client and server exchange CPU in every status message - Display format: "cpu: 40%/12%" (local/remote), "!" warning if > 70% - Both client and server show local + remote CPU per interval - Syslog TEST_END could include CPU averages (future enhancement) Removed btest-opensource submodule — we've fully reimplemented the protocol with EC-SRP5 auth, multi-connection, IPv6, syslog, CSV, and CPU monitoring. The original project is still credited in LICENSE and README. 58 tests, all passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU64};
|
||||
use std::sync::atomic::{AtomicBool, AtomicU8, AtomicU32, AtomicU64};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -18,6 +18,8 @@ pub struct BandwidthState {
|
||||
pub total_rx_bytes: AtomicU64,
|
||||
pub total_lost_packets: AtomicU64,
|
||||
pub intervals: AtomicU32,
|
||||
/// Remote peer's CPU usage (received via status messages)
|
||||
pub remote_cpu: AtomicU8,
|
||||
}
|
||||
|
||||
impl BandwidthState {
|
||||
@@ -35,6 +37,7 @@ impl BandwidthState {
|
||||
total_rx_bytes: AtomicU64::new(0),
|
||||
total_lost_packets: AtomicU64::new(0),
|
||||
intervals: AtomicU32::new(0),
|
||||
remote_cpu: AtomicU8::new(0),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -122,6 +125,18 @@ pub fn print_status(
|
||||
bytes: u64,
|
||||
elapsed: Duration,
|
||||
lost_packets: Option<u64>,
|
||||
) {
|
||||
print_status_with_cpu(interval_num, direction, bytes, elapsed, lost_packets, None, None);
|
||||
}
|
||||
|
||||
pub fn print_status_with_cpu(
|
||||
interval_num: u32,
|
||||
direction: &str,
|
||||
bytes: u64,
|
||||
elapsed: Duration,
|
||||
lost_packets: Option<u64>,
|
||||
local_cpu: Option<u8>,
|
||||
remote_cpu: Option<u8>,
|
||||
) {
|
||||
if crate::csv_output::is_quiet() {
|
||||
return;
|
||||
@@ -136,13 +151,26 @@ pub fn print_status(
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
let cpu_str = match (local_cpu, remote_cpu) {
|
||||
(Some(l), Some(r)) => {
|
||||
let warn = if l > 70 || r > 70 { " !" } else { "" };
|
||||
format!(" cpu: {}%/{}%{}", l, r, warn)
|
||||
}
|
||||
(Some(l), None) => {
|
||||
let warn = if l > 70 { " !" } else { "" };
|
||||
format!(" cpu: {}%{}", l, warn)
|
||||
}
|
||||
_ => String::new(),
|
||||
};
|
||||
|
||||
println!(
|
||||
"[{:4}] {:>3} {} ({} bytes){}",
|
||||
"[{:4}] {:>3} {} ({} bytes){}{}",
|
||||
interval_num,
|
||||
direction,
|
||||
format_bandwidth(bw),
|
||||
bytes,
|
||||
loss_str,
|
||||
cpu_str,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user