add custom errors

This commit is contained in:
rmanach
2023-04-18 22:34:49 +02:00
parent 6d26f1032d
commit a1900c7858
8 changed files with 60 additions and 15 deletions
+16 -6
View File
@@ -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
View File
@@ -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);
});
}