use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataCollectionConfig {
pub collection_interval: u64,
pub buffer_size: usize,
pub retention_days: u32,
pub metrics_config: MetricsConfig,
pub aggregation_config: AggregationConfig,
pub sampling_config: SamplingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetricsConfig {
pub performance_metrics: Vec<PerformanceMetric>,
pub resource_metrics: Vec<ResourceMetric>,
pub quality_metrics: Vec<QualityMetric>,
pub custom_metrics: Vec<CustomMetric>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AggregationConfig {
pub aggregation_functions: Vec<AggregationFunction>,
pub time_windows: Vec<TimeWindow>,
pub grouping_dimensions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SamplingConfig {
pub sampling_strategy: SamplingStrategy,
pub sample_rate: f64,
pub adaptive_sampling: bool,
pub quality_based_sampling: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum PerformanceMetric {
Fidelity,
Throughput,
Latency,
ErrorRate,
SuccessRate,
CircuitDepth,
GateCount,
SwapCount,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum ResourceMetric {
CpuUtilization,
MemoryUtilization,
NetworkUtilization,
StorageUtilization,
QuantumUtilization,
QueueLength,
ActiveConnections,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum QualityMetric {
ProcessFidelity,
MeasurementFidelity,
GateFidelity,
StatePreparationFidelity,
ReadoutFidelity,
CoherenceTime,
CalibrationDrift,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum CustomMetric {
UserDefined(String),
ApplicationSpecific(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum AggregationFunction {
Mean,
Median,
Min,
Max,
Sum,
Count,
Percentile(f64),
StandardDeviation,
Variance,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum TimeWindow {
Seconds(u64),
Minutes(u64),
Hours(u64),
Days(u64),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum SamplingStrategy {
Fixed,
Adaptive,
QualityBased,
EventDriven,
Hybrid,
}