ih_muse_core/buffer/
metric_buffer.rs1use std::collections::HashMap;
4
5use tokio::sync::Mutex;
6
7use ih_muse_proto::{LocalElementId, MetricValue};
8
9pub struct MetricBuffer {
10 buffer: Mutex<HashMap<LocalElementId, HashMap<String, MetricValue>>>,
11}
12
13impl Default for MetricBuffer {
14 fn default() -> Self {
15 Self::new()
16 }
17}
18
19impl MetricBuffer {
20 pub fn new() -> Self {
21 Self {
22 buffer: Mutex::new(HashMap::new()),
23 }
24 }
25
26 pub async fn add_metric(
28 &self,
29 local_elem_id: LocalElementId,
30 metric_code: String,
31 value: MetricValue,
32 ) {
33 let mut buffer = self.buffer.lock().await;
34 buffer
35 .entry(local_elem_id)
36 .or_insert_with(HashMap::new)
37 .insert(metric_code, value);
38 }
39
40 pub async fn get_and_clear(&self) -> HashMap<LocalElementId, HashMap<String, MetricValue>> {
42 let mut buffer = self.buffer.lock().await;
43 let data = buffer.clone();
44 buffer.clear();
45 data
46 }
47}