add custom errors
This commit is contained in:
+16
-6
@@ -1,11 +1,12 @@
|
||||
use std::sync::mpsc::Sender;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use crate::error::{HandlerError, RunnerError};
|
||||
use crate::message::Message;
|
||||
use crate::model::{Job, JobAction};
|
||||
|
||||
pub trait Handler {
|
||||
fn handle(&self, res: Result<Message, String>);
|
||||
fn handle(&self, res: Result<Message, RunnerError>) -> Result<(), HandlerError>;
|
||||
}
|
||||
|
||||
pub struct CheckHandler {}
|
||||
@@ -14,12 +15,19 @@ impl CheckHandler {
|
||||
pub fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
fn manage_message(&self, message: Message) -> Result<(), HandlerError> {
|
||||
match message {
|
||||
Message::CheckDeploy(_body) => Ok(()),
|
||||
Message::StopManager => Err(HandlerError::Unknown),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Handler for CheckHandler {
|
||||
fn handle(&self, res: Result<Message, String>) {
|
||||
fn handle(&self, res: Result<Message, RunnerError>) -> Result<(), HandlerError> {
|
||||
match res {
|
||||
Ok(_m) => (),
|
||||
Ok(m) => self.manage_message(m),
|
||||
Err(_e) => todo!(),
|
||||
}
|
||||
}
|
||||
@@ -34,7 +42,7 @@ impl DeployHandler {
|
||||
Self { sender }
|
||||
}
|
||||
|
||||
fn manage_message(&self, message: Message) {
|
||||
fn manage_message(&self, message: Message) -> Result<(), HandlerError> {
|
||||
match message {
|
||||
Message::CheckDeploy(body) => {
|
||||
let guard = self.sender.lock().unwrap();
|
||||
@@ -43,14 +51,16 @@ impl DeployHandler {
|
||||
if let Err(e) = guard.send(Job::new(id, JobAction::MegaportCheckDeploy)) {
|
||||
println!("[handler(deploy)] error: {}", e);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Message::StopManager => todo!(),
|
||||
Message::StopManager => Err(HandlerError::Unknown),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Handler for DeployHandler {
|
||||
fn handle(&self, res: Result<Message, String>) {
|
||||
fn handle(&self, res: Result<Message, RunnerError>) -> Result<(), HandlerError> {
|
||||
match res {
|
||||
Ok(m) => self.manage_message(m),
|
||||
Err(_e) => todo!(),
|
||||
|
||||
+11
-1
@@ -4,6 +4,7 @@ use std::sync::{mpsc::Receiver, Arc, Condvar, Mutex};
|
||||
use std::thread;
|
||||
|
||||
use super::handler::Handler;
|
||||
use crate::error::HandlerError;
|
||||
use crate::model::*;
|
||||
|
||||
pub struct Queue<T> {
|
||||
@@ -26,6 +27,7 @@ pub enum WorkerStatus {
|
||||
Pending,
|
||||
Running,
|
||||
Failed,
|
||||
Stopped,
|
||||
}
|
||||
|
||||
struct Worker {
|
||||
@@ -95,7 +97,15 @@ impl<T: Runner + Send + 'static> Manager<T> {
|
||||
drop(guard);
|
||||
|
||||
Manager::<T>::set_worker_status(&worker, WorkerStatus::Running);
|
||||
handler.handle(runner.run());
|
||||
if let Err(e) = handler.handle(runner.run()) {
|
||||
match e {
|
||||
HandlerError::Unknown => {
|
||||
Manager::<T>::set_worker_status(&worker, WorkerStatus::Failed);
|
||||
break;
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
Manager::<T>::set_worker_status(&worker, WorkerStatus::Pending);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user