From f9de9ef93cc71180e10f7d59f0643feabd098a63 Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Mon, 5 Sep 2022 13:05:32 -0400 Subject: [PATCH] Renamed the 'ping' test to the 'latency' test to more accurately reflect the test; Added the '-i' flag to the jitter and latency tests to set the ping interval timing --- src/benchmarks/network.rs | 16 +++++++-- src/main.rs | 68 +++++++++++++++++++++------------------ 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/benchmarks/network.rs b/src/benchmarks/network.rs index 429dad7..ed9454d 100644 --- a/src/benchmarks/network.rs +++ b/src/benchmarks/network.rs @@ -3,19 +3,25 @@ use std::process; use crate::text; // ping a host -pub fn ping_host(address: &str, count: &u16) { +pub fn latency_test(address: &str, count: &u16, interval: &u16) { println!("Pinging host {}, {} times.", address, count); + // if we're on Windows we need to use the -n flag for ping counts let mut count_arg = "-c"; if cfg!(windows) { count_arg = "-n"; } + // convert the ping interval to seconds + let interval_secs = *interval as f64 / 1000 as f64; + // run the ping command let output = process::Command::new("ping") .arg(address) .arg(count_arg) .arg(format!("{}", count)) + .arg("-i") + .arg(format!("{}", interval_secs)) .output() .expect("Failed to execute command"); @@ -31,19 +37,25 @@ pub fn ping_host(address: &str, count: &u16) { } // network jitter test -pub fn jitter_test(address: &str, count: &u16) { +pub fn jitter_test(address: &str, count: &u16, interval: &u16) { println!("Pinging host {}, {} times to determine network jitter.", address, count); + // if we're on Windows we need to use the -n flag for ping counts let mut count_arg = "-c"; if cfg!(windows) { count_arg = "-n"; } + // convert the ping interval to seconds + let interval_secs = *interval as f64 / 1000 as f64; + // run the ping command let output = process::Command::new("ping") .arg(address) .arg(count_arg) .arg(format!("{}", count)) + .arg("-i") + .arg(format!("{}", interval_secs)) .output() .expect("Failed to execute command"); diff --git a/src/main.rs b/src/main.rs index 57b9282..caa03e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,8 +11,8 @@ struct Cli { #[clap(subcommand)] command: Commands, - #[clap(short = 'i', long, default_value_t = 1, help = "Number of times to run test. Default = 1", global = true)] - iterations: u8, + #[clap(short = 'l', long, default_value_t = 1, help = "Number of times to run test. Default = 1", global = true)] + loopcount: u8, } #[derive(Subcommand)] @@ -123,13 +123,11 @@ struct Net { #[derive(Subcommand)] enum NetCommands { - // ping subcommand - #[clap(name = "ping", about = "Ping a host to determine network latency.")] - Ping { - #[clap(short = 'a', long, default_value_t = String::from("8.8.8.8"))] - address: String, - #[clap(short = 'c', long, default_value_t = 30)] - count: u16, + // bandwidth test subcommand + #[clap(name = "bandwidth", about = "Uses iperf to test network bandwidth.")] + Bandwidth { + #[clap(short = 'a', long, required = true)] + host: String, }, // jitter subcommand @@ -137,15 +135,21 @@ enum NetCommands { Jitter { #[clap(short = 'a', long, default_value_t = String::from("8.8.8.8"))] address: String, - #[clap(short = 'c', long, default_value_t = 30)] + #[clap(short = 'c', long, default_value_t = 100)] count: u16, + #[clap(short = 'i', long, default_value_t = 1000)] + interval: u16, }, - // bandwidth test subcommand - #[clap(name = "bandwidth", about = "Uses iperf to test network bandwidth.")] - Bandwidth { - #[clap(short = 'a', long, required = true)] - host: String, + // latency subcommand + #[clap(name = "latency", about = "Ping a host to determine network latency.")] + Latency { + #[clap(short = 'a', long, default_value_t = String::from("8.8.8.8"))] + address: String, + #[clap(short = 'c', long, default_value_t = 100)] + count: u16, + #[clap(short = 'i', long, default_value_t = 1000)] + interval: u16, }, } @@ -160,25 +164,25 @@ fn main() { Commands::Disk(args) => match &args.disk_commands { DiskCommands::ReadSeqTest { tempfile, size } => { - for i in 0..cli.iterations { + for i in 0..cli.loopcount { println!("Test run number {}.", i + 1); benchmarks::disk::disk_read_seq_test(tempfile, size); } }, DiskCommands::ReadRandTest { tempfile, size } => { - for i in 0..cli.iterations { + for i in 0..cli.loopcount { println!("Test run number {}.", i + 1); benchmarks::disk::disk_read_rand_test(tempfile, size); } }, DiskCommands::WriteSeqTest { tempfile, size } => { - for i in 0..cli.iterations { + for i in 0..cli.loopcount { println!("Test run number {}.", i + 1); benchmarks::disk::disk_write_seq_test(tempfile, size); } }, DiskCommands::WriteRandTest { tempfile, size } => { - for i in 0..cli.iterations { + for i in 0..cli.loopcount { println!("Test run number {}.", i + 1); benchmarks::disk::disk_write_rand_test(tempfile, size); } @@ -192,24 +196,24 @@ fn main() { }, Commands::Net(args) => match &args.net_commands { - NetCommands::Ping { address, count } => { - for i in 0..cli.iterations { - println!("Test run number {}.", i + 1); - benchmarks::network::ping_host(address, count); - } - }, - NetCommands::Jitter { address, count } => { - for i in 0..cli.iterations { - println!("Test run number {}.", i + 1); - benchmarks::network::jitter_test(address, count); - } - }, NetCommands::Bandwidth { host } => { - for i in 0..cli.iterations { + for i in 0..cli.loopcount { println!("Test run number {}.", i + 1); benchmarks::network::bandwidth_test(host); } }, + NetCommands::Jitter { address, count, interval } => { + for i in 0..cli.loopcount { + println!("Test run number {}.", i + 1); + benchmarks::network::jitter_test(address, count, interval); + } + }, + NetCommands::Latency { address, count, interval } => { + for i in 0..cli.loopcount { + println!("Test run number {}.", i + 1); + benchmarks::network::latency_test(address, count, interval); + } + }, }, } }