use crate::cache::{CacheManager, CacheStats};
use crate::error::{QuickDbError, QuickDbResult};
use crate::id_generator::{IdGenerator, MongoAutoIncrementGenerator};
use crate::model::ModelMeta;
use crate::pool::{ConnectionPool, ExtendedPoolConfig, PooledConnection};
use crate::types::{DatabaseConfig, DatabaseType, IdType};
use dashmap::DashMap;
use rat_logger::{debug, error, info, warn};
use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::RwLock;
use tokio::time::{Duration, interval};
#[derive(Debug)]
pub struct PoolManager {
pub(crate) pools: Arc<DashMap<String, Arc<ConnectionPool>>>,
pub(crate) default_alias: Arc<RwLock<Option<String>>>,
pub(crate) cleanup_handle: Arc<RwLock<Option<tokio::task::JoinHandle<()>>>>,
pub(crate) id_generators: Arc<DashMap<String, Arc<IdGenerator>>>,
pub(crate) mongo_auto_increment_generators:
Arc<DashMap<String, Arc<MongoAutoIncrementGenerator>>>,
pub(crate) cache_managers: Arc<DashMap<String, Arc<CacheManager>>>,
pub(crate) model_registry: Arc<DashMap<String, ModelMeta>>,
pub(crate) index_creation_locks: Arc<tokio::sync::Mutex<HashMap<String, HashMap<String, ()>>>>,
}
impl PoolManager {
pub fn new() -> Self {
info!("创建连接池管理器");
Self {
pools: Arc::new(DashMap::new()),
default_alias: Arc::new(RwLock::new(None)),
cleanup_handle: Arc::new(RwLock::new(None)),
id_generators: Arc::new(DashMap::new()),
mongo_auto_increment_generators: Arc::new(DashMap::new()),
cache_managers: Arc::new(DashMap::new()),
model_registry: Arc::new(DashMap::new()),
index_creation_locks: Arc::new(tokio::sync::Mutex::new(HashMap::new())),
}
}
}