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-uptime-key-format = Invalid format for uptime key. Expected format "monitorID_period". Received key: {key}
|
||||||
invalid-monitor-id = Invalid monitor ID: {id}
|
invalid-monitor-id = Invalid monitor ID: {id}
|
||||||
invalid-period-hours = Invalid period in hours: {hours}
|
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-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-monitor-id = ID de monitor inválido: {id}
|
||||||
invalid-period-hours = Período em horas inválido: {hours}
|
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 anyhow::Result;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::result::Result::Ok;
|
use std::result::Result::Ok;
|
||||||
mod i18n;
|
|
||||||
use i18n::init_locales;
|
|
||||||
mod api;
|
mod api;
|
||||||
use crate::core::unify_data;
|
mod i18n;
|
||||||
use api::UptimeKumaClient;
|
|
||||||
use api::UptimeKumaEndpoints;
|
use api::UptimeKumaEndpoints;
|
||||||
|
|
||||||
|
use crate::ui::App;
|
||||||
mod core;
|
mod core;
|
||||||
mod data;
|
mod data;
|
||||||
mod ui;
|
mod ui;
|
||||||
|
|
@ -22,39 +21,11 @@ struct Args {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
init_locales()?;
|
i18n::init_locales()?;
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
|
||||||
let client = UptimeKumaClient::new();
|
|
||||||
let endpoints = UptimeKumaEndpoints::new(&args.base_url, &args.slug)?;
|
let endpoints = UptimeKumaEndpoints::new(&args.base_url, &args.slug)?;
|
||||||
|
|
||||||
let heartbeat_data = client.fetch_heartbeat(&endpoints)?;
|
let mut app = App::new(endpoints)?;
|
||||||
|
app.run()?;
|
||||||
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")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
use crate::api::{UptimeKumaClient, UptimeKumaEndpoints, endpoints};
|
use crate::api::{UptimeKumaClient, UptimeKumaEndpoints};
|
||||||
use crate::core;
|
use crate::core;
|
||||||
use crate::data::{self, HeartbeatResponse, StatusPageResponse, heartbeat, status_page};
|
use crate::i18n::{t};
|
||||||
use crate::i18n::{t, t_with_args};
|
|
||||||
use crate::ui::components::{render_header, render_monitor_list};
|
use crate::ui::components::{render_header, render_monitor_list};
|
||||||
use crate::ui::dashboard::model::{DashboardViewState, MonitorStatus};
|
use crate::ui::dashboard::model::{DashboardViewState};
|
||||||
use crossterm::{
|
use crossterm::{
|
||||||
event::{
|
event::{
|
||||||
self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind, KeyModifiers,
|
self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind,
|
||||||
},
|
},
|
||||||
execute,
|
execute,
|
||||||
terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
|
terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
|
||||||
|
|
@ -15,7 +14,7 @@ use ratatui::{
|
||||||
Frame, Terminal,
|
Frame, Terminal,
|
||||||
backend::CrosstermBackend,
|
backend::CrosstermBackend,
|
||||||
layout::{Alignment, Constraint, Direction, Layout, Rect},
|
layout::{Alignment, Constraint, Direction, Layout, Rect},
|
||||||
style::{Color, Modifier, Style, Stylize},
|
style::{Color, Modifier, Style},
|
||||||
text::{Line, Span, Text},
|
text::{Line, Span, Text},
|
||||||
widgets::{Block, Borders, ListState, Padding, Paragraph},
|
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 {
|
let title = if state.is_loading {
|
||||||
t("loading").to_string()
|
t("loading").to_string()
|
||||||
} else {
|
} else {
|
||||||
format!("{} - {}", t("dashboard-heaser"), state.title)
|
format!("{} - {}", t("dashboard-header"), state.title)
|
||||||
};
|
};
|
||||||
|
|
||||||
let header = Paragraph::new(Line::from(vec![
|
let header = Paragraph::new(Line::from(vec![
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ use ratatui::style::Modifier;
|
||||||
use ratatui::widgets::{List, ListItem, ListState};
|
use ratatui::widgets::{List, ListItem, ListState};
|
||||||
use ratatui::{
|
use ratatui::{
|
||||||
Frame,
|
Frame,
|
||||||
layout::{Alignment, Rect},
|
layout::Rect,
|
||||||
style::{Color, Style, Stylize},
|
style::{Color, Style},
|
||||||
text::{Line, Span},
|
text::{Line, Span},
|
||||||
widgets::{Block, Borders, Paragraph},
|
widgets::{Block, Borders},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn render_monitor_list(
|
pub fn render_monitor_list(
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn render_monitor_list(
|
||||||
let status_icon = match monitor.status {
|
let status_icon = match monitor.status {
|
||||||
MonitorStatus::Up => "✅",
|
MonitorStatus::Up => "✅",
|
||||||
MonitorStatus::Down => "❌",
|
MonitorStatus::Down => "❌",
|
||||||
MonitorStatus::Unknown => "?",
|
MonitorStatus::Unknown => "❓",
|
||||||
};
|
};
|
||||||
|
|
||||||
let status_color = match monitor.status {
|
let status_color = match monitor.status {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ impl DashboardViewState {
|
||||||
.last()
|
.last()
|
||||||
.and_then(|h| h.ping)
|
.and_then(|h| h.ping)
|
||||||
.map(|ms| format!("{}", ms))
|
.map(|ms| format!("{}", ms))
|
||||||
.unwrap_or_else(|| t("unknown").to_string());
|
.unwrap_or_else(|| t("unknown").to_string() + " ");
|
||||||
|
|
||||||
let uptime_24h = monitor
|
let uptime_24h = monitor
|
||||||
.uptime_data
|
.uptime_data
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue