impl TdgAnalyzerAst {
pub async fn get_scheduler_stats(&self) -> Option<crate::tdg::SchedulingStatistics> {
if let Some(scheduler) = &self.scheduler {
Some(scheduler.get_statistics().await)
} else {
None
}
}
#[must_use]
pub fn get_storage(&self) -> Option<&TieredStore> {
self.storage.as_ref()
}
pub async fn get_stored_score(&self, path: &Path) -> Result<Option<TdgScore>> {
if let Some(storage) = &self.storage {
let source = fs::read_to_string(path)?;
let content_hash = blake3::hash(source.as_bytes());
if let Some(hot_entry) = storage.get_hot(&content_hash) {
let language = Language::from_extension(path);
let score = TdgScore {
total: hot_entry.total_score,
grade: Grade::from_score(hot_entry.total_score),
language,
confidence: language.confidence(),
file_path: Some(path.to_path_buf()),
..Default::default()
};
return Ok(Some(score));
}
if let Some(record) = storage.retrieve_full(&content_hash).await? {
return Ok(Some(record.score));
}
}
Ok(None)
}
#[must_use]
pub fn get_storage_stats(&self) -> Option<crate::tdg::StorageStatistics> {
self.storage
.as_ref()
.map(super::storage::TieredStore::get_statistics)
}
pub async fn get_adaptive_stats(&self) -> Option<crate::tdg::PerformanceStatistics> {
if let Some(adaptive) = &self.adaptive_manager {
Some(adaptive.get_performance_stats().await)
} else {
None
}
}
pub async fn get_current_thresholds(&self) -> Option<crate::tdg::CurrentThresholds> {
if let Some(adaptive) = &self.adaptive_manager {
Some(adaptive.get_current_thresholds().await)
} else {
None
}
}
pub async fn reset_adaptive_thresholds(&self) -> Result<()> {
if let Some(adaptive) = &self.adaptive_manager {
adaptive.reset_to_defaults().await?;
}
Ok(())
}
pub async fn get_resource_stats(&self) -> Option<crate::tdg::ResourceEnforcementStats> {
if let Some(controller) = &self.resource_controller {
Some(controller.get_enforcement_stats().await)
} else {
None
}
}
pub async fn get_resource_usage(&self) -> Option<crate::tdg::ResourceUsage> {
if let Some(controller) = &self.resource_controller {
Some(controller.get_current_usage().await)
} else {
None
}
}
fn estimate_analysis_memory(&self, path: &Path) -> Result<f64> {
let metadata = fs::metadata(path)?;
let file_size_mb = metadata.len() as f64 / (1024.0 * 1024.0);
let base_memory = file_size_mb * 4.0;
let language = Language::from_extension(path);
let language_overhead = match language {
Language::Rust => 20.0, Language::Cpp | Language::C => 15.0, Language::Java => 12.0, Language::TypeScript => 10.0, Language::Python => 8.0, Language::JavaScript => 6.0, _ => 5.0, };
Ok((base_memory + language_overhead).max(5.0)) }
}