Temporary fix

This commit is contained in:
Marco De Araujo 2025-12-24 12:23:13 -04:00
parent 01395ec920
commit ce32ab53f0
2 changed files with 91 additions and 51 deletions

View file

@ -1,8 +1,10 @@
use crate::api::{UptimeKumaClient, UptimeKumaEndpoints}; use crate::api::{UptimeKumaClient, UptimeKumaEndpoints};
use crate::core; use crate::core;
use crate::i18n::t; use crate::i18n::t;
use crate::ui::components::{render_header, render_monitor_list}; use crate::ui::{
use crate::ui::dashboard::model::DashboardViewState; components::{render_header, render_monitor_list},
dashboard::model::DashboardViewState,
};
use crossterm::{ use crossterm::{
event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind}, event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind},
execute, execute,

View file

@ -1,17 +1,16 @@
use crate::i18n::t; use crate::i18n::t;
use crate::ui::dashboard::MonitorStatus;
use crate::ui::dashboard::model::DashboardViewState; use crate::ui::dashboard::model::DashboardViewState;
use ratatui::style::Modifier; use crate::ui::dashboard::{MonitorStatus, MonitorViewState};
use ratatui::widgets::{List, ListItem, ListState};
use ratatui::{ use ratatui::{
Frame, Frame,
layout::Rect, layout::{Constraint, Direction, Layout, Rect},
style::{Color, Style}, style::{Color, Modifier, Style},
text::{Line, Span}, text::{Line, Span},
widgets::{Block, Borders}, widgets::{Block, Borders, List, ListItem, ListState},
}; };
const STATUS_LINE_LENGTH: usize = 20; const STATUS_LINE_LENGTH: usize = 20;
const MAX_NAME_LENGTH: usize = 30;
pub fn render_monitor_list( pub fn render_monitor_list(
frame: &mut Frame, frame: &mut Frame,
@ -27,41 +26,7 @@ pub fn render_monitor_list(
let items: Vec<ListItem> = state let items: Vec<ListItem> = state
.monitors .monitors
.iter() .iter()
.map(|monitor| { .map(|monitor| create_monitor_item(monitor))
let status_icon = get_status_emoji(&monitor.status);
let status_color = get_status_color(&monitor.status);
let status_line = create_status_line_spans(&monitor.status_history);
let mut spans = vec![
Span::styled(
format!("{} ", status_icon),
Style::default()
.fg(status_color)
.add_modifier(Modifier::BOLD),
),
Span::styled(
&monitor.name,
Style::default()
.fg(Color::White)
.add_modifier(Modifier::BOLD),
),
Span::styled(
format!(" | {}ms", monitor.response_time),
Style::default().fg(Color::Cyan),
),
Span::styled(
format!(" | {}%", monitor.uptime_24h),
Style::default().fg(Color::Magenta),
),
Span::raw(" | "),
];
spans.extend(status_line);
let line = Line::from(spans);
let lines = vec![line];
ListItem::new(lines)
})
.collect(); .collect();
let list = List::new(items) let list = List::new(items)
@ -80,14 +45,6 @@ fn create_status_line_spans(status_history: &[MonitorStatus]) -> Vec<Span<'stati
.take(STATUS_LINE_LENGTH) .take(STATUS_LINE_LENGTH)
.collect(); .collect();
spans.push(Span::styled(
"(1h)",
Style::default()
.fg(Color::Gray)
.add_modifier(Modifier::ITALIC),
));
spans.push(Span::raw(" "));
for status in recent_status.iter().rev() { for status in recent_status.iter().rev() {
let c = get_status_char(status); let c = get_status_char(status);
let color = get_status_color(status); let color = get_status_color(status);
@ -129,3 +86,84 @@ pub fn get_status_emoji(status: &MonitorStatus) -> &str {
MonitorStatus::Unknown => "", MonitorStatus::Unknown => "",
} }
} }
fn create_monitor_item(monitor: &MonitorViewState) -> ListItem {
let status_icon = get_status_emoji(&monitor.status);
let status_color = get_status_color(&monitor.status);
let status_line = create_status_line_spans(&monitor.status_history);
let item_layout = Layout::default()
.direction(Direction::Horizontal)
.constraints([
Constraint::Length(3),
Constraint::Length(MAX_NAME_LENGTH as u16),
Constraint::Length(10),
Constraint::Length(10),
Constraint::Length(STATUS_LINE_LENGTH as u16),
])
.split(Rect {
x: 0,
y: 0,
width: 1000,
height: 1,
});
let status_span = Span::styled(
format!("{} ", status_icon),
Style::default()
.fg(status_color)
.add_modifier(Modifier::BOLD),
);
let mut name_text = monitor.name.clone();
if name_text.len() > MAX_NAME_LENGTH {
name_text = format!("{}...", &name_text[..MAX_NAME_LENGTH - 3]);
}
let name_span = Span::styled(
name_text,
Style::default()
.fg(Color::White)
.add_modifier(Modifier::BOLD),
);
let response_span = Span::styled(
format!("{:>7}ms", monitor.response_time),
Style::default().fg(Color::Cyan),
);
let uptime_span = Span::styled(
format!("{:>7}%", monitor.uptime_24h),
Style::default().fg(Color::Magenta),
);
let status_spans = create_status_line_spans(&monitor.status_history);
let status_line_start_period = Span::styled(
"(1h)",
Style::default()
.fg(Color::Gray)
.add_modifier(Modifier::ITALIC),
);
let status_line_end_period = Span::styled(
t("now"),
Style::default()
.fg(Color::Gray)
.add_modifier(Modifier::ITALIC),
);
let mut lines = Vec::new();
let main_line = Line::from(vec![
status_span,
name_span,
Span::raw(" | "),
response_span,
Span::raw(" | "),
uptime_span,
Span::raw(" | "),
status_line_start_period,
]);
lines.push(main_line);
let status_line = Line::from(status_spans);
lines.push(status_line);
ListItem::new(lines)
}