use crate::Sample;
use crate::client::proto::common::metrics::Metric;
use chrono::TimeDelta;
use frequenz_microgrid_component_graph::ComponentGraphConfig;
use frequenz_resampling::ResamplingFunction;
use std::collections::HashMap;
pub struct LogicalMeterConfig {
pub(crate) resampling_interval: TimeDelta,
pub(crate) resampling_function: Option<ResamplingFunction<f32, Sample<f32>>>,
pub(crate) resampling_overrides: HashMap<Metric, ResamplingFunction<f32, Sample<f32>>>,
pub(crate) max_age_in_intervals: u32,
pub(crate) component_graph_config: ComponentGraphConfig,
}
impl LogicalMeterConfig {
pub fn new(resampling_interval: TimeDelta) -> Self {
Self {
resampling_interval,
resampling_function: None,
resampling_overrides: HashMap::new(),
max_age_in_intervals: 3,
component_graph_config: ComponentGraphConfig::default(),
}
}
pub fn with_default_resampling_function(
mut self,
function: ResamplingFunction<f32, Sample<f32>>,
) -> Self {
self.resampling_function = Some(function);
self
}
pub fn override_resampling_function<M: crate::metric::Metric>(
mut self,
function: ResamplingFunction<f32, Sample<f32>>,
) -> Self {
self.resampling_overrides.insert(M::METRIC, function);
self
}
pub fn with_max_age_in_intervals(mut self, max_age_in_intervals: u32) -> Self {
self.max_age_in_intervals = max_age_in_intervals.max(1);
self
}
pub fn with_component_graph_config(mut self, config: ComponentGraphConfig) -> Self {
self.component_graph_config = config;
self
}
}