From feddb5d52a75f698ee58ce548ccd9cda0b04ad76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Wed, 19 Feb 2025 08:11:28 +0100 Subject: [PATCH] fix: metric bucket start time should be reset everytime it is sent (#219) * fix: metric bucket start time should be reset everytime it is sent * chore: add test to cover that time is correctly advanced by metrics --------- Co-authored-by: Simon Hornby --- unleash-yggdrasil/src/lib.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/unleash-yggdrasil/src/lib.rs b/unleash-yggdrasil/src/lib.rs index d2bbc5e..f809bc8 100644 --- a/unleash-yggdrasil/src/lib.rs +++ b/unleash-yggdrasil/src/lib.rs @@ -225,6 +225,7 @@ pub struct EngineState { compiled_state: Option, previous_state: ClientFeatures, toggle_metrics: DashMap, + toggle_metrics_start: DateTime, pub started: DateTime, } @@ -233,6 +234,7 @@ impl Default for EngineState { Self { compiled_state: Default::default(), toggle_metrics: Default::default(), + toggle_metrics_start: Utc::now(), previous_state: Default::default(), started: Utc::now(), } @@ -354,9 +356,11 @@ impl EngineState { .collect(); if !metrics.is_empty() { + let start = self.toggle_metrics_start; + self.toggle_metrics_start = Utc::now(); Some(MetricBucket { toggles: metrics, - start: self.started, + start, stop: Utc::now(), }) } else { @@ -1083,6 +1087,27 @@ mod test { assert!(metrics.is_none()); } + #[test] + pub fn getting_metrics_restarts_time() { + let compiled_state = HashMap::new(); + let mut state = EngineState { + compiled_state: Some(compiled_state), + ..Default::default() + }; + + state.count_toggle("some-test-toggle", true); + + let metrics = state.get_metrics().unwrap(); + let start = metrics.start; + std::thread::sleep(std::time::Duration::from_millis(1)); + + state.count_toggle("some-test-toggle", true); + let metrics = state.get_metrics().unwrap(); + let new_start = metrics.start; + + assert!(new_start > start); + } + #[test] pub fn unknown_features_and_variants_get_metrics() { let mut compiled_state = HashMap::new();