use std::time::Duration;
use crate::store::Store;
#[derive(Debug, Clone)]
pub struct KevyInfo {
pub keys: usize,
pub used_memory: u64,
pub aof_bytes: u64,
pub expire_pending: usize,
pub evictions: u64,
pub expired_keys: u64,
}
impl Store {
pub fn info(&self) -> KevyInfo {
let g = self.lock();
KevyInfo {
keys: g.store.dbsize(),
used_memory: g.store.used_memory(),
aof_bytes: g.aof.as_ref().map_or(0, |a| a.size_bytes()),
expire_pending: g.store.ttl_pending_count(),
evictions: g.store.evictions_total(),
expired_keys: g.store.expired_keys_total(),
}
}
pub fn expire_pending_count(&self) -> usize {
self.lock().store.ttl_pending_count()
}
pub fn ttl(&self, key: &[u8]) -> Option<Duration> {
let ms = self.lock().store.pttl(key);
if ms < 0 {
None
} else {
Some(Duration::from_millis(ms as u64))
}
}
}