memscope_rs/export/
config_optimizer.rs

1//! configuration optimization tool module
2//!
3//! This module provides automated configuration optimization and validation tools.
4
5use crate::core::types::TrackingResult;
6use crate::export::fast_export_coordinator::FastExportConfigBuilder;
7use crate::export::performance_testing::OptimizationTarget;
8use crate::export::system_optimizer::SystemOptimizer;
9use serde::{Deserialize, Serialize};
10
11/// configuration optimizer
12pub struct ConfigOptimizer {
13    system_optimizer: SystemOptimizer,
14    optimization_history: Vec<OptimizationRecord>,
15}
16
17/// optimization record
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct OptimizationRecord {
20    /// optimization timestamp
21    pub timestamp: u64,
22    /// optimization target
23    pub target: OptimizationTarget,
24    /// original configuration
25    pub original_config: ConfigSnapshot,
26    /// optimized configuration
27    pub optimized_config: ConfigSnapshot,
28    /// performance improvement
29    pub performance_improvement: f64,
30    /// optimization success rate
31    pub success_rate: f64,
32}
33
34/// configuration snapshot
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct ConfigSnapshot {
37    /// shard size
38    pub shard_size: usize,
39    /// thread count
40    pub thread_count: usize,
41    /// buffer size
42    pub buffer_size: usize,
43    /// configuration hash
44    pub config_hash: String,
45}
46
47impl ConfigOptimizer {
48    /// create new configuration optimizer
49    pub fn new() -> TrackingResult<Self> {
50        Ok(Self {
51            system_optimizer: SystemOptimizer::new()?,
52            optimization_history: Vec::new(),
53        })
54    }
55
56    /// auto optimize configuration
57    pub fn auto_optimize(
58        &mut self,
59        target: OptimizationTarget,
60        dataset_size: Option<usize>,
61    ) -> TrackingResult<FastExportConfigBuilder> {
62        // generate configuration recommendation
63        let recommendation = self
64            .system_optimizer
65            .generate_configuration_recommendation(target, dataset_size);
66
67        // create configuration
68        let config_builder = FastExportConfigBuilder::new()
69            .shard_size(recommendation.recommended_shard_size)
70            .max_threads(Some(recommendation.recommended_thread_count))
71            .buffer_size(recommendation.recommended_buffer_size)
72            .performance_monitoring(true);
73
74        // validate configuration
75        let validation_result = self
76            .system_optimizer
77            .validate_configuration(&config_builder);
78
79        if !validation_result.is_valid {
80            println!("⚠️ configuration validation failed, using default configuration");
81            for error in &validation_result.errors {
82                println!(" Error : {}", error);
83            }
84            return Ok(FastExportConfigBuilder::new());
85        }
86
87        // record optimization history
88        let record = OptimizationRecord {
89            timestamp: std::time::SystemTime::now()
90                .duration_since(std::time::UNIX_EPOCH)
91                .unwrap()
92                .as_secs(),
93            target,
94            original_config: ConfigSnapshot {
95                shard_size: 1000,
96                thread_count: 4,
97                buffer_size: 256 * 1024,
98                config_hash: "default".to_string(),
99            },
100            optimized_config: ConfigSnapshot {
101                shard_size: recommendation.recommended_shard_size,
102                thread_count: recommendation.recommended_thread_count,
103                buffer_size: recommendation.recommended_buffer_size,
104                config_hash: format!(
105                    "{:x}",
106                    recommendation.recommended_shard_size
107                        ^ recommendation.recommended_thread_count
108                        ^ recommendation.recommended_buffer_size
109                ),
110            },
111            performance_improvement: recommendation.expected_performance_gain,
112            success_rate: recommendation.confidence,
113        };
114
115        self.optimization_history.push(record);
116
117        Ok(config_builder)
118    }
119
120    /// get optimization history
121    pub fn get_optimization_history(&self) -> &[OptimizationRecord] {
122        &self.optimization_history
123    }
124
125    /// clear optimization history
126    pub fn clear_history(&mut self) {
127        self.optimization_history.clear();
128    }
129}
130
131impl Default for ConfigOptimizer {
132    fn default() -> Self {
133        Self::new().unwrap_or_else(|_| Self {
134            system_optimizer: SystemOptimizer::default(),
135            optimization_history: Vec::new(),
136        })
137    }
138}