memscope_rs/export/
config_optimizer.rs1use 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
11pub struct ConfigOptimizer {
13 system_optimizer: SystemOptimizer,
14 optimization_history: Vec<OptimizationRecord>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct OptimizationRecord {
20 pub timestamp: u64,
22 pub target: OptimizationTarget,
24 pub original_config: ConfigSnapshot,
26 pub optimized_config: ConfigSnapshot,
28 pub performance_improvement: f64,
30 pub success_rate: f64,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct ConfigSnapshot {
37 pub shard_size: usize,
39 pub thread_count: usize,
41 pub buffer_size: usize,
43 pub config_hash: String,
45}
46
47impl ConfigOptimizer {
48 pub fn new() -> TrackingResult<Self> {
50 Ok(Self {
51 system_optimizer: SystemOptimizer::new()?,
52 optimization_history: Vec::new(),
53 })
54 }
55
56 pub fn auto_optimize(
58 &mut self,
59 target: OptimizationTarget,
60 dataset_size: Option<usize>,
61 ) -> TrackingResult<FastExportConfigBuilder> {
62 let recommendation = self
64 .system_optimizer
65 .generate_configuration_recommendation(target, dataset_size);
66
67 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 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 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 pub fn get_optimization_history(&self) -> &[OptimizationRecord] {
122 &self.optimization_history
123 }
124
125 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}