From 38a9f39c6013a73b0a18c9f056a1e586aec93814 Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 3 Jul 2024 10:12:24 -0400 Subject: [PATCH] no buggs now --- src/main.rs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index 49de701..d023e98 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,40 +14,40 @@ enum CustomError { Fatal, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct Processes { #[serde(default)] processes : Vec, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct TrackingProcess { name : String, path : String, dependencies: Dependencies, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct Dependencies { #[serde(default)] files : Vec, #[serde(default)] services: Vec, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct Files { filename : String, src : String, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct Services { hostname : String, port : u32, triggers : ServiceTriggers, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] struct ServiceTriggers { wait : u32, delay: u32, @@ -63,8 +63,6 @@ async fn main() { return; } let mut handler: Vec> = vec![]; - let mut proc_clone: &TrackingProcess; - let mut tx_clone: mpsc::Sender; for proc in processes.processes.iter() { println!("\nProcess '{}' on stage:\n{}\nDepends on {} file(s), {} service(s)\n", @@ -94,10 +92,10 @@ async fn main() { return; } - proc_clone = proc.clone(); - tx_clone = tx.clone(); + let proc_clone = proc.clone(); + let tx_clone = tx.clone(); let event = tokio::spawn(async move { - run_daemons(proc_clone, tx_clone, &mut rx).await; + run_daemons(&proc_clone, tx_clone, &mut rx).await; }); handler.push(event); } @@ -114,8 +112,8 @@ async fn run_daemons( ) { let run_hand = running_handler(&proc.name, &proc.path, tx.clone()); - let file_hand = file_handler(&proc.dependencies.files, tx.clone()); - let serv_hand = service_handler(&proc.dependencies.services, tx.clone()); + let file_hand = file_handler(&proc.name,&proc.dependencies.files, tx.clone()); + let serv_hand = service_handler(&proc.name, &proc.dependencies.services, tx.clone()); tokio::select! { _ = run_hand => {}, @@ -182,9 +180,12 @@ async fn running_handler(name: &str, path: &str, tx: mpsc::Sender){ } } -async fn file_handler(files: &Vec, tx: mpsc::Sender) { +async fn file_handler(name: &str, files: &Vec, tx: mpsc::Sender) { loop { for file in files { + if !is_active(name) { + break; + } match check_file(&file.filename, &file.src) { Ok(_) => { println!("{} is still in directory!", &file.filename); @@ -207,9 +208,12 @@ fn check_file(filename: &str, path: &str) -> Result<(), CustomError> { } } -async fn service_handler(services: &Vec, tx: mpsc::Sender) { +async fn service_handler(name: &str, services: &Vec, tx: mpsc::Sender) { loop { for serv in services { + if !is_active(name) { + break; + } match check_service(&serv.hostname, &serv.port) { Ok(_) => { println!("{} is up!", &serv.hostname);