#![cfg_attr(coverage_nightly, coverage(off))]
use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::sync::Arc;
use std::time::{Duration, Instant};
use tokio::sync::{RwLock, Semaphore};
use tokio::time::{interval, sleep};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum OperationType {
Analysis,
Commit,
Background,
Storage,
Cleanup,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceLimits {
pub max_memory_mb: f64,
pub max_cpu_utilization: f64,
pub max_concurrent_ops: usize,
pub memory_warning_threshold: f64,
pub cpu_warning_threshold: f64,
pub check_interval_secs: u64,
}
impl Default for ResourceLimits {
fn default() -> Self {
Self {
max_memory_mb: 1024.0, max_cpu_utilization: 0.8, max_concurrent_ops: 20, memory_warning_threshold: 0.7, cpu_warning_threshold: 0.6, check_interval_secs: 5, }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceUsage {
#[serde(skip, default = "Instant::now")]
pub timestamp: Instant,
pub memory_mb: f64,
pub cpu_utilization: f64,
pub active_operations: usize,
pub memory_pressure: ResourcePressure,
pub cpu_pressure: ResourcePressure,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ResourcePressure {
Low, Medium, High, Critical, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ResourceAction {
Allow,
Throttle { delay_ms: u64 },
Queue { estimated_wait_ms: u64 },
Reject { reason: String },
EmergencyStop,
}
pub struct PlatformResourceController {
limits: ResourceLimits,
current_usage: Arc<RwLock<ResourceUsage>>,
operation_semaphore: Arc<Semaphore>,
active_operations: Arc<RwLock<HashMap<String, OperationContext>>>,
enforcement_history: Arc<RwLock<Vec<EnforcementEvent>>>,
monitoring_active: Arc<RwLock<bool>>,
}
#[derive(Debug, Clone)]
pub struct OperationContext {
pub id: String,
pub operation_type: OperationType,
pub started_at: Instant,
pub estimated_memory_mb: f64,
pub priority: OperationPriority,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum OperationPriority {
Critical, High, Medium, Low, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnforcementEvent {
#[serde(skip, default = "Instant::now")]
pub timestamp: Instant,
pub operation_id: String,
pub action: ResourceAction,
pub resource_usage: ResourceUsage,
pub reason: String,
}
pub struct ResourceAllocation {
operation_id: String,
#[allow(dead_code)]
permit: tokio::sync::OwnedSemaphorePermit,
active_operations: Arc<RwLock<HashMap<String, OperationContext>>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceEnforcementStats {
pub total_requests: usize,
pub allowed_requests: usize,
pub throttled_requests: usize,
pub queued_requests: usize,
pub rejected_requests: usize,
pub current_active_operations: usize,
}
pub struct ResourceControllerFactory;
include!("controller_core.rs");
include!("controller_evaluation.rs");
include!("allocation_and_stats.rs");
include!("tests_async.rs");
include!("tests_simple.rs");
include!("tests_coverage.rs");
include!("tests_controller.rs");