124 lines
2.7 KiB
Text
124 lines
2.7 KiB
Text
.
|
|
├── Cargo.toml
|
|
├── formgen.txt
|
|
├── .gitignore
|
|
└── src
|
|
├── i18n
|
|
│ ├── loader.rs
|
|
│ ├── mod.rs
|
|
│ └── translate.rs
|
|
├── locales
|
|
│ ├── en-US
|
|
│ │ └── main.ftl
|
|
│ └── pt-BR
|
|
│ └── main.ftl
|
|
└── main.rs
|
|
|
|
6 directories, 9 files
|
|
|
|
|
|
=== CONTEÚDO DOS ARQUIVOS ===
|
|
|
|
|
|
=== ./src/main.rs ===
|
|
|
|
use anyhow::{Ok, Result};
|
|
use clap::Parser;
|
|
use reqwest::blocking::Client;
|
|
mod i18n;
|
|
use i18n::{init_locales, t};
|
|
|
|
#[derive(Debug, Parser)]
|
|
#[command(author, version, about)]
|
|
struct Args {
|
|
#[arg(short, long, env = "UPTIME_KUMA_URL")]
|
|
url: Option<String>,
|
|
|
|
#[arg(short, long, env = "UPTIME_KUMA_API_KEY")]
|
|
api_key: Option<String>,
|
|
}
|
|
|
|
fn main() -> Result<()> {
|
|
init_locales()?;
|
|
|
|
let args = Args::parse();
|
|
let url = args
|
|
.url
|
|
.as_deref()
|
|
.ok_or_else(|| anyhow::anyhow!("{}", t("missing_url")))?;
|
|
let api_key = args
|
|
.api_key
|
|
.as_deref()
|
|
.ok_or_else(|| anyhow::anyhow!("{}", t("missing_api_key")))?;
|
|
|
|
let client = Client::new();
|
|
|
|
let response = client.get(url).basic_auth("", Some(api_key)).send()?;
|
|
|
|
if response.status().is_success() {
|
|
let metrics = response.text()?;
|
|
println!("{}", t("success"));
|
|
println!("{}", t("metrics_preview"));
|
|
println!("{}", &metrics[..200.min(metrics.len())]);
|
|
} else {
|
|
println!("{}", response.status());
|
|
println!("{}: {}", t("Response"), response.text()?);
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
=== ./src/i18n/translate.rs ===
|
|
|
|
use crate::i18n::loader::LOCALES;
|
|
use fluent_templates::Loader;
|
|
use std::str::FromStr;
|
|
use unic_langid::LanguageIdentifier;
|
|
|
|
fn get_sys_locale() -> LanguageIdentifier {
|
|
let sys_lang = sys_locale::get_locale().unwrap_or_else(|| String::from("pt-BR"));
|
|
LanguageIdentifier::from_str(&sys_lang).expect("Invalid language")
|
|
}
|
|
|
|
pub fn t(key: &str) -> String {
|
|
LOCALES.lookup(&get_sys_locale(), key)
|
|
}
|
|
|
|
=== ./src/i18n/loader.rs ===
|
|
|
|
use anyhow::Ok;
|
|
use fluent_templates::static_loader;
|
|
|
|
static_loader! {
|
|
pub static LOCALES = {
|
|
locales: "./src/locales",
|
|
fallback_language: "pt-BR",
|
|
customise: |bundle| bundle.set_use_isolating(false),
|
|
};
|
|
}
|
|
|
|
pub fn init_locales() -> anyhow::Result<()> {
|
|
Ok(())
|
|
}
|
|
|
|
=== ./src/i18n/mod.rs ===
|
|
|
|
pub mod loader;
|
|
pub mod translate;
|
|
|
|
pub use loader::init_locales;
|
|
pub use translate::t;
|
|
|
|
=== ./Cargo.toml ===
|
|
|
|
[package]
|
|
name = "uptime-kuma-dashboard"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
|
|
[dependencies]
|
|
clap = { version = "4.5", features = ["derive", "env"] }
|
|
reqwest = { version = "0.12", features = ["blocking", "json"] }
|
|
anyhow = "1.0"
|
|
fluent-templates = "0.13.2"
|
|
unic-langid = "0.9.6"
|
|
sys-locale = "0.3.2"
|