From 22f6ba297b614ad26c84a702daa47dcb3d5675f1 Mon Sep 17 00:00:00 2001 From: "Scott C. Livingston" Date: Sun, 18 Aug 2024 16:58:19 -0700 Subject: [PATCH] monitor loop --- src/cli.rs | 27 +++++++++++++++++++++++---- src/monitor.rs | 18 ++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 0e4056d..38ec834 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1087,9 +1087,24 @@ fn monitor_subcommand(matches: &clap::ArgMatches) -> Result<(), CliError> { Err(err) => return CliError::new_std(err, 1), }; - match monitor::run(&local_config, wd_index) { - Ok(()) => Ok(()), - Err(err) => CliError::new_std(err, 1), + if matches.is_present("loop") { + let duration = match matches.value_of("loop").unwrap().parse::() { + Ok(d) => d, + Err(err) => return CliError::new(err, 1), + }; + match monitor::run_loop( + &local_config, + wd_index, + std::time::Duration::from_secs(duration), + ) { + Ok(()) => Ok(()), + Err(err) => CliError::new_std(err, 1), + } + } else { + match monitor::run(&local_config, wd_index) { + Ok(()) => Ok(()), + Err(err) => CliError::new_std(err, 1), + } } } @@ -1302,7 +1317,11 @@ pub fn main() -> Result<(), CliError> { .about("Detect and handle errors in a deployment") .arg(Arg::with_name("id_prefix") .value_name("ID") - .help("id of workspace deployment to monitor"))) + .help("id of workspace deployment to monitor")) + .arg(Arg::with_name("loop") + .long("loop") + .value_name("DURATION") + .help("Repeat monitor checks every DURATION seconds"))) ; let matches = app.get_matches(); diff --git a/src/monitor.rs b/src/monitor.rs index 0a371c0..22a823e 100644 --- a/src/monitor.rs +++ b/src/monitor.rs @@ -1,4 +1,5 @@ use std::process::Command; +use std::thread::sleep; use crate::api; use crate::check::Error; @@ -48,3 +49,20 @@ pub fn run_dry(local_config: &Config, wd_index: usize) -> Result<(), Box Result<(), Box> { run_opt(local_config, wd_index, true) } + + +pub fn run_loop( + local_config: &Config, + wd_index: usize, + duration: std::time::Duration, +) -> Result<(), Box> { + let mut result; + loop { + println!("{:?}", duration); + result = run(local_config, wd_index); + if result.is_err() { + return result; + } + sleep(duration); + } +}