From 9b5218edb966aa705bff99b57574abea098dceab Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 3 Oct 2021 11:15:07 +0200 Subject: executor: store start time and duration of tasks --- src/executor.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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, pub input_hash: InputHash, pub output: HashMap, + 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()?; -- cgit v1.2.3