pub mod anomaly;
pub mod causal;
pub mod correlation;
pub mod distribution;
pub mod statistical;
pub mod time_series;
use super::config::AdvancedAnalyticsConfig;
use super::results::*;
use crate::DeviceResult;
pub struct AdvancedAnalyticsEngine {
config: AdvancedAnalyticsConfig,
statistical_analyzer: statistical::StatisticalAnalyzer,
correlation_analyzer: correlation::CorrelationAnalyzer,
time_series_analyzer: Option<time_series::TimeSeriesAnalyzer>,
anomaly_detector: Option<anomaly::AnomalyDetector>,
distribution_analyzer: distribution::DistributionAnalyzer,
causal_analyzer: Option<causal::CausalAnalyzer>,
}
impl AdvancedAnalyticsEngine {
pub fn new(config: &AdvancedAnalyticsConfig) -> Self {
Self {
config: config.clone(),
statistical_analyzer: statistical::StatisticalAnalyzer::new(),
correlation_analyzer: correlation::CorrelationAnalyzer::new(),
time_series_analyzer: if config.enable_time_series {
Some(time_series::TimeSeriesAnalyzer::new())
} else {
None
},
anomaly_detector: if config.enable_anomaly_detection {
Some(anomaly::AnomalyDetector::new())
} else {
None
},
distribution_analyzer: distribution::DistributionAnalyzer::new(),
causal_analyzer: if config.enable_causal_inference {
Some(causal::CausalAnalyzer::new())
} else {
None
},
}
}
pub async fn analyze(
&self,
measurement_history: &[MeasurementEvent],
execution_stats: &ExecutionStats,
) -> DeviceResult<AdvancedAnalyticsResults> {
let latencies: Vec<f64> = measurement_history.iter().map(|e| e.latency).collect();
let confidences: Vec<f64> = measurement_history.iter().map(|e| e.confidence).collect();
let timestamps: Vec<f64> = measurement_history.iter().map(|e| e.timestamp).collect();
let statistical_analysis = self
.statistical_analyzer
.analyze(&latencies, &confidences)?;
let correlation_analysis =
self.correlation_analyzer
.analyze(&latencies, &confidences, ×tamps)?;
let time_series_analysis = if let Some(ref analyzer) = self.time_series_analyzer {
Some(analyzer.analyze(&latencies, ×tamps)?)
} else {
None
};
let anomaly_detection = if let Some(ref detector) = self.anomaly_detector {
Some(detector.detect(&latencies, &confidences)?)
} else {
None
};
let distribution_analysis = self.distribution_analyzer.analyze(&latencies)?;
let causal_analysis = if let Some(ref analyzer) = self.causal_analyzer {
Some(analyzer.analyze(&latencies, &confidences, ×tamps)?)
} else {
None
};
Ok(AdvancedAnalyticsResults {
statistical_analysis,
correlation_analysis,
time_series_analysis,
anomaly_detection,
distribution_analysis,
causal_analysis,
})
}
}