add supervise/ok check, and correct return exit_code.

This commit is contained in:
primardj 2024-04-08 12:42:06 +01:00
parent 61ccac3415
commit 591afb7f7b
2 changed files with 30 additions and 25 deletions

View file

@ -4,8 +4,26 @@ use std::fs;
use std::path::Path;
use std::env::set_current_dir;
pub fn execute(svdir_var: String, svwait_var: i32, verbose: i8, command: &str, services: Vec<String>){
// TODO: Return the exec code.
fn sent_signal(exit_code: i32, svwait_var: i32, verbose: i8, command: &str, sv: String) -> i32 {
// Check if supervise/ok exist.
let supervise_ok = Path::new("supervise/ok");
if ! supervise_ok.exists() {
println!("warning: {}: unable to open supervise/ok: file does not exist", sv.clone());
if exit_code < 99 {
return exit_code + 1;
} else {
return exit_code;
}
}
// TODO
// sent the proper signal to supervise/control
//
// if verbose = 1, wait for the service to reach the proper state or timeout.
return exit_code;
}
pub fn execute(svdir_var: String, svwait_var: i32, verbose: i8, command: &str, services: Vec<String>) -> i32{
println!("execute in exec");
dbg!(svdir_var.clone());
dbg!(svwait_var);
@ -35,9 +53,8 @@ pub fn execute(svdir_var: String, svwait_var: i32, verbose: i8, command: &str, s
let path_to_sv = Path::new(&path);
if set_current_dir(path_to_sv).is_ok() {
println!("Set path okay.");
// TODO: make a function which do what's next.
// It will be called, sent_signal, will return 0 if no error, and 1 if an error.
// Call the change in the service.
exit_code = sent_signal(exit_code, svwait_var, verbose, command, sv);
} else {
println!("fail: {}: unable to change to service directory: file does not exist", sv);
if exit_code < 99 {
@ -45,15 +62,8 @@ pub fn execute(svdir_var: String, svwait_var: i32, verbose: i8, command: &str, s
}
}
// TODO
// 2. Check if supervise/ok exist
//
// if not, error => increase by one the exit code and print a beatifull message in Err
// standard.
//
// if yes, sent the proper signal to supervise/control
//
// if verbose = 1, wait for the service to reach the proper state or timeout.
}
return exit_code
}

View file

@ -26,10 +26,6 @@ fn main() {
let mut verbose: i8 = 0;
//dbg!(svdir_var);
//dbg!(svwait_var);
// run the parser
let args: Vec<String> = env::args().collect();
@ -46,7 +42,6 @@ fn main() {
if i == 0 {
if val == "-v" {
verbose = 1;
//dbg!(verbose);
}
else if val == "-w" {
i = 3;
@ -70,25 +65,25 @@ fn main() {
}
}
else if i == 1 {
// Set the command as first arguments.
command = val;
//dbg!(command);
i += 1;
}
else if i == 2 {
// case services to control.
//dbg!(val);
// add services to control.
services.push(val.to_string());
}
else if i == 3 {
// change svwait after flag -w
svwait_var = match val.parse::<i32>() {
Ok(val) => val,
Err(..) => svwait_var,
};
//dbg!(svwait_var);
i = 0;
}
}
executor::execute(svdir_var, svwait_var, verbose, command, services);
// Exit after all services are correctly executed.
exit(executor::execute(svdir_var, svwait_var, verbose, command, services));
}