use serde::{Deserialize, Serialize};
use std::time::SystemTime;
use super::traits::DeviceStatus;
use super::{HardwareCapabilities, HardwareType};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct HardwareManagerConfig {
pub auto_discovery: bool,
pub device_timeout: u64,
pub health_check_interval: u64,
pub allocation_strategy: AllocationStrategy,
pub load_balancing: LoadBalancingStrategy,
pub performance_monitoring: bool,
pub failover_enabled: bool,
pub max_concurrent_operations: usize,
pub memory_management: MemoryManagementConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum AllocationStrategy {
FirstAvailable,
BestFit,
RoundRobin,
LoadAware,
PerformanceOptimized,
PowerEfficient,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastConnections,
LeastUtilization,
WeightedRoundRobin,
PerformanceBased,
Adaptive,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MemoryManagementConfig {
pub enable_pooling: bool,
pub pool_size: usize,
pub fragmentation_threshold: f64,
pub gc_enabled: bool,
pub gc_interval: u64,
pub pressure_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DeviceInfo {
pub id: String,
pub hardware_type: HardwareType,
pub capabilities: HardwareCapabilities,
pub status: DeviceStatus,
pub last_seen: SystemTime,
pub weight: f64,
pub priority: i32,
pub tags: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OperationStats {
pub total_operations: u64,
pub successful_operations: u64,
pub failed_operations: u64,
pub avg_execution_time: f64,
pub peak_execution_time: f64,
pub min_execution_time: f64,
pub operations_per_second: f64,
pub last_updated: SystemTime,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MemoryUsageStats {
pub total_memory: usize,
pub used_memory: usize,
pub free_memory: usize,
pub utilization: f64,
pub peak_usage: usize,
}
impl Default for HardwareManagerConfig {
fn default() -> Self {
Self {
auto_discovery: true,
device_timeout: 30,
health_check_interval: 60,
allocation_strategy: AllocationStrategy::BestFit,
load_balancing: LoadBalancingStrategy::LeastUtilization,
performance_monitoring: true,
failover_enabled: true,
max_concurrent_operations: 4,
memory_management: MemoryManagementConfig::default(),
}
}
}
impl Default for MemoryManagementConfig {
fn default() -> Self {
Self {
enable_pooling: true,
pool_size: 1024 * 1024 * 1024, fragmentation_threshold: 0.3,
gc_enabled: true,
gc_interval: 300, pressure_threshold: 0.8,
}
}
}
impl Default for OperationStats {
fn default() -> Self {
Self {
total_operations: 0,
successful_operations: 0,
failed_operations: 0,
avg_execution_time: 0.0,
peak_execution_time: 0.0,
min_execution_time: f64::INFINITY,
operations_per_second: 0.0,
last_updated: SystemTime::now(),
}
}
}
impl Default for MemoryUsageStats {
fn default() -> Self {
Self {
total_memory: 0,
used_memory: 0,
free_memory: 0,
utilization: 0.0,
peak_usage: 0,
}
}
}