diff --git a/crates/stats/src/lib.rs b/crates/stats/src/lib.rs index 3c411ba..7ff088e 100644 --- a/crates/stats/src/lib.rs +++ b/crates/stats/src/lib.rs @@ -1,5 +1,6 @@ mod code; mod network; +mod procs; pub struct Stats; @@ -12,7 +13,11 @@ impl Stats { impl util::Cmd for Stats { fn cmd() -> eyre::Result { let cmd = clap::Command::new("stats") - .subcommands(&[code::Code::cmd()?, network::Network::cmd()?]) + .subcommands(&[ + code::Code::cmd()?, + network::Network::cmd()?, + procs::Procs::cmd()?, + ]) .subcommand_required(true); Ok(cmd) @@ -22,6 +27,7 @@ impl util::Cmd for Stats { match args.subcommand() { Some(("code", args)) => code::Code::exec(args), Some(("network", args)) => network::Network::exec(args), + Some(("procs", args)) => procs::Procs::exec(args), _ => Stats::run(), } } diff --git a/crates/stats/src/procs.rs b/crates/stats/src/procs.rs new file mode 100644 index 0000000..76fd33d --- /dev/null +++ b/crates/stats/src/procs.rs @@ -0,0 +1,29 @@ +pub struct Procs; + +impl Procs { + fn run() -> eyre::Result<()> { + if let Err(_) = util::shell::run_with_input_and_output(&["procs", "--version"], "".into()) { + return Err(eyre::anyhow!( + "could not find procs, please install or add to PATH" + )); + } + + util::shell::run(&["procs"], None)?; + + Ok(()) + } +} + +impl util::Cmd for Procs { + fn cmd() -> eyre::Result { + let cmd = clap::Command::new("procs").subcommands(&[]); + + Ok(cmd) + } + + fn exec(args: &clap::ArgMatches) -> eyre::Result<()> { + match args.subcommand() { + _ => Procs::run(), + } + } +}