Merge pull request 'execution' (#7) from execution into main

Reviewed-on: #7
This commit is contained in:
statzitz 2024-04-13 01:07:20 +02:00
commit 92c5f4b3a1
3 changed files with 41 additions and 20 deletions

View file

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

View file

@ -8,7 +8,6 @@ use std::io::prelude::*;
use std::time::SystemTime;
pub struct StatusObj {
svname: String, // Service name
svpath: String, // Service path
@ -35,24 +34,18 @@ impl StatusObj {
println!("fail: {}: unable to change to service directory: file does not exist", sv);
return None
}
let ok_option = Path::new("supervise/ok");
if ! ok_option.exists() {
println!("warning: {}: unable to open supervise/ok: file does not exist", sv);
// Check if supervise/control and supervise/ok exists, and if runsv running.
let control_exists = misc::check_fifo(sv.clone(), "supervise/ok");
if control_exists == false {
return None;
}
let control_exists = misc::check_fifo(sv.clone(), "supervise/control");
if control_exists == false {
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 mut status = match status_option {
Ok(file) => file,
@ -73,8 +66,6 @@ impl StatusObj {
};
if size != 20 {
dbg!(size);
dbg!(contents);
println!("warning: {}: bad supervise/status format", sv);
return None
}
@ -120,7 +111,9 @@ impl StatusObj {
log: log_exists,
})
}
pub fn get_status_string(&mut self) -> String {
// return the status for this service in particular.
let status_sv;
let pid_string: String;
@ -189,4 +182,3 @@ impl StatusObj {
}
}

View file

@ -1,4 +1,9 @@
use std::io::ErrorKind;
use tokio::net::unix::pipe;
use tokio::runtime::Runtime;
pub fn make_pause_run(pr_int: u8) -> bool {
if pr_int == 0 {
return false // run
@ -72,3 +77,26 @@ pub fn return_u8_in_u64(table: Vec<u8>) -> u64 {
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
}