use super::StorageManager;
use crate::Result;
use crate::types::{NamespaceStats, StorageConfig};
use std::sync::atomic::Ordering;
impl StorageManager {
pub async fn get_namespace_stats(&self, name: &str) -> Result<Option<NamespaceStats>> {
self.ensure_initialized().await?;
let ns = self.namespace(name).await?;
let metadata = ns.get_metadata().await;
Ok(Some(NamespaceStats {
name: metadata.name.clone(),
key_count: metadata.key_count(),
total_size: metadata.total_size(),
}))
}
pub async fn get_all_namespace_stats(&self) -> Result<Vec<NamespaceStats>> {
self.ensure_initialized().await?;
let namespaces = self.namespaces.read().await;
let mut stats = Vec::new();
for namespace in namespaces.values() {
let metadata = namespace.get_metadata().await;
stats.push(NamespaceStats {
name: metadata.name.clone(),
key_count: metadata.key_count(),
total_size: metadata.total_size(),
});
}
Ok(stats)
}
pub async fn get_namespace_count(&self) -> Result<usize> {
self.ensure_initialized().await?;
let namespaces = self.namespaces.read().await;
Ok(namespaces.len())
}
pub async fn get_total_key_count(&self) -> Result<usize> {
self.ensure_initialized().await?;
let namespaces = self.namespaces.read().await;
let mut total = 0;
for namespace in namespaces.values() {
let metadata = namespace.get_metadata().await;
total += metadata.key_count();
}
Ok(total)
}
pub async fn get_config(&self) -> StorageConfig {
self.config.read().await.clone()
}
pub async fn update_config(&self, config: StorageConfig) {
*self.config.write().await = config;
}
pub fn has_persistence(&self) -> bool {
self.persistence.is_some()
}
pub fn is_initialized(&self) -> bool {
self.initialized.load(Ordering::Relaxed)
}
pub(super) async fn ensure_initialized(&self) -> Result<()> {
if !self.is_initialized() {
return Err(crate::RkvsError::NotInitialized);
}
Ok(())
}
}