summa_core/metrics/
cache_metrics.rs1use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
2use std::sync::Arc;
3
4use serde::ser::SerializeStruct;
5use serde::{Serialize, Serializer};
6
7#[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}