summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-03 11:15:07 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-03 11:17:40 +0200
commit9b5218edb966aa705bff99b57574abea098dceab (patch)
tree3f52d20303188244956ffe8bb4e4fc091474cf65
parent574be70b518e44f3ef989ad425e0ac5ec4d22c67 (diff)
downloadrebel-9b5218edb966aa705bff99b57574abea098dceab.tar
rebel-9b5218edb966aa705bff99b57574abea098dceab.zip
executor: store start time and duration of tasks
-rw-r--r--src/executor.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/executor.rs b/src/executor.rs
index 06b3610..66b4af3 100644
--- a/src/executor.rs
+++ b/src/executor.rs
@@ -1,4 +1,8 @@
-use std::collections::{HashMap, HashSet};
+use std::{
+ collections::{HashMap, HashSet},
+ convert::TryInto,
+ time::{Instant, SystemTime, UNIX_EPOCH},
+};
use indoc::indoc;
use serde::{Deserialize, Serialize};
@@ -25,6 +29,8 @@ struct TaskMeta {
pub depends: HashMap<DependencyHash, Dependency>,
pub input_hash: InputHash,
pub output: HashMap<String, ArchiveHash>,
+ pub start_time: u64,
+ pub duration: u64,
}
impl TaskMeta {
@@ -49,6 +55,15 @@ impl TaskMeta {
}
}
+fn epoch_msecs() -> u64 {
+ SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .unwrap()
+ .as_millis()
+ .try_into()
+ .unwrap()
+}
+
#[derive(Debug)]
pub struct Executor<'ctx> {
ctx: &'ctx Context,
@@ -285,8 +300,14 @@ impl<'ctx> Executor<'ctx> {
input_hash,
};
+ let start_time = epoch_msecs();
+ let start_instant = Instant::now();
+
let output = runner.run(&task)?;
+ let end_instant = Instant::now();
+ let duration = end_instant.duration_since(start_instant);
+
let meta = TaskMeta {
id: task_ref.id.clone(),
args: task_ref
@@ -298,6 +319,8 @@ impl<'ctx> Executor<'ctx> {
depends: task.input.depends,
input_hash,
output,
+ start_time,
+ duration: duration.as_millis().try_into().unwrap(),
};
meta.save()?;