From 7e521a20c54d151912b4e1d916b4e9f1467c94ba Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 28 Oct 2024 14:53:11 +0300 Subject: [PATCH] global refactoring - gathering in modules and setting up for tests --- src/lib.rs | 2 ++ src/main.rs | 25 ++++++++++++------------- src/options.rs | 6 ++++++ src/{ => options}/config.rs | 7 ++++--- src/{ => options}/logger.rs | 2 +- src/{ => options}/signals.rs | 2 +- src/{ => options}/structs.rs | 0 src/utils.rs | 27 +++++++++++++++++---------- src/{ => utils}/files.rs | 4 ++-- src/{ => utils}/prcs.rs | 2 +- src/{ => utils}/services.rs | 4 ++-- tests/examples/dep-file | 0 tests/examples/run.sh | 0 tests/examples/settings.json | 33 +++++++++++++++++++++++++++++++++ tests/start_stop.rs | 6 ++++++ 15 files changed, 87 insertions(+), 33 deletions(-) create mode 100644 src/lib.rs create mode 100644 src/options.rs rename src/{ => options}/config.rs (98%) rename src/{ => options}/logger.rs (94%) rename src/{ => options}/signals.rs (98%) rename src/{ => options}/structs.rs (100%) rename src/{ => utils}/files.rs (97%) rename src/{ => utils}/prcs.rs (98%) rename src/{ => utils}/services.rs (97%) create mode 100644 tests/examples/dep-file create mode 100644 tests/examples/run.sh create mode 100644 tests/examples/settings.json create mode 100644 tests/start_stop.rs diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e804762 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,2 @@ +pub mod options; +pub mod utils; diff --git a/src/main.rs b/src/main.rs index 0ee2df5..6c6f02f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,19 +1,13 @@ -mod config; -mod files; -mod logger; -mod prcs; -mod services; -mod signals; -mod structs; +mod options; mod utils; -use config::*; use log::{error, info}; -use logger::setup_logger; -use signals::set_valid_destructor; +use options::config::*; +use options::logger::setup_logger; +use options::signals::set_valid_destructor; +use options::structs::*; use std::sync::Arc; use std::time::Duration; -use structs::*; use tokio::sync::mpsc; use utils::*; @@ -71,9 +65,9 @@ async fn main() { handler.push(tokio::spawn(async move { if set_valid_destructor(Arc::new(senders)).await.is_err() { error!("Linux signals handler creation failed. Terminating main thread..."); - return + return; } - // todo: rework this temp construction, use async/await in signals mod + tokio::time::sleep(Duration::from_millis(200)).await; info!("End of job. Terminating main thread..."); std::process::exit(0); @@ -89,3 +83,8 @@ async fn main() { } return; } + +// todo: integration tests +// todo: config pulling mechanism rework (socket) +// todo: tasks management after killing all processes +// todo: diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..d9f9b03 --- /dev/null +++ b/src/options.rs @@ -0,0 +1,6 @@ +// ! gathering optional items module + +pub mod config; +pub mod logger; +pub mod signals; +pub mod structs; diff --git a/src/config.rs b/src/options/config.rs similarity index 98% rename from src/config.rs rename to src/options/config.rs index b3b6132..faa25c2 100644 --- a/src/config.rs +++ b/src/options/config.rs @@ -1,11 +1,10 @@ -use crate::structs::*; +use crate::options::structs::*; use log::{error, info, warn}; use redis::{Client, Commands, Connection, RedisResult}; use std::os::unix::process::CommandExt; use std::process::Command; use std::sync::Arc; use std::{env, fs}; -use std::fmt::format; use tokio::time::Duration; const CONFIG_PATH: &str = "settings.json"; @@ -30,7 +29,9 @@ pub fn get_actual_config() -> Option { "Found local configuration, version - {}", &local_conf.date_of_creation ); - if let Some(remote_conf) = once_get_remote_configuration(&format!("redis://{}/", local_conf.config_server)) { + if let Some(remote_conf) = + once_get_remote_configuration(&format!("redis://{}/", local_conf.config_server)) + { return match config_comparing(&local_conf, &remote_conf) { ConfigActuality::Local => { info!("Local config is actual"); diff --git a/src/logger.rs b/src/options/logger.rs similarity index 94% rename from src/logger.rs rename to src/options/logger.rs index 9a1b821..986a5b4 100644 --- a/src/logger.rs +++ b/src/options/logger.rs @@ -13,7 +13,7 @@ use crate::utils::get_container_id; // file_writer: BufWriter, // } -pub fn setup_logger() -> Result<(), crate::structs::CustomError> { +pub fn setup_logger() -> Result<(), crate::options::structs::CustomError> { // if Command::new("sh").args(["-c", "mkdir logs"]).output().is_err() { // println!("Error: Cannot init logs directory"); // std::process::exit(1); diff --git a/src/signals.rs b/src/options/signals.rs similarity index 98% rename from src/signals.rs rename to src/options/signals.rs index aaae61a..56bb6a7 100644 --- a/src/signals.rs +++ b/src/options/signals.rs @@ -1,4 +1,4 @@ -use crate::structs::CustomError; +use crate::options::structs::CustomError; use std::sync::Arc; use tokio::io; use tokio::sync::mpsc; diff --git a/src/structs.rs b/src/options/structs.rs similarity index 100% rename from src/structs.rs rename to src/options/structs.rs diff --git a/src/utils.rs b/src/utils.rs index 63d454b..f486dfd 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,13 +1,17 @@ -use crate::files::create_watcher; -use crate::files::file_handler; -use crate::prcs::{ +pub mod files; +pub mod prcs; +pub mod services; + +use crate::options::structs::TrackingProcess; +use files::create_watcher; +use files::file_handler; +use inotify::Inotify; +use log::{error, warn}; +use prcs::{ freeze_process, is_active, is_frozen, restart_process, start_process, terminate_process, unfreeze_process, }; -use crate::services::service_handler; -use crate::structs::TrackingProcess; -use inotify::Inotify; -use log::{error, warn}; +use services::service_handler; use std::process::Command; use std::sync::Arc; use tokio::join; @@ -189,10 +193,13 @@ pub fn get_container_id() -> Option { } let id = String::from_utf8_lossy(&output.stdout).to_string(); if id.is_empty() { - return None + return None; } Some(String::from_utf8_lossy(&output.stdout).to_string()) - }, - Err(er) => { println!("failed( : {}", er); None }, + } + Err(er) => { + println!("failed( : {}", er); + None + } } } diff --git a/src/files.rs b/src/utils/files.rs similarity index 97% rename from src/files.rs rename to src/utils/files.rs index dfaae9e..cafbee0 100644 --- a/src/files.rs +++ b/src/utils/files.rs @@ -1,5 +1,5 @@ -use crate::prcs::{is_active, is_frozen}; -use crate::structs::{CustomError, Files}; +use crate::options::structs::{CustomError, Files}; +use crate::utils::prcs::{is_active, is_frozen}; use inotify::{EventMask, Inotify, WatchMask}; use log::error; use std::borrow::BorrowMut; diff --git a/src/prcs.rs b/src/utils/prcs.rs similarity index 98% rename from src/prcs.rs rename to src/utils/prcs.rs index a42b2ea..914c8b1 100644 --- a/src/prcs.rs +++ b/src/utils/prcs.rs @@ -1,4 +1,4 @@ -use crate::structs::CustomError; +use crate::options::structs::CustomError; use log::{error, warn}; use std::process::{Command, Output}; use std::sync::Arc; diff --git a/src/services.rs b/src/utils/services.rs similarity index 97% rename from src/services.rs rename to src/utils/services.rs index d4e5ebd..9a5a5be 100644 --- a/src/services.rs +++ b/src/utils/services.rs @@ -1,5 +1,5 @@ -use crate::prcs::{is_active, is_frozen}; -use crate::structs::{CustomError, Services}; +use crate::options::structs::{CustomError, Services}; +use crate::utils::prcs::{is_active, is_frozen}; use log::{error, warn}; use std::net::{TcpStream, ToSocketAddrs}; use std::sync::Arc; diff --git a/tests/examples/dep-file b/tests/examples/dep-file new file mode 100644 index 0000000..e69de29 diff --git a/tests/examples/run.sh b/tests/examples/run.sh new file mode 100644 index 0000000..e69de29 diff --git a/tests/examples/settings.json b/tests/examples/settings.json new file mode 100644 index 0000000..0ae9617 --- /dev/null +++ b/tests/examples/settings.json @@ -0,0 +1,33 @@ +{ + "dateOfCreation": "1721381809103", + "configServer" : "localhost", + "processes": [ + { + "name": "temp-process", + "path": "/home/vladislav/web/runner-rs/examples/", + "dependencies": { + "files": [ + { + "filename": "dep-file", + "src": "/home/vladislav/web/runner-rs/examples/", + "triggers": { + "onDelete": "hold", + "onChange": "stop" + } + } + ], + "services": [ + { + "hostname": "localhost", + "port": 8080, + "triggers": { + "wait": 10, + "delay": 2, + "onLost": "stop" + } + } + ] + } + } + ] +} \ No newline at end of file diff --git a/tests/start_stop.rs b/tests/start_stop.rs new file mode 100644 index 0000000..fc45295 --- /dev/null +++ b/tests/start_stop.rs @@ -0,0 +1,6 @@ +use runner_rs::*; + +#[test] +fn test() { + assert_eq!(2, 2); +}