mod metrics;
mod newton;
use metrics::collector::MetricsCollector;
use newton::fluxio::FluxionCalculator;
use newton::hadden::HaddenDetector;
use std::thread;
use std::time::Duration;
fn main() {
println!("=== NEWTON LINUX OPTIMIZER ===");
println!("Starting...\n");
let mut collector = MetricsCollector::new();
let mut fluxion_calc = FluxionCalculator::new();
let mut hadden = HaddenDetector::new(60);
let min_mem_mb = 500.0; let warn_threshold_sec = 3600.0;
loop {
let metrics = collector.collect();
print!("\x1B[2J\x1B[1;1H");
println!("╔══════════════════════════════════════════════════════════════╗");
println!("║ NEWTON LINUX OPTIMIZER - MONITOR ║");
println!("╚══════════════════════════════════════════════════════════════╝");
println!();
println!("📊 CURRENT SYSTEM STATE:");
println!(" ┌─────────────────────────────────────────────────┐");
println!(" │ Free RAM: {:>8.0} MB / {:.0} MB ({:>5.1}%) │",
metrics.mem_free_mb, metrics.mem_total_mb, metrics.mem_used_percent());
println!(" │ Free Swap: {:>8.0} MB / {:.0} MB ({:>5.1}%) │",
metrics.swap_free_mb, metrics.swap_total_mb, metrics.swap_used_percent());
println!(" │ CPU Load: 1m: {:.2} 5m: {:.2} 15m: {:.2} │",
metrics.cpu_load_1, metrics.cpu_load_5, metrics.cpu_load_15);
println!(" │ Disk Free: {:>8.1} GB / {:.1} GB │",
metrics.disk_free_gb, metrics.disk_total_gb);
println!(" └─────────────────────────────────────────────────┘");
if let Some(velocity) = fluxion_calc.calculate_velocity(&metrics) {
let arrow = if velocity > 0.0 { "↑ freeing" } else { "↓ consuming" };
println!("\n📈 MEMORY FLUXION (dx/dt): {:.1} MB/s {}", velocity.abs(), arrow);
if velocity < 0.0 {
if let Some(time) = FluxionCalculator::time_to_exhaustion(
metrics.mem_free_mb, velocity, min_mem_mb
) {
if time < warn_threshold_sec {
let minutes = time / 60.0;
let hours = minutes / 60.0;
println!("\n╔══════════════════════════════════════════════════════════════╗");
if time < 300.0 {
println!("║ ⚠️⚠️⚠️ CRITICAL: RAM WILL EXHAUST IN {:.0} SECONDS! ║", time);
} else if time < 3600.0 {
println!("║ ⚠️ WARNING: RAM will exhaust in {:.1} minutes ({:.1} hours) ║", minutes, hours);
}
println!("╚══════════════════════════════════════════════════════════════╝");
println!("\n💡 RECOMMENDATIONS:");
println!(" 1. Install zram for compressed swap:");
println!(" → sudo apt install zram-tools");
println!(" 2. Check memory usage: ps aux --sort=-%mem | head -20");
println!(" 3. Close memory-intensive applications");
}
}
}
}
hadden.add_value(metrics.cpu_load_1);
if let Some((severity, peak_value)) = hadden.detect_peak(5.0) {
if severity > 2.0 {
println!("\n🔺 CPU PEAK DETECTED!");
println!(" Severity: {:.2}x normal load", severity);
println!(" Peak value: {:.2}", peak_value);
println!(" 💡 Check: top -b -n1 | head -20");
}
}
println!("\n⏎ Monitoring... (updates every 5 seconds)");
thread::sleep(Duration::from_secs(5));
}
}