diff --git a/src/model/job.rs b/src/model/job.rs index f68a4ec..8a72713 100644 --- a/src/model/job.rs +++ b/src/model/job.rs @@ -28,46 +28,32 @@ impl Job { } } - pub fn set_status(&mut self, status: RunnerStatus) { - self.status = status; + fn deploy_megaport(&mut self) { + self.set_status(RunnerStatus::Running); + println!( + "[job({} - {:?} - {:?})] deploying megaport...", + self.id, self.action, self.status + ); + + let wait = time::Duration::from_millis(5); + thread::sleep(wait); + + self.set_status(RunnerStatus::Success); + println!( + "[job({} - {:?} - {:?})] megaport deployed", + self.id, self.action, self.status + ); } } impl Runner for Job { fn run(&mut self) { - self.set_status(RunnerStatus::Running); - match self.action { - JobAction::MegaportDeploy => { - println!( - "[job({} - {:?} - {:?})] deploying megaport...", - self.id, self.action, self.status - ); - } - JobAction::MegaportUndeploy => { - println!( - "[job({} - {:?} - {:?})] undeploying megaport...", - self.id, self.action, self.status - ); - } - JobAction::MegaportCheckDeploy => { - println!( - "[job({} - {:?} - {:?})] checking megaport deployement...", - self.id, self.action, self.status - ); - } - JobAction::MegaportCheckUndeploy => { - println!( - "[job({} - {:?} - {:?})] checking megaport undeployement...", - self.id, self.action, self.status - ); - } + JobAction::MegaportDeploy => self.deploy_megaport(), + JobAction::MegaportUndeploy => todo!(), + JobAction::MegaportCheckDeploy => todo!(), + JobAction::MegaportCheckUndeploy => todo!(), } - - let wait = time::Duration::from_millis(1); - thread::sleep(wait); - - self.set_status(RunnerStatus::Success); } fn set_status(&mut self, status: RunnerStatus) { diff --git a/src/worker/worker.rs b/src/worker/worker.rs index 4df8605..1bfe06d 100644 --- a/src/worker/worker.rs +++ b/src/worker/worker.rs @@ -18,7 +18,7 @@ impl Queue { } } -#[derive(Copy, Clone, PartialEq)] +#[derive(Debug, Copy, Clone, PartialEq)] #[allow(dead_code)] pub enum WorkerStatus { Pending, @@ -27,12 +27,16 @@ pub enum WorkerStatus { } struct Worker { + id: u32, + manager: String, status: WorkerStatus, } impl Worker { - fn new() -> Self { + fn new(id: u32, manager: String) -> Self { Self { + id: id, + manager: manager, status: WorkerStatus::Pending, } } @@ -64,12 +68,11 @@ impl Manager { pub fn launch_workers(&mut self, nb_workers: u32) { for i in 0..nb_workers { - let shared_worker = Arc::new(Mutex::new(Worker::new())); + let shared_worker = Arc::new(Mutex::new(Worker::new(i, self.name.clone()))); self.workers.push(shared_worker.clone()); let worker = shared_worker.clone(); let queue = self.queue.clone(); - let name = self.name.clone(); thread::spawn(move || loop { let mut guard = queue.content.lock().unwrap(); @@ -84,17 +87,9 @@ impl Manager { drop(guard); - let mut guard = worker.lock().unwrap(); - guard.set_status(WorkerStatus::Running); - drop(guard); - - println!("[worker({} - {})] launching job...", name, i); + Manager::::set_worker_status(&worker, WorkerStatus::Running); runner.run(); - println!("[worker({} - {})] job done", name, i); - - let mut guard = worker.lock().unwrap(); - guard.set_status(WorkerStatus::Pending); - drop(guard); + Manager::::set_worker_status(&worker, WorkerStatus::Pending); }); } } @@ -114,4 +109,14 @@ impl Manager { } true } + + fn set_worker_status(worker: &Arc>, status: WorkerStatus) { + let mut guard = worker.lock().unwrap(); + guard.set_status(status); + + println!( + "[worker({} - {})] status: {:?}", + guard.manager, guard.id, guard.status + ); + } }