impl TdgAnalyzerAst {
pub fn new() -> Result<Self> {
Ok(Self {
config: TdgConfig::default(),
storage: None,
scheduler: None,
adaptive_manager: None,
resource_controller: None,
git_context: None,
})
}
pub fn with_config(config: TdgConfig) -> Result<Self> {
Ok(Self {
config,
storage: None,
scheduler: None,
adaptive_manager: None,
resource_controller: None,
git_context: None,
})
}
pub fn with_storage(config: TdgConfig) -> Result<Self> {
let storage = TieredStorageFactory::create_default()?;
let scheduler = SchedulerFactory::create_balanced();
let adaptive_manager = AdaptiveThresholdFactory::create_default();
let resource_controller = ResourceControllerFactory::create_default();
Ok(Self {
config,
storage: Some(storage),
scheduler: Some(scheduler),
adaptive_manager: Some(adaptive_manager),
resource_controller: Some(resource_controller),
git_context: None,
})
}
#[cfg(test)]
pub fn with_in_memory_storage(config: TdgConfig) -> Self {
let storage = TieredStorageFactory::create_in_memory();
let scheduler = SchedulerFactory::create_balanced();
let adaptive_manager = AdaptiveThresholdFactory::create_default();
let resource_controller = ResourceControllerFactory::create_default();
Self {
config,
storage: Some(storage),
scheduler: Some(scheduler),
adaptive_manager: Some(adaptive_manager),
resource_controller: Some(resource_controller),
git_context: None,
}
}
pub async fn with_full_resource_management(config: TdgConfig) -> Result<Self> {
let storage = TieredStorageFactory::create_default()?;
let scheduler = SchedulerFactory::create_background_optimized();
let adaptive_manager = AdaptiveThresholdFactory::create_prod_optimized();
let resource_controller = ResourceControllerFactory::create_prod_optimized();
resource_controller.start_monitoring().await?;
Ok(Self {
config,
storage: Some(storage),
scheduler: Some(scheduler),
adaptive_manager: Some(adaptive_manager),
resource_controller: Some(resource_controller),
git_context: None,
})
}
pub fn set_git_context(&mut self, git_context: Option<crate::models::git_context::GitContext>) {
self.git_context = git_context;
}
pub fn get_git_context(&self) -> Option<&crate::models::git_context::GitContext> {
self.git_context.as_ref()
}
pub fn storage(&self) -> Option<&TieredStore> {
self.storage.as_ref()
}
}