implemented tui for multiple fans

This commit is contained in:
2026-02-26 14:12:20 +01:00
parent cab39a6478
commit ab4d5828d5
2 changed files with 30 additions and 16 deletions

View File

@@ -136,9 +136,10 @@ impl DellXps9380Guard {
impl EnvironmentGuard for DellXps9380Guard {
fn suppress(&mut self) -> Result<()> {
let services = ["tlp", "thermald"];
let services = ["tlp", "thermald", "i8kmon"];
for s in services {
if Command::new("systemctl").args(["is-active", "--quiet", s]).status()?.success() {
debug!("Suppressing service: {}", s);
Command::new("systemctl").args(["stop", s]).status()?;
self.stopped_services.push(s.to_string());
}

View File

@@ -58,7 +58,7 @@ pub fn draw_dashboard(
.direction(Direction::Vertical)
.constraints([
Constraint::Length(10), // Gauges
Constraint::Length(3), // Cooling
Constraint::Min(4), // Cooling (Increased for multiple fans)
Constraint::Length(3), // CPU State
Constraint::Min(4), // Metadata
])
@@ -182,22 +182,35 @@ fn draw_cooling(f: &mut Frame, area: Rect, state: &TelemetryState) {
let inner = block.inner(area);
f.render_widget(block, area);
let fan_info = if state.fans.is_empty() {
"N/A".to_string()
} else {
state.fans.iter()
.map(|rpm| format!("{} RPM", rpm))
.collect::<Vec<String>>()
.join(" | ")
};
let info = Line::from(vec![
let mut lines = Vec::new();
// Line 1: Tier
lines.push(Line::from(vec![
Span::styled(" Tier: ", Style::default().fg(C_LAVENDER)),
Span::styled(&state.fan_tier, Style::default().fg(C_TEAL)),
Span::styled(" | ", Style::default().fg(C_LAVENDER)),
Span::styled(fan_info, Style::default().fg(C_TEXT)),
]);
f.render_widget(Paragraph::new(info), inner);
]));
// Line 2+: Fans
if state.fans.is_empty() {
lines.push(Line::from(vec![
Span::styled(" Fans: ", Style::default().fg(C_LAVENDER)),
Span::styled("N/A", Style::default().fg(C_SUBTEXT)),
]));
} else if state.fans.len() == 1 {
lines.push(Line::from(vec![
Span::styled(" Fan: ", Style::default().fg(C_LAVENDER)),
Span::styled(format!("{} RPM", state.fans[0]), Style::default().fg(C_TEXT)),
]));
} else {
for (i, rpm) in state.fans.iter().enumerate() {
lines.push(Line::from(vec![
Span::styled(format!(" Fan {}: ", i + 1), Style::default().fg(C_LAVENDER)),
Span::styled(format!("{} RPM", rpm), Style::default().fg(C_TEXT)),
]));
}
}
f.render_widget(Paragraph::new(lines), inner);
}
fn draw_cpu_state(f: &mut Frame, area: Rect, state: &TelemetryState) {