summa_core/metrics/
cache_metrics.rs

1use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
2use std::sync::Arc;
3
4use serde::ser::SerializeStruct;
5use serde::{Serialize, Serializer};
6
7/// Hold metrics for caches used in `ChunkedCachingDirectory`
8#[derive(Clone, Default)]
9pub struct CacheMetrics {
10    pub in_cache_count: Arc<AtomicI64>,
11    pub in_cache_num_bytes: Arc<AtomicI64>,
12    pub hits_num_bytes: Arc<AtomicU64>,
13    pub hits_num_items: Arc<AtomicU64>,
14    pub misses_num_items: Arc<AtomicU64>,
15    pub requests_count: Arc<AtomicU64>,
16    pub requests_bytes: Arc<AtomicU64>,
17}
18
19impl Serialize for CacheMetrics {
20    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21    where
22        S: Serializer,
23    {
24        let mut state = serializer.serialize_struct("Color", 3)?;
25        state.serialize_field("in_cache_count", &self.in_cache_count.load(Ordering::Relaxed))?;
26        state.serialize_field("in_cache_num_bytes", &self.in_cache_num_bytes.load(Ordering::Relaxed))?;
27        state.serialize_field("hits_num_bytes", &self.hits_num_bytes.load(Ordering::Relaxed))?;
28        state.serialize_field("hits_num_items", &self.hits_num_items.load(Ordering::Relaxed))?;
29        state.serialize_field("misses_num_items", &self.misses_num_items.load(Ordering::Relaxed))?;
30        state.serialize_field("requests_count", &self.requests_count.load(Ordering::Relaxed))?;
31        state.serialize_field("requests_bytes", &self.requests_bytes.load(Ordering::Relaxed))?;
32        state.end()
33    }
34}