OWNERSHIP FIX : prcs with Arc<str> (instead of &'_ str)

feature/configv2
prplV 2025-05-04 09:19:50 -04:00
parent 34979a035d
commit 281841b68a
2 changed files with 26 additions and 27 deletions

View File

@ -15,32 +15,32 @@ pub mod v2 {
use super::*; use super::*;
#[derive(Debug)] #[derive(Debug)]
pub struct ProcessesController<'a> { pub struct ProcessesController {
name: &'a str, name: Arc<str>,
bin: String, bin: String,
// obj: Arc<TrackingProcess>, // obj: Arc<TrackingProcess>,
state: ProcessState, state: ProcessState,
event_reader: MpscReciever<Events<'a>>, event_reader: MpscReciever<Events>,
negative_events: HashSet<&'a str>, negative_events: HashSet<Arc<str>>,
} }
impl<'a> PartialEq for ProcessesController<'a> { impl PartialEq for ProcessesController {
fn eq(&self, other: &Self) -> bool { fn eq(&self, other: &Self) -> bool {
self.bin == other.bin self.bin == other.bin
} }
} }
impl<'a> ProcessesController<'a> { impl ProcessesController {
pub fn new(name: &'a str, event_reader: MpscReciever<Events<'a>>) -> ProcessesController<'a> { pub fn new(name: &str, event_reader: MpscReciever<Events>) -> ProcessesController {
ProcessesController { ProcessesController {
name, name : Arc::from(name),
bin: String::new(), bin : String::new(),
state : ProcessState::Stopped, state : ProcessState::Stopped,
event_reader, event_reader,
negative_events : HashSet::new(), negative_events : HashSet::new(),
} }
} }
pub fn with_exe(mut self, bin: impl AsRef<Path>) -> ProcessesController<'a> { pub fn with_exe(mut self, bin: impl AsRef<Path>) -> ProcessesController {
self.bin = bin.as_ref().to_string_lossy().into_owned(); self.bin = bin.as_ref().to_string_lossy().into_owned();
self self
} }
@ -51,22 +51,22 @@ pub mod v2 {
info!("Event on {} `{}` for {}. Ignoring ...", dep_type, dep_name, self.name); info!("Event on {} `{}` for {}. Ignoring ...", dep_type, dep_name, self.name);
}, },
"stop" => { "stop" => {
if is_active(self.name).await { if is_active(&self.name).await {
info!("Event on {} `{}` for {}. Stopping ...", dep_type, dep_name, self.name); info!("Event on {} `{}` for {}. Stopping ...", dep_type, dep_name, self.name);
terminate_process(self.name).await; terminate_process(&self.name).await;
self.state = ProcessState::Stopped; self.state = ProcessState::Stopped;
} }
}, },
"hold" => { "hold" => {
if !is_frozen(self.name).await { if !is_frozen(&self.name).await {
info!("Event on {} `{}` for {}. Freezing ...", dep_type, dep_name, self.name); info!("Event on {} `{}` for {}. Freezing ...", dep_type, dep_name, self.name);
freeze_process(self.name).await; freeze_process(&self.name).await;
self.state = ProcessState::Holding; self.state = ProcessState::Holding;
} }
}, },
"restart" => { "restart" => {
info!("Event on {} `{}` for {}. Restarting ...", dep_type, dep_name, self.name); info!("Event on {} `{}` for {}. Restarting ...", dep_type, dep_name, self.name);
let _ = restart_process(self.name, &self.bin).await; let _ = restart_process(&self.name, &self.bin).await;
}, },
_ => error!("Impermissible trigger in file-trigger for {}. Ignoring event ...", self.name), _ => error!("Impermissible trigger in file-trigger for {}. Ignoring event ...", self.name),
} }
@ -75,13 +75,13 @@ pub mod v2 {
} }
#[async_trait] #[async_trait]
impl<'a> ProcessUnit<'a> for ProcessesController<'a> { impl ProcessUnit for ProcessesController {
async fn process(&'a mut self) { async fn process(&mut self) {
if self.negative_events.len() == 0 { if self.negative_events.len() == 0 {
match self.state { match self.state {
ProcessState::Holding => { ProcessState::Holding => {
info!("No negative dependecies events on {} process. Unfreezing ...", self.name); info!("No negative dependecies events on {} process. Unfreezing ...", self.name);
if let Err(er) = unfreeze_process(self.name).await { if let Err(er) = unfreeze_process(&self.name).await {
error!("Cannot unfreeze process {} : {}", self.name, er); error!("Cannot unfreeze process {} : {}", self.name, er);
} else { } else {
self.state = ProcessState::Pending; self.state = ProcessState::Pending;
@ -89,7 +89,7 @@ pub mod v2 {
}, },
ProcessState::Stopped => { ProcessState::Stopped => {
info!("No negative dependecies events on {} process. Starting ...", self.name); info!("No negative dependecies events on {} process. Starting ...", self.name);
if let Err(er) = start_process(self.name, &self.bin).await { if let Err(er) = start_process(&self.name, &self.bin).await {
error!("Cannot start process {} : {}", self.name, er); error!("Cannot start process {} : {}", self.name, er);
} else { } else {
self.state = ProcessState::Pending; self.state = ProcessState::Pending;
@ -101,8 +101,8 @@ pub mod v2 {
while let Ok(event) = self.event_reader.try_recv() { while let Ok(event) = self.event_reader.try_recv() {
match event { match event {
Events::Positive(target) => { Events::Positive(target) => {
if self.negative_events.contains(target) { if self.negative_events.contains(&target) {
self.negative_events.remove(target); self.negative_events.remove(&target);
} }
}, },
Events::Negative(event) => { Events::Negative(event) => {
@ -110,12 +110,12 @@ pub mod v2 {
NegativeOutcomes::FileWasChanged(target, dep_type, trigger) | NegativeOutcomes::FileWasChanged(target, dep_type, trigger) |
NegativeOutcomes::FileWasMovedOrDeleted(target, dep_type, trigger) | NegativeOutcomes::FileWasMovedOrDeleted(target, dep_type, trigger) |
NegativeOutcomes::ServiceIsUnreachable(target, dep_type, trigger) => { NegativeOutcomes::ServiceIsUnreachable(target, dep_type, trigger) => {
if !self.negative_events.contains(target) { if !self.negative_events.contains(&target) {
self.negative_events.insert(target); self.negative_events.insert(target.clone());
self.trigger_on( self.trigger_on(
target, &target,
trigger, &trigger,
dep_type dep_type
).await; ).await;
} }

View File

@ -1,5 +1,4 @@
use crate::options::structs::{CustomError, Services}; use crate::options::structs::CustomError;
use super::prcs::{is_active, is_frozen};
use log::{error, warn}; use log::{error, warn};
use std::net::{TcpStream, ToSocketAddrs}; use std::net::{TcpStream, ToSocketAddrs};
use std::sync::Arc; use std::sync::Arc;