1use crate::diagnostics::Severity;
13use crate::storage::BufferPoolStats;
14use serde::{Deserialize, Serialize};
15use std::collections::{HashMap, VecDeque};
16use std::time::{Duration, SystemTime};
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct AdvancedDiagnosticReport {
21 pub timestamp: SystemTime,
23 pub query_analysis: QueryPerformanceAnalysis,
25 pub transaction_analysis: TransactionPatternAnalysis,
27 pub fragmentation_analysis: FragmentationAnalysis,
29 pub index_usage: IndexUsageStatistics,
31 pub predictive_health: PredictiveHealthIndicators,
33 pub tuning_recommendations: Vec<TuningRecommendation>,
35 pub anomalies: Vec<AnomalyDetection>,
37 pub capacity_forecast: CapacityForecast,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct QueryPerformanceAnalysis {
44 pub total_queries: u64,
46 pub avg_execution_time: Duration,
48 pub median_execution_time: Duration,
50 pub p95_execution_time: Duration,
52 pub p99_execution_time: Duration,
54 pub slow_query_count: u64,
56 pub query_patterns: Vec<QueryPattern>,
58 pub optimization_opportunities: Vec<String>,
60 pub cache_hit_rate: f64,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct QueryPattern {
67 pub signature: String,
69 pub frequency: u64,
71 pub avg_time: Duration,
73 pub indexes_used: Vec<String>,
75 pub optimization_potential: f64,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct TransactionPatternAnalysis {
82 pub total_transactions: u64,
84 pub avg_duration: Duration,
86 pub median_duration: Duration,
88 pub commit_rate: f64,
90 pub abort_rate: f64,
92 pub conflict_rate: f64,
94 pub deadlock_rate: f64,
96 pub contention_points: Vec<ContentionPoint>,
98 pub size_distribution: TransactionSizeDistribution,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct ContentionPoint {
105 pub resource: String,
107 pub contention_count: u64,
109 pub avg_wait_time: Duration,
111 pub severity: f64,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct TransactionSizeDistribution {
118 pub small_pct: f64,
120 pub medium_pct: f64,
122 pub large_pct: f64,
124}
125
126#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct FragmentationAnalysis {
129 pub overall_fragmentation_pct: f64,
131 pub dictionary_fragmentation_pct: f64,
133 pub index_fragmentation: HashMap<String, f64>,
135 pub free_space_distribution: Vec<FreeSpaceRegion>,
137 pub compaction_benefit_bytes: u64,
139 pub compaction_priority: f64,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct FreeSpaceRegion {
146 pub offset: u64,
148 pub size: u64,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct IndexUsageStatistics {
155 pub total_scans: u64,
157 pub usage_by_index: HashMap<String, IndexUsageStats>,
159 pub unused_indexes: Vec<String>,
161 pub overused_indexes: Vec<String>,
163 pub missing_index_opportunities: Vec<MissingIndexOpportunity>,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct IndexUsageStats {
170 pub scan_count: u64,
172 pub avg_selectivity: f64,
174 pub avg_scan_time: Duration,
176 pub efficiency_score: f64,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct MissingIndexOpportunity {
183 pub suggested_index: String,
185 pub benefiting_patterns: Vec<String>,
187 pub estimated_improvement_pct: f64,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
193pub struct PredictiveHealthIndicators {
194 pub historical_metrics: HistoricalMetrics,
196 pub predicted_issues_24h: Vec<PredictedIssue>,
198 pub predicted_issues_7d: Vec<PredictedIssue>,
200 pub health_trend: HealthTrend,
202 pub resource_predictions: ResourcePredictions,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct HistoricalMetrics {
209 pub data_points: usize,
211 pub time_range: Duration,
213 pub query_latency_trend: Vec<f64>,
215 pub txn_throughput_trend: Vec<f64>,
217 pub storage_growth_trend: Vec<f64>,
219 pub error_rate_trend: Vec<f64>,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct PredictedIssue {
226 pub category: String,
228 pub description: String,
230 pub confidence: f64,
232 pub eta: Duration,
234 pub severity: Severity,
236 pub preventive_action: String,
238}
239
240#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
242pub enum HealthTrend {
243 Improving,
245 Stable,
247 DegradingSlowly,
249 DegradingRapidly,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
255pub struct ResourcePredictions {
256 pub storage_full_eta: Option<SystemTime>,
258 pub memory_exhaustion_eta: Option<SystemTime>,
260 pub connection_saturation_eta: Option<SystemTime>,
262}
263
264#[derive(Debug, Clone, Serialize, Deserialize)]
266pub struct TuningRecommendation {
267 pub parameter: String,
269 pub current_value: String,
271 pub recommended_value: String,
273 pub rationale: String,
275 pub expected_impact: String,
277 pub priority: f64,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize)]
283pub struct AnomalyDetection {
284 pub metric: String,
286 pub description: String,
288 pub detected_value: f64,
290 pub expected_range: (f64, f64),
292 pub deviation: f64,
294 pub detected_at: SystemTime,
296 pub severity: Severity,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct CapacityForecast {
303 pub current_storage_bytes: u64,
305 pub predicted_30d_bytes: u64,
307 pub predicted_90d_bytes: u64,
309 pub growth_rate_per_day: f64,
311 pub days_until_80pct: Option<u32>,
313 pub days_until_90pct: Option<u32>,
315 pub recommended_actions: Vec<String>,
317}
318
319pub struct AdvancedDiagnosticEngine {
321 pub(crate) historical_buffer: VecDeque<MetricSnapshot>,
323 pub(crate) max_history_size: usize,
325 pub(crate) query_tracker: QueryPerformanceTracker,
327 pub(crate) transaction_tracker: TransactionPatternTracker,
329 pub(crate) anomaly_detector: AnomalyDetector,
331}
332
333#[derive(Debug, Clone)]
335pub(crate) struct MetricSnapshot {
336 pub(crate) timestamp: SystemTime,
337 pub(crate) query_latency: f64,
338 pub(crate) txn_throughput: f64,
339 pub(crate) storage_bytes: u64,
340 pub(crate) error_count: u64,
341 #[allow(dead_code)]
342 pub(crate) buffer_pool_stats: BufferPoolStats,
343}
344
345pub(crate) struct QueryPerformanceTracker {
347 pub(crate) recent_queries: VecDeque<Duration>,
349 pub(crate) patterns: HashMap<String, QueryPatternStats>,
351 pub(crate) cache_hits: u64,
353 pub(crate) cache_misses: u64,
354}
355
356#[derive(Debug, Clone)]
357pub(crate) struct QueryPatternStats {
358 pub(crate) frequency: u64,
359 pub(crate) total_time: Duration,
360 pub(crate) indexes_used: Vec<String>,
361}
362
363pub(crate) struct TransactionPatternTracker {
365 pub(crate) recent_durations: VecDeque<Duration>,
367 pub(crate) commits: u64,
369 pub(crate) aborts: u64,
370 pub(crate) conflicts: u64,
372 pub(crate) deadlocks: u64,
373 pub(crate) contention_map: HashMap<String, ContentionStats>,
375}
376
377#[derive(Debug, Clone)]
378pub(crate) struct ContentionStats {
379 pub(crate) count: u64,
380 pub(crate) total_wait_time: Duration,
381}
382
383pub(crate) struct AnomalyDetector {
385 pub(crate) threshold: f64,
387}