use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudPerformanceMonitoringConfig {
pub enabled: bool,
pub metrics: Vec<PerformanceMetric>,
pub frequency: Duration,
pub retention: Duration,
pub real_time: RealTimeMonitoringConfig,
pub thresholds: PerformanceThresholds,
pub benchmarking: BenchmarkingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PerformanceMetric {
Latency,
Throughput,
ResponseTime,
ErrorRate,
Availability,
CPUUtilization,
MemoryUtilization,
NetworkUtilization,
DiskUtilization,
QuantumCircuitDepth,
QuantumGateErrors,
QuantumCoherence,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealTimeMonitoringConfig {
pub enabled: bool,
pub streaming_frequency: Duration,
pub buffer_size: usize,
pub aggregation_window: Duration,
pub dashboards: Vec<DashboardConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceThresholds {
pub warning: ThresholdLevels,
pub critical: ThresholdLevels,
pub custom_thresholds: std::collections::HashMap<PerformanceMetric, ThresholdLevels>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThresholdLevels {
pub cpu_utilization: f64,
pub memory_utilization: f64,
pub network_utilization: f64,
pub disk_utilization: f64,
pub response_time: f64,
pub error_rate: f64,
pub availability: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkingConfig {
pub enabled: bool,
pub frequency: Duration,
pub benchmark_types: Vec<BenchmarkType>,
pub baseline_comparison: BaselineComparisonConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BenchmarkType {
PerformanceStress,
LoadTesting,
CapacityTesting,
EnduranceTesting,
ScalabilityTesting,
QuantumBenchmark,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BaselineComparisonConfig {
pub enabled: bool,
pub update_frequency: Duration,
pub tolerance: f64,
pub historical_count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardConfig {
pub name: String,
pub dashboard_type: DashboardType,
pub metrics: Vec<PerformanceMetric>,
pub refresh_rate: Duration,
pub layout: DashboardLayout,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DashboardType {
Overview,
Detailed,
RealTime,
Historical,
Comparative,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardLayout {
pub columns: usize,
pub widgets: Vec<WidgetConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WidgetConfig {
pub widget_type: WidgetType,
pub position: (usize, usize),
pub size: (usize, usize),
pub metric: PerformanceMetric,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WidgetType {
LineChart,
BarChart,
Gauge,
Counter,
Table,
Heatmap,
Custom(String),
}
impl Default for CloudPerformanceMonitoringConfig {
fn default() -> Self {
Self {
enabled: true,
metrics: vec![
PerformanceMetric::Latency,
PerformanceMetric::Throughput,
PerformanceMetric::CPUUtilization,
PerformanceMetric::MemoryUtilization,
],
frequency: Duration::from_secs(30),
retention: Duration::from_secs(86400 * 30), real_time: RealTimeMonitoringConfig::default(),
thresholds: PerformanceThresholds::default(),
benchmarking: BenchmarkingConfig::default(),
}
}
}
impl Default for RealTimeMonitoringConfig {
fn default() -> Self {
Self {
enabled: true,
streaming_frequency: Duration::from_secs(5),
buffer_size: 1000,
aggregation_window: Duration::from_secs(60),
dashboards: vec![],
}
}
}
impl Default for PerformanceThresholds {
fn default() -> Self {
Self {
warning: ThresholdLevels::warning_defaults(),
critical: ThresholdLevels::critical_defaults(),
custom_thresholds: std::collections::HashMap::new(),
}
}
}
impl ThresholdLevels {
pub const fn warning_defaults() -> Self {
Self {
cpu_utilization: 70.0,
memory_utilization: 75.0,
network_utilization: 70.0,
disk_utilization: 80.0,
response_time: 1000.0, error_rate: 5.0,
availability: 95.0,
}
}
pub const fn critical_defaults() -> Self {
Self {
cpu_utilization: 85.0,
memory_utilization: 90.0,
network_utilization: 85.0,
disk_utilization: 95.0,
response_time: 5000.0, error_rate: 10.0,
availability: 90.0,
}
}
}
impl Default for BenchmarkingConfig {
fn default() -> Self {
Self {
enabled: false,
frequency: Duration::from_secs(86400), benchmark_types: vec![BenchmarkType::PerformanceStress],
baseline_comparison: BaselineComparisonConfig::default(),
}
}
}
impl Default for BaselineComparisonConfig {
fn default() -> Self {
Self {
enabled: true,
update_frequency: Duration::from_secs(86400 * 7), tolerance: 10.0,
historical_count: 10,
}
}
}