datacake_node/
statistics.rs

1use std::ops::Deref;
2use std::sync::atomic::{AtomicU64, Ordering};
3use std::sync::Arc;
4
5pub type Counter = AtomicU64;
6
7#[derive(Debug, Clone, Default)]
8/// Live metrics around the cluster system.
9pub struct ClusterStatistics(Arc<ClusterStatisticsInner>);
10
11impl Deref for ClusterStatistics {
12    type Target = ClusterStatisticsInner;
13
14    fn deref(&self) -> &Self::Target {
15        &self.0
16    }
17}
18
19#[derive(Debug, Default)]
20pub struct ClusterStatisticsInner {
21    /// The number of currently alive members the node is aware of.
22    pub(crate) num_live_members: Counter,
23    /// The number of members the node currently believes is dead.
24    pub(crate) num_dead_members: Counter,
25    /// The number of data centers/availability zones the cluster belongs to.
26    pub(crate) num_data_centers: Counter,
27}
28
29impl ClusterStatisticsInner {
30    /// The number of currently alive members the node is aware of.
31    pub fn num_live_members(&self) -> u64 {
32        self.num_live_members.load(Ordering::Relaxed)
33    }
34
35    /// The number of members the node currently believes is dead.
36    pub fn num_dead_members(&self) -> u64 {
37        self.num_dead_members.load(Ordering::Relaxed)
38    }
39
40    /// The number of data centers/availability zones the cluster belongs to.
41    pub fn num_data_centers(&self) -> u64 {
42        self.num_data_centers.load(Ordering::Relaxed)
43    }
44}