use std::time::Duration;
#[derive(Debug, Clone)]
pub struct ScirS2IntegrationConfig {
pub enable_realtime_sync: bool,
pub sync_interval: Duration,
pub enable_event_callbacks: bool,
pub track_allocation_patterns: bool,
pub enable_optimization_suggestions: bool,
pub advanced_config: AdvancedIntegrationConfig,
}
#[derive(Debug, Clone)]
pub struct AdvancedIntegrationConfig {
pub enable_predictive_modeling: bool,
pub model_update_frequency: Duration,
pub enable_automated_optimization: bool,
pub optimization_aggressiveness: f64,
pub enable_health_monitoring: bool,
pub health_check_interval: Duration,
pub enable_performance_profiling: bool,
pub profiling_detail_level: ProfilingDetailLevel,
}
#[derive(Debug, Clone)]
pub enum ProfilingDetailLevel {
Basic,
Detailed,
Comprehensive,
Debug,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum PerformanceTier {
Critical,
Low,
Medium,
High,
}
#[derive(Debug, Clone)]
pub enum OptimizationType {
CacheOptimization,
ContentionReduction,
FragmentationReduction,
LatencyOptimization,
ThroughputOptimization,
MemoryEfficiency,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum DifficultyLevel {
Easy,
Medium,
Hard,
Expert,
}
#[derive(Debug, Clone)]
pub enum PoolOptimizationType {
CapacityAdjustment,
AllocationStrategyChange,
PreallocationOptimization,
GarbageCollectionTuning,
AccessPatternOptimization,
CacheOptimization,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum RecommendationPriority {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum HealthSeverity {
Info,
Warning,
Critical,
Emergency,
}
#[derive(Debug, Clone)]
pub enum RiskType {
MemoryLeak,
FragmentationIncrease,
PerformanceDegradation,
CapacityOverflow,
AccessPatternChange,
}
#[derive(Debug, Clone)]
pub enum HealthTrend {
Improving,
Stable,
Declining,
Unstable,
}
#[derive(Debug, Clone)]
pub enum FragmentationTrend {
Improving,
Stable,
Degrading,
Unknown,
}
#[derive(Debug, Clone)]
pub enum UtilizationChangeReason {
AllocationIncrease,
AllocationDecrease,
PoolExpansion,
PoolShrinkage,
WorkloadChange,
ConfigurationChange,
}
#[derive(Debug, Clone)]
pub enum FragmentationType {
Internal,
External,
Temporal,
Spatial,
}
#[derive(Debug, Clone)]
pub enum PressureTrend {
Increasing,
Stable,
Decreasing,
Fluctuating,
}
#[derive(Debug, Clone)]
pub enum ComparisonType {
GreaterThan,
LessThan,
Equal,
NotEqual,
}
#[derive(Debug, Clone)]
pub enum AlertSeverity {
Info,
Warning,
Critical,
Emergency,
}
#[derive(Debug, Clone)]
pub struct ConfigRecommendation {
pub parameter: String,
pub current_value: String,
pub recommended_value: String,
pub expected_impact: f64,
pub justification: String,
}
#[derive(Debug, Clone)]
pub struct OptimizationOpportunity {
pub opportunity_type: OptimizationType,
pub potential_improvement: f64,
pub implementation_difficulty: DifficultyLevel,
pub description: String,
}
#[derive(Debug, Clone)]
pub struct ResourceRequirements {
pub additional_memory: usize,
pub cpu_overhead: f64,
pub implementation_time: Duration,
pub maintenance_overhead: f64,
}
#[derive(Debug, Clone)]
pub struct PoolOptimizationRecommendation {
pub recommendation_type: PoolOptimizationType,
pub priority: RecommendationPriority,
pub description: String,
pub implementation_steps: Vec<String>,
pub expected_benefits: Vec<String>,
pub resource_requirements: ResourceRequirements,
}
#[derive(Debug, Clone)]
pub struct HealthIndicator {
pub name: String,
pub value: f64,
pub healthy_range: (f64, f64),
pub severity: HealthSeverity,
}
#[derive(Debug, Clone)]
pub struct RiskFactor {
pub risk_type: RiskType,
pub probability: f64,
pub impact: f64,
pub mitigation_strategies: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct CleanupStatus {
pub success: bool,
pub memory_leaked: usize,
pub cleanup_duration: Duration,
pub errors: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct IntegrationStatus {
pub active: bool,
pub last_sync: Option<std::time::Instant>,
pub allocator_count: usize,
pub pool_count: usize,
pub health_score: f64,
pub sync_interval: Duration,
pub features_enabled: Vec<String>,
}
impl Default for ScirS2IntegrationConfig {
fn default() -> Self {
Self {
enable_realtime_sync: true,
sync_interval: Duration::from_secs(5),
enable_event_callbacks: true,
track_allocation_patterns: true,
enable_optimization_suggestions: true,
advanced_config: AdvancedIntegrationConfig {
enable_predictive_modeling: false,
model_update_frequency: Duration::from_secs(60),
enable_automated_optimization: false,
optimization_aggressiveness: 0.5,
enable_health_monitoring: true,
health_check_interval: Duration::from_secs(30),
enable_performance_profiling: true,
profiling_detail_level: ProfilingDetailLevel::Detailed,
},
}
}
}
impl AdvancedIntegrationConfig {
pub fn conservative() -> Self {
Self {
enable_predictive_modeling: false,
model_update_frequency: Duration::from_secs(120),
enable_automated_optimization: false,
optimization_aggressiveness: 0.3,
enable_health_monitoring: true,
health_check_interval: Duration::from_secs(60),
enable_performance_profiling: false,
profiling_detail_level: ProfilingDetailLevel::Basic,
}
}
pub fn aggressive() -> Self {
Self {
enable_predictive_modeling: true,
model_update_frequency: Duration::from_secs(30),
enable_automated_optimization: true,
optimization_aggressiveness: 0.8,
enable_health_monitoring: true,
health_check_interval: Duration::from_secs(10),
enable_performance_profiling: true,
profiling_detail_level: ProfilingDetailLevel::Comprehensive,
}
}
pub fn debug() -> Self {
Self {
enable_predictive_modeling: true,
model_update_frequency: Duration::from_secs(10),
enable_automated_optimization: false,
optimization_aggressiveness: 0.0,
enable_health_monitoring: true,
health_check_interval: Duration::from_secs(5),
enable_performance_profiling: true,
profiling_detail_level: ProfilingDetailLevel::Debug,
}
}
}
impl Default for AdvancedIntegrationConfig {
fn default() -> Self {
Self::conservative()
}
}
impl ScirS2IntegrationConfig {
pub fn high_performance() -> Self {
Self {
enable_realtime_sync: true,
sync_interval: Duration::from_secs(1),
enable_event_callbacks: true,
track_allocation_patterns: true,
enable_optimization_suggestions: true,
advanced_config: AdvancedIntegrationConfig::aggressive(),
}
}
pub fn low_overhead() -> Self {
Self {
enable_realtime_sync: false,
sync_interval: Duration::from_secs(30),
enable_event_callbacks: false,
track_allocation_patterns: false,
enable_optimization_suggestions: false,
advanced_config: AdvancedIntegrationConfig::conservative(),
}
}
pub fn debug() -> Self {
Self {
enable_realtime_sync: true,
sync_interval: Duration::from_millis(100),
enable_event_callbacks: true,
track_allocation_patterns: true,
enable_optimization_suggestions: true,
advanced_config: AdvancedIntegrationConfig::debug(),
}
}
}
pub fn validate_config(config: &ScirS2IntegrationConfig) -> Result<(), String> {
if config.sync_interval.as_millis() < 10 {
return Err("Sync interval too small (minimum 10ms)".to_string());
}
if config.sync_interval.as_secs() > 3600 {
return Err("Sync interval too large (maximum 1 hour)".to_string());
}
if config.advanced_config.optimization_aggressiveness < 0.0
|| config.advanced_config.optimization_aggressiveness > 1.0
{
return Err("Optimization aggressiveness must be between 0.0 and 1.0".to_string());
}
if config.advanced_config.health_check_interval.as_millis() < 1000 {
return Err("Health check interval too small (minimum 1 second)".to_string());
}
if config.advanced_config.enable_automated_optimization
&& !config.enable_optimization_suggestions
{
return Err(
"Automated optimization requires optimization suggestions to be enabled".to_string(),
);
}
if config.advanced_config.enable_predictive_modeling && !config.track_allocation_patterns {
return Err("Predictive modeling requires allocation pattern tracking".to_string());
}
Ok(())
}