From 51b9c49b16595b789d8bf978bdd72223b7c27db1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 16 Apr 2026 14:00:43 +0200 Subject: [PATCH 1/2] Move defaults to CLI --- src/main.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index e4a7e73..b4c9da1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,11 @@ use surge_ping::{Client, Config, SurgeError, PingIdentifier, PingSequence}; use tokio::time::timeout; use seahorse::{App, Context, Flag, FlagType}; +const DEFAULT_TARGET: &str = "127.0.0.1"; +const DEFAULT_OUTPUT_FILE: &str = "output.txt"; +const DEFAULT_TIMEOUT_MS: isize = 1000; +const DEFAULT_INTERVAL_SECS: isize = 60; + #[derive(Debug)] enum CustomError { HostResolutionFailure, @@ -101,20 +106,20 @@ fn main() { .usage("audion [args]") .version(env!("CARGO_PKG_VERSION")) .action(action) - .flag(Flag::new("target", FlagType::String).description("Target host to ping").alias("t")) - .flag(Flag::new("output", FlagType::String).description("Output file to write results").alias("o")) - .flag(Flag::new("timeout", FlagType::Int).description("Timeout in milliseconds").alias("to")) - .flag(Flag::new("interval", FlagType::Int).description("Interval between pings in seconds").alias("i")) + .flag(Flag::new("target", FlagType::String).description("Target host to ping (default: 127.0.0.1)").alias("t")) + .flag(Flag::new("output", FlagType::String).description("Output file to write results (default: output.txt)").alias("o")) + .flag(Flag::new("timeout", FlagType::Int).description("Timeout in milliseconds (default: 1000)").alias("to")) + .flag(Flag::new("interval", FlagType::Int).description("Interval between pings in seconds (default: 60)").alias("i")) .flag(Flag::new("verbose", FlagType::Bool).description("Print output to stdout").alias("v")); app.run(args); } fn action(context: &Context) { - let target = context.string_flag("target").unwrap_or("127.0.0.1".to_string()); - let output_file = context.string_flag("output").unwrap_or("output.txt".to_string()); - let timeout_ms = context.int_flag("timeout").unwrap_or(1000) as u64; - let interval_secs = context.int_flag("interval").unwrap_or(60) as u64; + let target = context.string_flag("target").unwrap_or(DEFAULT_TARGET.to_string()); + let output_file = context.string_flag("output").unwrap_or(DEFAULT_OUTPUT_FILE.to_string()); + let timeout_ms = context.int_flag("timeout").unwrap_or(DEFAULT_TIMEOUT_MS) as u64; + let interval_secs = context.int_flag("interval").unwrap_or(DEFAULT_INTERVAL_SECS) as u64; let verbose = context.bool_flag("verbose"); tokio::runtime::Runtime::new().unwrap().block_on(async { From b6bcd638b0f3c1ef9ba5451aedd40df5f0235c0c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 16 Apr 2026 14:02:21 +0200 Subject: [PATCH 2/2] Print settings on startup --- src/main.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main.rs b/src/main.rs index b4c9da1..a6e93d6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -121,6 +121,16 @@ fn action(context: &Context) { let timeout_ms = context.int_flag("timeout").unwrap_or(DEFAULT_TIMEOUT_MS) as u64; let interval_secs = context.int_flag("interval").unwrap_or(DEFAULT_INTERVAL_SECS) as u64; let verbose = context.bool_flag("verbose"); + let settings_line = format!( + "Settings: Target: {}, Output: {}, Timeout (ms): {}, Interval (s): {}", + target, output_file, timeout_ms, interval_secs + ); + + println!("{}", settings_line); + if let Err(err) = append_to_file(&output_file, &settings_line) { + eprintln!("Error: {}", err); + std::process::exit(1); + } tokio::runtime::Runtime::new().unwrap().block_on(async { if let Err(err) = ping_host(&target, &output_file, timeout_ms, interval_secs, verbose).await {