use std::sync::Arc;
use parking_lot::Mutex;
use super::{
command_stats::CommandStats,
garnet_session_metrics::GarnetSessionMetrics,
latency::{
garnet_latency_metrics::GarnetLatencyMetrics, latency_metrics_type::LatencyMetricsType,
},
};
pub struct GarnetServerMetrics {
pub total_connections_received: i64,
pub total_connections_disposed: i64,
pub total_connections_active: i64,
pub instantaneous_cmd_per_sec: f64,
pub instantaneous_net_input_tpt: f64,
pub instantaneous_net_output_tpt: f64,
pub global_session_metrics: Option<GarnetSessionMetrics>,
pub history_session_metrics: Option<GarnetSessionMetrics>,
pub global_latency_metrics: Option<Arc<Mutex<GarnetLatencyMetrics>>>,
pub global_command_stats: Option<CommandStats>,
pub history_command_stats: Option<CommandStats>,
}
impl GarnetServerMetrics {
pub const BYTE_UNIT: i64 = 1 << 10;
pub fn new(track_stats: bool, track_latency: bool, track_command_stats: bool) -> Self {
Self {
total_connections_received: 0,
total_connections_disposed: 0,
total_connections_active: 0,
instantaneous_cmd_per_sec: 0.0,
instantaneous_net_input_tpt: 0.0,
instantaneous_net_output_tpt: 0.0,
global_session_metrics: track_stats.then(GarnetSessionMetrics::default),
history_session_metrics: track_stats.then(GarnetSessionMetrics::default),
global_latency_metrics: track_latency.then(|| {
Arc::new(Mutex::new(GarnetLatencyMetrics::new(
GarnetLatencyMetrics::DEFAULT_LATENCY_TYPES,
)))
}),
global_command_stats: track_command_stats.then(CommandStats::new),
history_command_stats: track_command_stats.then(CommandStats::new),
}
}
pub fn dispose(&mut self) {
self.global_latency_metrics = None;
}
}
pub type DefaultLatencyTypes = [LatencyMetricsType; 6];