use crate::backpressure::BackpressureRegistry;
use obzenflow_core::{event::ChainEvent, journal::Journal, StageId};
use std::sync::Arc;
#[derive(Clone)]
pub struct MetricsInputs {
pub stage_data_journals: Vec<(StageId, Arc<dyn Journal<ChainEvent>>)>,
pub error_journals: Vec<(StageId, Arc<dyn Journal<ChainEvent>>)>,
pub backpressure_registry: Option<Arc<BackpressureRegistry>>,
}
impl MetricsInputs {
pub fn new(
stage_data_journals: Vec<(StageId, Arc<dyn Journal<ChainEvent>>)>,
error_journals: Vec<(StageId, Arc<dyn Journal<ChainEvent>>)>,
) -> Self {
Self {
stage_data_journals,
error_journals,
backpressure_registry: None,
}
}
pub fn with_backpressure_registry(mut self, registry: Arc<BackpressureRegistry>) -> Self {
self.backpressure_registry = Some(registry);
self
}
pub fn with_backpressure_registry_opt(
mut self,
registry: Option<Arc<BackpressureRegistry>>,
) -> Self {
self.backpressure_registry = registry;
self
}
pub fn data_journals(&self) -> &[(StageId, Arc<dyn Journal<ChainEvent>>)] {
&self.stage_data_journals
}
pub fn error_journals(&self) -> &[(StageId, Arc<dyn Journal<ChainEvent>>)] {
&self.error_journals
}
pub fn all_journals(&self) -> impl Iterator<Item = (StageId, &Arc<dyn Journal<ChainEvent>>)> {
self.stage_data_journals
.iter()
.map(|(id, journal)| (*id, journal))
.chain(
self.error_journals
.iter()
.map(|(id, journal)| (*id, journal)),
)
}
}