From e52348a9ecfaca6b270a5a6993205d7040474dcc Mon Sep 17 00:00:00 2001 From: asonix Date: Tue, 21 Apr 2020 16:08:19 -0500 Subject: [PATCH] Print job duration --- jobs-core/Cargo.toml | 2 +- jobs-core/src/processor_map.rs | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/jobs-core/Cargo.toml b/jobs-core/Cargo.toml index c4ed378..2c62f20 100644 --- a/jobs-core/Cargo.toml +++ b/jobs-core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "background-jobs-core" description = "Core types for implementing an asynchronous jobs processor" -version = "0.8.0-alpha.0" +version = "0.8.0-alpha.1" license-file = "../LICENSE" authors = ["asonix "] repository = "https://git.asonix.dog/Aardwolf/background-jobs" diff --git a/jobs-core/src/processor_map.rs b/jobs-core/src/processor_map.rs index 52ad483..33675f8 100644 --- a/jobs-core/src/processor_map.rs +++ b/jobs-core/src/processor_map.rs @@ -1,4 +1,5 @@ use crate::{Job, JobError, JobInfo, ReturnJobInfo}; +use chrono::Utc; use log::{error, info}; use serde_json::Value; use std::{collections::HashMap, future::Future, pin::Pin, sync::Arc}; @@ -112,13 +113,25 @@ async fn process(process_fn: &ProcessFn, state: S, job: JobInfo) -> Return let id = job.id(); let name = job.name().to_owned(); - match process_fn(args, state).await { + let start = Utc::now(); + let res = process_fn(args, state).await; + let end = Utc::now(); + + let duration = end - start; + let microseconds = duration.num_microseconds(); + let seconds: f64 = if let Some(m) = microseconds { + m as f64 / 1_000_000_f64 + } else { + 0_f64 + }; + + match res { Ok(_) => { - info!("Job {} completed, {}", id, name); + info!("Job {} {} completed {:.6}", id, name, seconds); ReturnJobInfo::pass(id) } Err(e) => { - info!("Job {} errored, {}, {}", id, name, e); + info!("Job {} {} errored {} {:.6}", id, name, e, seconds); ReturnJobInfo::fail(id) } }