implemented generic linux sal with heuristics
This commit is contained in:
57
src/main.rs
57
src/main.rs
@@ -27,9 +27,9 @@ use ratatui::{backend::CrosstermBackend, Terminal};
|
||||
|
||||
use cli::Cli;
|
||||
use mediator::{TelemetryState, UiCommand, BenchmarkPhase};
|
||||
use sal::traits::{PreflightAuditor, EnvironmentGuard, SensorBus, ActuatorBus, HardwareWatchdog, AuditError};
|
||||
use sal::mock::{MockAuditor, MockGuard, MockSensorBus, MockActuatorBus, MockWatchdog};
|
||||
use sal::dell_xps_9380::DellXps9380Sal;
|
||||
use sal::traits::{AuditError, PlatformSal};
|
||||
use sal::mock::MockSal;
|
||||
use sal::heuristic::engine::HeuristicEngine;
|
||||
use load::StressNg;
|
||||
use orchestrator::BenchmarkOrchestrator;
|
||||
use ui::dashboard::{draw_dashboard, DashboardState};
|
||||
@@ -107,20 +107,17 @@ fn main() -> Result<()> {
|
||||
|
||||
info!("ember-tune starting with args: {:?}", args);
|
||||
|
||||
// 2. Pre-flight Audit (Before TUI)
|
||||
let auditor: Arc<dyn PreflightAuditor> = if args.mock {
|
||||
Arc::new(MockAuditor)
|
||||
// 2. Platform Detection & Audit
|
||||
let sal: Box<dyn PlatformSal> = if args.mock {
|
||||
Box::new(MockSal::new())
|
||||
} else {
|
||||
match DellXps9380Sal::init() {
|
||||
Ok(sal) => Arc::new(sal),
|
||||
Err(e) => return Err(miette::miette!("Failed to initialize Dell SAL: {}", e)),
|
||||
}
|
||||
HeuristicEngine::detect_and_build()?
|
||||
};
|
||||
|
||||
println!("{}", console::style("─── Pre-flight System Audit ───").bold().cyan());
|
||||
let mut audit_failures = Vec::new();
|
||||
|
||||
for step in auditor.audit() {
|
||||
for step in sal.audit() {
|
||||
print!(" Checking {:<40} ", step.description);
|
||||
io::Write::flush(&mut io::stdout()).into_diagnostic()?;
|
||||
|
||||
@@ -151,8 +148,9 @@ fn main() -> Result<()> {
|
||||
enable_raw_mode().into_diagnostic()?;
|
||||
let mut stdout = io::stdout();
|
||||
execute!(stdout, EnterAlternateScreen).into_diagnostic()?;
|
||||
let backend = CrosstermBackend::new(stdout);
|
||||
let mut terminal = Terminal::new(backend).into_diagnostic()?;
|
||||
let backend_stdout = io::stdout();
|
||||
let backend_term = CrosstermBackend::new(backend_stdout);
|
||||
let mut terminal = Terminal::new(backend_term).into_diagnostic()?;
|
||||
|
||||
// 4. State & Communication Setup
|
||||
let running = Arc::new(AtomicBool::new(true));
|
||||
@@ -166,40 +164,11 @@ fn main() -> Result<()> {
|
||||
}).expect("Error setting Ctrl-C handler");
|
||||
|
||||
// 5. Spawn Backend Orchestrator
|
||||
let is_mock = args.mock;
|
||||
let b_auditor = auditor.clone();
|
||||
let backend_handle = thread::spawn(move || {
|
||||
let (guard, sensors, actuators, watchdog): (
|
||||
Box<dyn EnvironmentGuard>,
|
||||
Box<dyn SensorBus>,
|
||||
Box<dyn ActuatorBus>,
|
||||
Box<dyn HardwareWatchdog>,
|
||||
) = if is_mock {
|
||||
(
|
||||
Box::new(MockGuard::new()),
|
||||
Box::new(MockSensorBus),
|
||||
Box::new(MockActuatorBus),
|
||||
Box::new(MockWatchdog),
|
||||
)
|
||||
} else {
|
||||
// Re-init or share the SAL
|
||||
let sal = Arc::new(DellXps9380Sal::init().expect("Failed to init Dell SAL in backend"));
|
||||
(
|
||||
Box::new(sal::dell_xps_9380::DellXps9380Guard::new()),
|
||||
Box::new(sal.clone() as Arc<dyn SensorBus>),
|
||||
Box::new(sal.clone() as Arc<dyn ActuatorBus>),
|
||||
Box::new(sal as Arc<dyn HardwareWatchdog>),
|
||||
)
|
||||
};
|
||||
|
||||
let workload = Box::new(StressNg::new());
|
||||
|
||||
let mut orchestrator = BenchmarkOrchestrator::new(
|
||||
Box::new(b_auditor),
|
||||
guard,
|
||||
sensors,
|
||||
actuators,
|
||||
watchdog,
|
||||
sal,
|
||||
workload,
|
||||
telemetry_tx,
|
||||
command_rx,
|
||||
@@ -286,7 +255,7 @@ fn main() -> Result<()> {
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
if e.to_string() == "ABORTED" {
|
||||
println!("{}", "Benchmark aborted by user. No summary available.".yellow());
|
||||
println!("{}", "Benchmark aborted by user.".yellow());
|
||||
} else {
|
||||
error!("Orchestrator encountered error: {}", e);
|
||||
eprintln!("{} {}", "Error:".red().bold(), e);
|
||||
|
||||
Reference in New Issue
Block a user