Skip to content

Commit 6cb1337

Browse files
committed
Group resampled data by metrics and then by component ID
Earlier we were picking a random metric and sending its data to all formulas, which was incorrect. Signed-off-by: Sahas Subramanian <sahas.subramanian@proton.me>
1 parent bcf19c2 commit 6cb1337

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

src/logical_meter/logical_meter_actor.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ impl LogicalMeterActor {
205205
resamplers: &mut HashMap<(u64, Metric), ComponentDataResampler>,
206206
formulas: &mut HashMap<(String, Metric), LogicalMeterFormula>,
207207
) -> Result<(), Error> {
208-
let mut comp_data = HashMap::new();
208+
let mut resampled_metrics: HashMap<Metric, HashMap<u64, Option<f32>>> = HashMap::new();
209+
209210
for (_, resampler) in resamplers.iter_mut() {
210211
while let Ok(data) = resampler.receiver.try_recv() {
211212
self.push_to_resampler(resampler, data, resampler.metric);
@@ -217,14 +218,24 @@ impl LogicalMeterActor {
217218
resampled.len()
218219
)));
219220
}
220-
comp_data.insert(resampler.component_id, resampled[0].clone().value());
221+
resampled_metrics
222+
.entry(resampler.metric)
223+
.or_insert_with(|| HashMap::new())
224+
.insert(resampler.component_id, resampled[0].clone().value());
221225
}
222226

223227
let mut formulas_to_drop = vec![];
224228
for (formula_key, formula) in formulas.iter_mut() {
225-
let result = formula.formula.calculate(&comp_data).map_err(|e| {
226-
Error::formula_engine_error(format!("Failed to evaluate formula: {e}"))
227-
})?;
229+
let result = formula
230+
.formula
231+
.calculate(
232+
&resampled_metrics
233+
.entry(formula_key.1)
234+
.or_insert_with(|| HashMap::new()),
235+
)
236+
.map_err(|e| {
237+
Error::formula_engine_error(format!("Failed to evaluate formula: {e}"))
238+
})?;
228239

229240
if let Err(e) = formula.sender.send(Sample::new(self.next_ts, result)) {
230241
tracing::debug!(

0 commit comments

Comments
 (0)