mod cli;
mod config;
mod disk;
mod hook;
mod logger;
mod monitor;
mod notify;
mod procs;
mod report;
mod signals;
use cli::{build_config, check_config, report_settings, version_text, Cli, Parsed, USAGE};
fn main() {
let cli = match Cli::parse(std::env::args().skip(1)) {
Ok(Parsed::Help) => return println!("{USAGE}"),
Ok(Parsed::Version) => return println!("{}", version_text()),
Ok(Parsed::Run(cli)) => cli,
Err(e) => {
eprintln!("iowatchd: {e}\nTry 'iowatchd --help' for more information.");
std::process::exit(2);
}
};
signals::install_signal_handlers();
if cli.list_devices {
for line in disk::list_devices() {
println!("{line}");
}
return;
}
if cli.report {
let cfg = report_settings(&cli).unwrap_or_else(|e| {
eprintln!("iowatchd: error: {e}");
std::process::exit(1);
});
std::process::exit(report::run(
cfg.log_file.as_deref(),
cli.since.unwrap_or(report::DEFAULT_SINCE_SECS),
cfg.top_n,
cli.json,
));
}
if cli.check_config {
std::process::exit(check_config(&cli));
}
let cfg = build_config(&cli).unwrap_or_else(|e| {
eprintln!("iowatchd: error: {e}");
std::process::exit(1);
});
if cli.once {
monitor::run_once(&cfg, &cli);
} else {
monitor::run(cfg, &cli);
}
}