1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
use super::{Metric, TimedEvent}; use crate::io::provider::{StreamType, Timestamp}; use serde::{Deserialize, Serialize}; #[derive(Debug)] pub struct CounterMetric; impl Metric for CounterMetric { type State = CounterState; type Event = CounterEvent; fn stream_type() -> StreamType { StreamType::from("rillrate.counter.v0") } fn apply(state: &mut Self::State, event: TimedEvent<Self::Event>) { match event.event { CounterEvent::Increment(delta) => { state.timestamp = Some(event.timestamp); state.value += delta; } } } } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CounterState { pub timestamp: Option<Timestamp>, pub value: f64, } #[allow(clippy::new_without_default)] impl CounterState { pub fn new() -> Self { Self { timestamp: None, value: 0.0, } } } pub type CounterDelta = Vec<TimedEvent<CounterEvent>>; #[derive(Debug, Clone, Serialize, Deserialize)] pub enum CounterEvent { Increment(f64), }