diff --git a/01_phase_rust_src/sv-rustit/src/executor/sent_signal.rs b/01_phase_rust_src/sv-rustit/src/executor/sent_signal.rs index 9955f42..761ae3d 100644 --- a/01_phase_rust_src/sv-rustit/src/executor/sent_signal.rs +++ b/01_phase_rust_src/sv-rustit/src/executor/sent_signal.rs @@ -31,7 +31,7 @@ pub fn sent_signal( svwait_var: i32, verbose: i8, command: &str, mut sv: status_ return 0 } if time_wait >= svwait_var { - println!("fail: {}: timeout", sv.get_name()); + println!("timeout: {}", sv.get_status_string()); return 1 } @@ -60,7 +60,7 @@ pub fn sent_signal( svwait_var: i32, verbose: i8, command: &str, mut sv: status_ return 0 } if time_wait >= svwait_var { - println!("fail: {}: timeout", sv.get_name()); + println!("timeout: {}", sv.get_status_string()); return 1 } @@ -75,11 +75,8 @@ pub fn sent_signal( svwait_var: i32, verbose: i8, command: &str, mut sv: status_ } } - - // TODO - // sent the proper signal to supervise/control - // - // if verbose = 1, wait for the service to reach the proper state or timeout. println!("Error, command not implemented."); return 1; } + + diff --git a/01_phase_rust_src/sv-rustit/src/status_obj.rs b/01_phase_rust_src/sv-rustit/src/status_obj.rs index 10a26b3..777d261 100644 --- a/01_phase_rust_src/sv-rustit/src/status_obj.rs +++ b/01_phase_rust_src/sv-rustit/src/status_obj.rs @@ -8,6 +8,7 @@ use std::io::prelude::*; use std::time::SystemTime; + #[derive(Debug)] pub struct StatusObj { svname: String, // Service name @@ -230,6 +231,13 @@ impl StatusObj { } pub fn is_up(&mut self) -> bool { + let check = fs::File::open("check"); + match check { + Ok(file) => { + return misc::test_check(file, self.run_finish) + }, + Err(..) => {}, + }; return self.run_finish; } diff --git a/01_phase_rust_src/sv-rustit/src/status_obj/misc.rs b/01_phase_rust_src/sv-rustit/src/status_obj/misc.rs index 731d92f..b53feb2 100644 --- a/01_phase_rust_src/sv-rustit/src/status_obj/misc.rs +++ b/01_phase_rust_src/sv-rustit/src/status_obj/misc.rs @@ -3,6 +3,10 @@ use tokio::net::unix::pipe; use tokio::runtime::Runtime; use std::io::ErrorKind; +use std::fs::File; +use std::process::Command; +use std::os::unix::fs::PermissionsExt; + pub fn make_pause_run(pr_int: u8) -> bool { if pr_int == 0 { return false // run @@ -131,3 +135,31 @@ pub fn sent_signal(signal: &[u8]) -> bool { }, }; } + +pub fn test_check(file: File, run_finish: bool) -> bool { + // Check the permission, and return the result of check + let meta = file.metadata(); + match meta { + Ok(m) => { + let permissions = m.permissions(); + //println!("permissions: {:o}", permissions.mode() & 0o100700); + if permissions.mode() & 0o100700 == 0o100700 { + // Execute script + let mut command = Command::new("sh"); + let status = command.arg("check").status(); + match status { + Ok(s) => { + if s.success() { + return true + } else { + return false + } + }, + Err(..) => {} + }; + } + }, + Err(..) => {}, + }; + return run_finish; +}