pub mod enhanced_interface;
pub mod standard;
use self::standard::StandardMetricsProvider;
use crate::config::Config;
use crate::traits::MetricsProvider;
use std::sync::Arc;
pub use standard::StandardMetricsProvider as MetricsRegistry;
pub use crate::traits::{CounterTrait, GaugeTrait, HistogramStats, HistogramTrait};
#[allow(unused_variables)]
pub fn create_metrics_provider(config: &Config) -> Arc<dyn MetricsProvider> {
#[cfg(feature = "enhanced")]
{
if config.is_event_processor_enabled() {
if let Some(provider) = try_create_enhanced_provider() {
tracing::info!(
target: "metrics.init",
mode = "enhanced",
"Initializing enhanced metrics provider"
);
return provider;
}
}
}
tracing::info!(
target: "metrics.init",
mode = "standard",
"Initializing standard metrics provider"
);
Arc::new(StandardMetricsProvider::new())
}
#[cfg(feature = "enhanced")]
fn try_create_enhanced_provider() -> Option<Arc<dyn MetricsProvider>> {
None
}
pub struct Timer {
histogram: Arc<dyn HistogramTrait>,
start: std::time::Instant,
}
impl Timer {
pub fn new(histogram: Arc<dyn HistogramTrait>) -> Self {
Self {
histogram,
start: std::time::Instant::now(),
}
}
pub fn stop(self) {
let duration = self.start.elapsed();
self.histogram.observe(duration.as_secs_f64());
}
}
impl Drop for Timer {
fn drop(&mut self) {
let duration = self.start.elapsed();
self.histogram.observe(duration.as_secs_f64());
}
}