diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-03 11:15:07 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-03 11:17:40 +0200 |
commit | 9b5218edb966aa705bff99b57574abea098dceab (patch) | |
tree | 3f52d20303188244956ffe8bb4e4fc091474cf65 | |
parent | 574be70b518e44f3ef989ad425e0ac5ec4d22c67 (diff) | |
download | rebel-9b5218edb966aa705bff99b57574abea098dceab.tar rebel-9b5218edb966aa705bff99b57574abea098dceab.zip |
executor: store start time and duration of tasks
-rw-r--r-- | src/executor.rs | 25 |
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()?; |