Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -101,21 +106,31 @@ 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");
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 {
Expand Down