Testing ratatui
This commit is contained in:
parent
843d05bec9
commit
ae9065a1e0
7 changed files with 25 additions and 47 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
41
src/main.rs
41
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(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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![
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue