diff --git a/src/locales/en-US/main.ftl b/src/locales/en-US/main.ftl index 2dee732..080f61e 100644 --- a/src/locales/en-US/main.ftl +++ b/src/locales/en-US/main.ftl @@ -8,3 +8,7 @@ invalid-json-heartbeat = ❌ Error parssing heartbeat JSON invalid-uptime-key-format = Invalid format for uptime key. Expected format "monitorID_period". Received key: {key} invalid-monitor-id = Invalid monitor ID: {id} invalid-period-hours = Invalid period in hours: {hours} +loading = Loading +dashboard-header = Dashboard +monitors = Monitors +unknown = Unknown diff --git a/src/locales/pt-BR/main.ftl b/src/locales/pt-BR/main.ftl index 518b1c0..c668e5a 100644 --- a/src/locales/pt-BR/main.ftl +++ b/src/locales/pt-BR/main.ftl @@ -8,3 +8,7 @@ invalid-json-heartbeat = ❌ Falha ao parsear JSON do heartbeat invalid-uptime-key-format = Formato inválido na chave de uptime. Chave esperada no formato "monitorID_periodo". Chave recebida: {key} invalid-monitor-id = ID de monitor inválido: {id} invalid-period-hours = Período em horas inválido: {hours} +loading = Carregando +dashboard-header = Dashboard +monitors = Monitors +unknown = Desconhecido diff --git a/src/main.rs b/src/main.rs index bd17241..3db3870 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,11 @@ use anyhow::Result; use clap::Parser; use std::result::Result::Ok; -mod i18n; -use i18n::init_locales; mod api; -use crate::core::unify_data; -use api::UptimeKumaClient; +mod i18n; use api::UptimeKumaEndpoints; + +use crate::ui::App; mod core; mod data; mod ui; @@ -22,39 +21,11 @@ struct Args { } fn main() -> Result<()> { - init_locales()?; + i18n::init_locales()?; let args = Args::parse(); - - let client = UptimeKumaClient::new(); let endpoints = UptimeKumaEndpoints::new(&args.base_url, &args.slug)?; - let heartbeat_data = client.fetch_heartbeat(&endpoints)?; - - let status_page_data = client.fetch_status_page(&endpoints)?; - - let unified_data = unify_data(&status_page_data, &heartbeat_data); - - println!("Title: {}", unified_data.title); - - for monitor in unified_data.monitors { - println!("Monitor ID: {}", monitor.monitor_info.id); - println!("Nome: {}", monitor.monitor_info.name); - println!( - "Uptime Service: {}", - monitor.uptime_data.expect("Formgen?").get_perc_formated() - ); - println!( - "Status atual: {}", - monitor - .heartbeats - .last() - .map(|h| if h.status == 1 { - "✅ Online" - } else { - "❌ Offline" - }) - .unwrap_or("❓ Sem dados") - ); - } + let mut app = App::new(endpoints)?; + app.run()?; Ok(()) } diff --git a/src/ui/app.rs b/src/ui/app.rs index a93a490..354b7a8 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -1,12 +1,11 @@ -use crate::api::{UptimeKumaClient, UptimeKumaEndpoints, endpoints}; +use crate::api::{UptimeKumaClient, UptimeKumaEndpoints}; use crate::core; -use crate::data::{self, HeartbeatResponse, StatusPageResponse, heartbeat, status_page}; -use crate::i18n::{t, t_with_args}; +use crate::i18n::{t}; use crate::ui::components::{render_header, render_monitor_list}; -use crate::ui::dashboard::model::{DashboardViewState, MonitorStatus}; +use crate::ui::dashboard::model::{DashboardViewState}; use crossterm::{ event::{ - self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind, KeyModifiers, + self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind, }, execute, terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}, @@ -15,7 +14,7 @@ use ratatui::{ Frame, Terminal, backend::CrosstermBackend, layout::{Alignment, Constraint, Direction, Layout, Rect}, - style::{Color, Modifier, Style, Stylize}, + style::{Color, Modifier, Style}, text::{Line, Span, Text}, widgets::{Block, Borders, ListState, Padding, Paragraph}, }; diff --git a/src/ui/components/header.rs b/src/ui/components/header.rs index b42b92c..a608b7a 100644 --- a/src/ui/components/header.rs +++ b/src/ui/components/header.rs @@ -12,7 +12,7 @@ pub fn render_header(frame: &mut Frame, area: Rect, state: &DashboardViewState) let title = if state.is_loading { t("loading").to_string() } else { - format!("{} - {}", t("dashboard-heaser"), state.title) + format!("{} - {}", t("dashboard-header"), state.title) }; let header = Paragraph::new(Line::from(vec![ diff --git a/src/ui/components/monitor_list.rs b/src/ui/components/monitor_list.rs index 8e47dfe..2cd60f5 100644 --- a/src/ui/components/monitor_list.rs +++ b/src/ui/components/monitor_list.rs @@ -4,10 +4,10 @@ use ratatui::style::Modifier; use ratatui::widgets::{List, ListItem, ListState}; use ratatui::{ Frame, - layout::{Alignment, Rect}, - style::{Color, Style, Stylize}, + layout::Rect, + style::{Color, Style}, text::{Line, Span}, - widgets::{Block, Borders, Paragraph}, + widgets::{Block, Borders}, }; pub fn render_monitor_list( @@ -28,7 +28,7 @@ pub fn render_monitor_list( let status_icon = match monitor.status { MonitorStatus::Up => "✅", MonitorStatus::Down => "❌", - MonitorStatus::Unknown => "?", + MonitorStatus::Unknown => "❓", }; let status_color = match monitor.status { diff --git a/src/ui/dashboard/model.rs b/src/ui/dashboard/model.rs index fb11b19..b353fcd 100644 --- a/src/ui/dashboard/model.rs +++ b/src/ui/dashboard/model.rs @@ -56,7 +56,7 @@ impl DashboardViewState { .last() .and_then(|h| h.ping) .map(|ms| format!("{}", ms)) - .unwrap_or_else(|| t("unknown").to_string()); + .unwrap_or_else(|| t("unknown").to_string() + " "); let uptime_24h = monitor .uptime_data