quantrs2_tytan/realtime_quantum_integration/
state.rs

1//! System state types for Real-time Quantum Computing Integration
2//!
3//! This module provides system state tracking types.
4
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7use std::time::{Duration, SystemTime};
8
9use super::hardware::DeviceStatus;
10use super::types::{AlertType, ComponentStatus, IssueSeverity, SystemStatus};
11
12/// System state tracking
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct SystemState {
15    /// Overall system status
16    pub overall_status: SystemStatus,
17    /// Component states
18    pub component_states: HashMap<String, ComponentState>,
19    /// Active alerts
20    pub active_alerts: Vec<ActiveAlert>,
21    /// Performance summary
22    pub performance_summary: PerformanceSummary,
23    /// Resource utilization
24    pub resource_utilization: SystemResourceUtilization,
25    /// Last update timestamp
26    pub last_update: SystemTime,
27}
28
29impl Default for SystemState {
30    fn default() -> Self {
31        Self::new()
32    }
33}
34
35impl SystemState {
36    pub fn new() -> Self {
37        Self {
38            overall_status: SystemStatus::Healthy,
39            component_states: HashMap::new(),
40            active_alerts: vec![],
41            performance_summary: PerformanceSummary {
42                performance_score: 0.9,
43                throughput: 100.0,
44                latency_percentiles: HashMap::new(),
45                error_rates: HashMap::new(),
46                availability: 0.99,
47            },
48            resource_utilization: SystemResourceUtilization {
49                cpu_utilization: 0.5,
50                memory_utilization: 0.6,
51                storage_utilization: 0.4,
52                network_utilization: 0.3,
53                quantum_utilization: Some(0.7),
54            },
55            last_update: SystemTime::now(),
56        }
57    }
58
59    pub fn update_component_state(&mut self, component_id: &str, _status: &DeviceStatus) {
60        let component_state = ComponentState {
61            component_name: component_id.to_string(),
62            status: ComponentStatus::Healthy, // Simplified
63            last_heartbeat: SystemTime::now(),
64            metrics: HashMap::new(),
65            alerts: vec![],
66        };
67
68        self.component_states
69            .insert(component_id.to_string(), component_state);
70        self.last_update = SystemTime::now();
71    }
72}
73
74/// Component state
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct ComponentState {
77    /// Component name
78    pub component_name: String,
79    /// Status
80    pub status: ComponentStatus,
81    /// Last heartbeat
82    pub last_heartbeat: SystemTime,
83    /// Metrics
84    pub metrics: HashMap<String, f64>,
85    /// Alerts
86    pub alerts: Vec<String>,
87}
88
89/// Active alert
90#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct ActiveAlert {
92    /// Alert ID
93    pub alert_id: String,
94    /// Alert type
95    pub alert_type: AlertType,
96    /// Severity
97    pub severity: IssueSeverity,
98    /// Message
99    pub message: String,
100    /// Timestamp
101    pub timestamp: SystemTime,
102    /// Acknowledged
103    pub acknowledged: bool,
104    /// Acknowledger
105    pub acknowledged_by: Option<String>,
106}
107
108/// Performance summary
109#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct PerformanceSummary {
111    /// Overall performance score
112    pub performance_score: f64,
113    /// Throughput
114    pub throughput: f64,
115    /// Latency percentiles
116    pub latency_percentiles: HashMap<String, Duration>,
117    /// Error rates
118    pub error_rates: HashMap<String, f64>,
119    /// Availability percentage
120    pub availability: f64,
121}
122
123/// System resource utilization
124#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct SystemResourceUtilization {
126    /// CPU utilization
127    pub cpu_utilization: f64,
128    /// Memory utilization
129    pub memory_utilization: f64,
130    /// Storage utilization
131    pub storage_utilization: f64,
132    /// Network utilization
133    pub network_utilization: f64,
134    /// Quantum resource utilization
135    pub quantum_utilization: Option<f64>,
136}