Compare commits

..

No commits in common. "92c5f4b3a11e90b72652c425c16e14a1306f36e5" and "d3fb3e8974cefb565f52ac9afc0699355aa6d90e" have entirely different histories.

3 changed files with 20 additions and 41 deletions

View file

@ -1,9 +1,8 @@
[package] [package]
name = "sv" name = "sv"
version = "0.2.0" version = "0.1.0"
edition = "2024" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
tokio = { version = "1.37.0", features = ["full"] }

View file

@ -8,6 +8,7 @@ use std::io::prelude::*;
use std::time::SystemTime; use std::time::SystemTime;
pub struct StatusObj { pub struct StatusObj {
svname: String, // Service name svname: String, // Service name
svpath: String, // Service path svpath: String, // Service path
@ -34,18 +35,24 @@ impl StatusObj {
println!("fail: {}: unable to change to service directory: file does not exist", sv); println!("fail: {}: unable to change to service directory: file does not exist", sv);
return None return None
} }
let ok_option = Path::new("supervise/ok");
// Check if supervise/control and supervise/ok exists, and if runsv running. if ! ok_option.exists() {
let control_exists = misc::check_fifo(sv.clone(), "supervise/ok"); println!("warning: {}: unable to open supervise/ok: file does not exist", sv);
if control_exists == false {
return None;
}
let control_exists = misc::check_fifo(sv.clone(), "supervise/control");
if control_exists == false {
return None; return None;
} }
// TODO: check if there is a process reading the pipe.
// piste : https://docs.rs/tokio/latest/tokio/net/unix/pipe/struct.OpenOptions.html
//let mut control_option = fs::File::open("supervise/control");
//let status_option = fs::OpenOptions::new().read(true).open("supervise/control");
//match control_option {
// Ok(_file) => {},
// Err(ee) => {
// println!("fail: {}: runsv not running {}", sv, ee);
// return None;
// },
//};
let status_option = fs::OpenOptions::new().read(true).open("supervise/status"); let status_option = fs::OpenOptions::new().read(true).open("supervise/status");
let mut status = match status_option { let mut status = match status_option {
Ok(file) => file, Ok(file) => file,
@ -66,6 +73,8 @@ impl StatusObj {
}; };
if size != 20 { if size != 20 {
dbg!(size);
dbg!(contents);
println!("warning: {}: bad supervise/status format", sv); println!("warning: {}: bad supervise/status format", sv);
return None return None
} }
@ -111,9 +120,7 @@ impl StatusObj {
log: log_exists, log: log_exists,
}) })
} }
pub fn get_status_string(&mut self) -> String { pub fn get_status_string(&mut self) -> String {
// return the status for this service in particular.
let status_sv; let status_sv;
let pid_string: String; let pid_string: String;
@ -182,3 +189,4 @@ impl StatusObj {
} }
} }

View file

@ -1,9 +1,4 @@
use std::io::ErrorKind;
use tokio::net::unix::pipe;
use tokio::runtime::Runtime;
pub fn make_pause_run(pr_int: u8) -> bool { pub fn make_pause_run(pr_int: u8) -> bool {
if pr_int == 0 { if pr_int == 0 {
return false // run return false // run
@ -77,26 +72,3 @@ pub fn return_u8_in_u64(table: Vec<u8>) -> u64 {
return r return r
} }
pub fn check_fifo(sv: String, path: &str) -> bool {
// Check if fifo is available. If yes, return true.
// If no, return false.
let rt = Runtime::new().unwrap();
let _guard = rt.enter();
let sender = pipe::OpenOptions::new().open_sender(path);
match sender {
Ok(..) => {},
Err(e) => match e.kind() {
ErrorKind::NotFound => {
println!("warning: {sv}: unable to open {path}: file does not exist");
return false;
},
_ => {
println!("fail: {sv}: runsv not running");
return false;
}
},
};
return true
}