From f6de2c73595061ef898b1cfc5ba3f42e166aaa3e Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Wed, 24 Jun 2020 09:04:35 +0200 Subject: [PATCH] WorkerTask: add warnings and count them so that we have one level more between errors and OK Signed-off-by: Dominik Csapak --- src/server/worker_task.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/server/worker_task.rs b/src/server/worker_task.rs index f0ee9b64..72c594e6 100644 --- a/src/server/worker_task.rs +++ b/src/server/worker_task.rs @@ -213,6 +213,8 @@ pub fn upid_read_status(upid: &UPID) -> Result { Some(rest) => { if rest == "OK" { status = String::from(rest); + } else if rest.starts_with("WARNINGS: ") { + status = String::from(rest); } else if rest.starts_with("ERROR: ") { status = String::from(&rest[7..]); } @@ -234,7 +236,7 @@ pub struct TaskListInfo { pub upid_str: String, /// Task `(endtime, status)` if already finished /// - /// The `status` ise iether `unknown`, `OK`, or `ERROR: ...` + /// The `status` is either `unknown`, `OK`, `WARN`, or `ERROR: ...` pub state: Option<(i64, String)>, // endtime, status } @@ -385,6 +387,7 @@ impl std::fmt::Display for WorkerTask { struct WorkerTaskData { logger: FileLogger, progress: f64, // 0..1 + warn_count: u64, pub abort_listeners: Vec>, } @@ -424,6 +427,7 @@ impl WorkerTask { data: Mutex::new(WorkerTaskData { logger, progress: 0.0, + warn_count: 0, abort_listeners: vec![], }), }); @@ -507,8 +511,11 @@ impl WorkerTask { /// Log task result, remove task from running list pub fn log_result(&self, result: &Result<(), Error>) { + let warn_count = self.data.lock().unwrap().warn_count; if let Err(err) = result { self.log(&format!("TASK ERROR: {}", err)); + } else if warn_count > 0 { + self.log(format!("TASK WARNINGS: {}", warn_count)); } else { self.log("TASK OK"); } @@ -524,6 +531,13 @@ impl WorkerTask { data.logger.log(msg); } + /// Log a message as warning. + pub fn warn>(&self, msg: S) { + let mut data = self.data.lock().unwrap(); + data.logger.log(format!("WARN: {}", msg.as_ref())); + data.warn_count += 1; + } + /// Set progress indicator pub fn progress(&self, progress: f64) { if progress >= 0.0 && progress <= 1.0 {