use std::collections::HashMap;
use std::time::SystemTime;
use serde::{Deserialize, Serialize};
use super::regression_detector::RegressionDetectionConfig;
use super::baseline_manager::BaselineStatistics;
use super::trend_analyzer::TrendAnalysis;
use super::anomaly_detector::PerformanceAnomaly;
use super::analysis_support::{OverallAssessment, ActionRecommendation, SuspectedCause, ImprovementCause};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegressionDetectionResult {
pub timestamp: SystemTime,
pub config: RegressionDetectionConfig,
pub regressions: Vec<PerformanceRegression>,
pub improvements: Vec<PerformanceImprovement>,
pub trends: HashMap<String, TrendAnalysis>,
pub anomalies: Vec<PerformanceAnomaly>,
pub overall_assessment: OverallAssessment,
pub recommendations: Vec<ActionRecommendation>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceRegression {
pub test_id: String,
pub implementation: String,
pub degradation_percent: f64,
pub statistical_significance: StatisticalSignificance,
pub severity: RegressionSeverity,
pub current_vs_baseline: PerformanceComparison,
pub suspected_causes: Vec<SuspectedCause>,
pub first_detected: SystemTime,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceImprovement {
pub test_id: String,
pub implementation: String,
pub improvement_percent: f64,
pub statistical_significance: StatisticalSignificance,
pub current_vs_baseline: PerformanceComparison,
pub likely_causes: Vec<ImprovementCause>,
pub first_detected: SystemTime,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalSignificance {
pub p_value: f64,
pub is_significant: bool,
pub test_method: String,
pub effect_size: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RegressionSeverity {
Minor, Moderate, Major, Critical, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceComparison {
pub baseline: BaselineStatistics,
pub current_values: Vec<f64>,
pub current_statistics: BaselineStatistics,
pub difference: DifferenceMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DifferenceMetrics {
pub mean_difference: f64,
pub percent_change: f64,
pub standard_error: f64,
pub effect_size: f64,
pub confidence_interval: (f64, f64),
}