no buggs now

pull/9/head
prplV 2024-07-03 10:12:24 -04:00
parent 48406831e8
commit 38a9f39c60
1 changed files with 19 additions and 15 deletions

View File

@ -14,40 +14,40 @@ enum CustomError {
Fatal, Fatal,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct Processes { struct Processes {
#[serde(default)] #[serde(default)]
processes : Vec<TrackingProcess>, processes : Vec<TrackingProcess>,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct TrackingProcess { struct TrackingProcess {
name : String, name : String,
path : String, path : String,
dependencies: Dependencies, dependencies: Dependencies,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct Dependencies { struct Dependencies {
#[serde(default)] #[serde(default)]
files : Vec<Files>, files : Vec<Files>,
#[serde(default)] #[serde(default)]
services: Vec<Services>, services: Vec<Services>,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct Files { struct Files {
filename : String, filename : String,
src : String, src : String,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct Services { struct Services {
hostname : String, hostname : String,
port : u32, port : u32,
triggers : ServiceTriggers, triggers : ServiceTriggers,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize, Clone)]
struct ServiceTriggers { struct ServiceTriggers {
wait : u32, wait : u32,
delay: u32, delay: u32,
@ -63,8 +63,6 @@ async fn main() {
return; return;
} }
let mut handler: Vec<tokio::task::JoinHandle<()>> = vec![]; let mut handler: Vec<tokio::task::JoinHandle<()>> = vec![];
let mut proc_clone: &TrackingProcess;
let mut tx_clone: mpsc::Sender<usize>;
for proc in processes.processes.iter() { for proc in processes.processes.iter() {
println!("\nProcess '{}' on stage:\n{}\nDepends on {} file(s), {} service(s)\n", println!("\nProcess '{}' on stage:\n{}\nDepends on {} file(s), {} service(s)\n",
@ -94,10 +92,10 @@ async fn main() {
return; return;
} }
proc_clone = proc.clone(); let proc_clone = proc.clone();
tx_clone = tx.clone(); let tx_clone = tx.clone();
let event = tokio::spawn(async move { 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); handler.push(event);
} }
@ -114,8 +112,8 @@ async fn run_daemons(
) { ) {
let run_hand = running_handler(&proc.name, &proc.path, tx.clone()); let run_hand = running_handler(&proc.name, &proc.path, tx.clone());
let file_hand = file_handler(&proc.dependencies.files, tx.clone()); let file_hand = file_handler(&proc.name,&proc.dependencies.files, tx.clone());
let serv_hand = service_handler(&proc.dependencies.services, tx.clone()); let serv_hand = service_handler(&proc.name, &proc.dependencies.services, tx.clone());
tokio::select! { tokio::select! {
_ = run_hand => {}, _ = run_hand => {},
@ -182,9 +180,12 @@ async fn running_handler(name: &str, path: &str, tx: mpsc::Sender<usize>){
} }
} }
async fn file_handler(files: &Vec<Files>, tx: mpsc::Sender<usize>) { async fn file_handler(name: &str, files: &Vec<Files>, tx: mpsc::Sender<usize>) {
loop { loop {
for file in files { for file in files {
if !is_active(name) {
break;
}
match check_file(&file.filename, &file.src) { match check_file(&file.filename, &file.src) {
Ok(_) => { Ok(_) => {
println!("{} is still in directory!", &file.filename); 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<Services>, tx: mpsc::Sender<usize>) { async fn service_handler(name: &str, services: &Vec<Services>, tx: mpsc::Sender<usize>) {
loop { loop {
for serv in services { for serv in services {
if !is_active(name) {
break;
}
match check_service(&serv.hostname, &serv.port) { match check_service(&serv.hostname, &serv.port) {
Ok(_) => { Ok(_) => {
println!("{} is up!", &serv.hostname); println!("{} is up!", &serv.hostname);