use super::*;
#[derive(Debug, Clone)]
pub struct BottleneckAnalysis {
pub bottlenecks: Vec<Bottleneck>,
pub resource_utilization: ResourceUtilizationAnalysis,
pub dependency_analysis: DependencyAnalysis,
pub optimization_opportunities: Vec<OptimizationOpportunity>,
}
#[derive(Debug, Clone)]
pub struct Bottleneck {
pub bottleneck_type: BottleneckType,
pub location: String,
pub severity: f64,
pub resource: String,
pub mitigation_strategies: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BottleneckType {
CPU,
Memory,
IO,
Network,
Algorithm,
Synchronization,
Custom { description: String },
}
#[derive(Debug, Clone)]
pub struct ResourceUtilizationAnalysis {
pub cpu_breakdown: CpuUtilizationBreakdown,
pub memory_breakdown: MemoryUtilizationBreakdown,
pub io_breakdown: IoUtilizationBreakdown,
pub network_breakdown: NetworkUtilizationBreakdown,
}
#[derive(Debug, Clone)]
pub struct CpuUtilizationBreakdown {
pub user_time: f64,
pub system_time: f64,
pub idle_time: f64,
pub wait_time: f64,
pub per_core_utilization: Vec<f64>,
pub context_switches: f64,
}
impl Default for CpuUtilizationBreakdown {
fn default() -> Self {
Self {
user_time: 45.0,
system_time: 15.0,
idle_time: 35.0,
wait_time: 5.0,
per_core_utilization: vec![45.0, 48.0, 42.0, 50.0],
context_switches: 1500.0,
}
}
}
#[derive(Debug, Clone)]
pub struct MemoryUtilizationBreakdown {
pub used_memory: f64,
pub cached_memory: f64,
pub buffer_memory: f64,
pub available_memory: f64,
pub allocation_rate: f64,
pub gc_overhead: f64,
}
impl Default for MemoryUtilizationBreakdown {
fn default() -> Self {
Self {
used_memory: 65.0,
cached_memory: 20.0,
buffer_memory: 5.0,
available_memory: 10.0,
allocation_rate: 1024.0,
gc_overhead: 2.0,
}
}
}
#[derive(Debug, Clone)]
pub struct IoUtilizationBreakdown {
pub read_ops: f64,
pub write_ops: f64,
pub read_throughput: f64,
pub write_throughput: f64,
pub io_wait_time: f64,
pub queue_depth: f64,
}
impl Default for IoUtilizationBreakdown {
fn default() -> Self {
Self {
read_ops: 500.0,
write_ops: 200.0,
read_throughput: 100.0,
write_throughput: 50.0,
io_wait_time: 2.5,
queue_depth: 4.0,
}
}
}
#[derive(Debug, Clone)]
pub struct NetworkUtilizationBreakdown {
pub incoming_bandwidth: f64,
pub outgoing_bandwidth: f64,
pub packet_rate: f64,
pub latency: f64,
pub packet_loss: f64,
pub connection_count: usize,
}
impl Default for NetworkUtilizationBreakdown {
fn default() -> Self {
Self {
incoming_bandwidth: 150.0,
outgoing_bandwidth: 75.0,
packet_rate: 5000.0,
latency: 1.2,
packet_loss: 0.01,
connection_count: 25,
}
}
}
#[derive(Debug, Clone)]
pub struct DependencyAnalysis {
pub critical_path: Vec<String>,
pub dependency_graph: DependencyGraph,
pub parallelization_opportunities: Vec<ParallelizationOpportunity>,
pub serialization_bottlenecks: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct DependencyGraph {
pub nodes: Vec<DependencyNode>,
pub edges: Vec<DependencyEdge>,
pub properties: GraphProperties,
}
#[derive(Debug, Clone)]
pub struct DependencyNode {
pub id: String,
pub operation: String,
pub execution_time: Duration,
pub resource_requirements: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct DependencyEdge {
pub source: String,
pub target: String,
pub dependency_type: DependencyType,
pub data_size: usize,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DependencyType {
DataDependency,
ControlDependency,
ResourceDependency,
SynchronizationDependency,
}
#[derive(Debug, Clone)]
pub struct GraphProperties {
pub node_count: usize,
pub edge_count: usize,
pub density: f64,
pub avg_path_length: f64,
pub clustering_coefficient: f64,
}
impl Default for GraphProperties {
fn default() -> Self {
Self {
node_count: 0,
edge_count: 0,
density: 0.0,
avg_path_length: 0.0,
clustering_coefficient: 0.0,
}
}
}
#[derive(Debug, Clone)]
pub struct ParallelizationOpportunity {
pub operations: Vec<String>,
pub potential_speedup: f64,
pub strategy: ParallelizationStrategy,
pub complexity: ComplexityLevel,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ParallelizationStrategy {
TaskParallelism,
DataParallelism,
PipelineParallelism,
HybridParallelism,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ComplexityLevel {
Low,
Medium,
High,
VeryHigh,
}
#[derive(Debug, Clone)]
pub struct OptimizationOpportunity {
pub optimization_type: OptimizationType,
pub description: String,
pub potential_improvement: f64,
pub implementation_effort: EffortLevel,
pub risk_level: RiskLevel,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OptimizationType {
AlgorithmOptimization,
DataStructureOptimization,
MemoryOptimization,
CacheOptimization,
ParallelizationOptimization,
CompilerOptimization,
HardwareOptimization,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EffortLevel {
Minimal,
Low,
Medium,
High,
Extensive,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RiskLevel {
VeryLow,
Low,
Medium,
High,
VeryHigh,
}
#[derive(Debug, Clone)]
pub struct ComparativeAnalysis {
pub baseline_comparison: BaselineComparison,
pub algorithm_comparisons: Vec<AlgorithmComparison>,
pub regression_analysis: RegressionAnalysis,
pub ab_test_results: Vec<ABTestResult>,
}
#[derive(Debug, Clone)]
pub struct BaselineComparison {
pub current_performance: HashMap<String, f64>,
pub baseline_performance: HashMap<String, f64>,
pub performance_changes: HashMap<String, f64>,
pub statistical_significance: HashMap<String, bool>,
}
#[derive(Debug, Clone)]
pub struct AlgorithmComparison {
pub algorithms: Vec<String>,
pub performance_comparison: HashMap<String, Vec<f64>>,
pub statistical_tests: Vec<HypothesisTestResult>,
pub recommendation: String,
}
#[derive(Debug, Clone)]
pub struct RegressionAnalysis {
pub regression_detected: bool,
pub regression_severity: f64,
pub affected_metrics: Vec<String>,
pub potential_causes: Vec<String>,
pub timeline_analysis: TimelineAnalysis,
}
#[derive(Debug, Clone)]
pub struct TimelineAnalysis {
pub key_events: Vec<TimelineEvent>,
pub correlations: Vec<PerformanceCorrelation>,
pub change_points: Vec<ChangePoint>,
}
#[derive(Debug, Clone)]
pub struct TimelineEvent {
pub timestamp: Instant,
pub description: String,
pub event_type: EventType,
pub impact: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EventType {
CodeChange,
ConfigurationChange,
HardwareChange,
EnvironmentChange,
DataChange,
External,
}
#[derive(Debug, Clone)]
pub struct PerformanceCorrelation {
pub metric1: String,
pub metric2: String,
pub correlation: f64,
pub p_value: f64,
pub correlation_type: CorrelationType,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CorrelationType {
Positive,
Negative,
NonLinear,
Spurious,
}
#[derive(Debug, Clone)]
pub struct ChangePoint {
pub timestamp: Instant,
pub metric: String,
pub magnitude: f64,
pub confidence: f64,
pub change_type: ChangeType,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ChangeType {
LevelShift,
TrendChange,
VarianceChange,
DistributionChange,
}
#[derive(Debug, Clone)]
pub struct ABTestResult {
pub test_name: String,
pub variant_a: TestVariantResult,
pub variant_b: TestVariantResult,
pub statistical_significance: bool,
pub effect_size: f64,
pub confidence_interval: (f64, f64),
pub recommendation: String,
}
#[derive(Debug, Clone)]
pub struct TestVariantResult {
pub sample_size: usize,
pub metrics: HashMap<String, f64>,
pub std_devs: HashMap<String, f64>,
pub confidence_intervals: HashMap<String, (f64, f64)>,
}