use super::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisConfig {
pub real_time_monitoring: bool,
pub monitoring_frequency: f64,
pub collection_level: MetricsLevel,
pub analysis_depth: AnalysisDepth,
pub comparative_analysis: bool,
pub performance_prediction: bool,
pub statistical_analysis: StatisticalAnalysisConfig,
pub visualization: VisualizationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MetricsLevel {
Basic,
Detailed,
Comprehensive,
Custom { metrics: Vec<String> },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AnalysisDepth {
Surface,
Deep,
Exhaustive,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalAnalysisConfig {
pub confidence_level: f64,
pub bootstrap_samples: usize,
pub hypothesis_testing: bool,
pub significance_level: f64,
pub outlier_detection: bool,
pub outlier_method: OutlierDetectionMethod,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum OutlierDetectionMethod {
ZScore { threshold: f64 },
IQR { multiplier: f64 },
IsolationForest,
LocalOutlierFactor,
StatisticalTests,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualizationConfig {
pub real_time_plots: bool,
pub plot_update_frequency: f64,
pub export_formats: Vec<ExportFormat>,
pub dashboard: DashboardConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExportFormat {
CSV,
JSON,
PNG,
SVG,
PDF,
HTML,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardConfig {
pub enable_web_dashboard: bool,
pub port: u16,
pub update_interval: f64,
pub enable_alerts: bool,
pub alert_thresholds: HashMap<String, f64>,
}
pub fn create_default_analysis_config() -> AnalysisConfig {
AnalysisConfig {
real_time_monitoring: true,
monitoring_frequency: 1.0, collection_level: MetricsLevel::Detailed,
analysis_depth: AnalysisDepth::Deep,
comparative_analysis: true,
performance_prediction: true,
statistical_analysis: StatisticalAnalysisConfig {
confidence_level: 0.95,
bootstrap_samples: 1000,
hypothesis_testing: true,
significance_level: 0.05,
outlier_detection: true,
outlier_method: OutlierDetectionMethod::IQR { multiplier: 1.5 },
},
visualization: VisualizationConfig {
real_time_plots: true,
plot_update_frequency: 0.5, export_formats: vec![ExportFormat::PNG, ExportFormat::CSV, ExportFormat::HTML],
dashboard: DashboardConfig {
enable_web_dashboard: true,
port: 8080,
update_interval: 2.0, enable_alerts: true,
alert_thresholds: {
let mut thresholds = HashMap::new();
thresholds.insert("cpu_utilization".to_string(), 80.0);
thresholds.insert("memory_utilization".to_string(), 85.0);
thresholds.insert("io_utilization".to_string(), 90.0);
thresholds
},
},
},
}
}
pub fn create_lightweight_config() -> AnalysisConfig {
let mut config = create_default_analysis_config();
config.collection_level = MetricsLevel::Basic;
config.analysis_depth = AnalysisDepth::Surface;
config.comparative_analysis = false;
config.performance_prediction = false;
config
}