diff options
author | metamuffin <metamuffin@disroot.org> | 2024-05-03 22:57:30 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-05-03 22:57:30 +0200 |
commit | 8448c9c87a91f9f0b35f45b9cc1ae437b79ecb0d (patch) | |
tree | 3e5fa7c0c8fc43e664980d3ca128ad6cb3d20ce1 /src/web.rs | |
parent | 2171eb57378eb33db70a1e54f953590fa13ade4a (diff) | |
download | statuspage-8448c9c87a91f9f0b35f45b9cc1ae437b79ecb0d.tar statuspage-8448c9c87a91f9f0b35f45b9cc1ae437b79ecb0d.tar.bz2 statuspage-8448c9c87a91f9f0b35f45b9cc1ae437b79ecb0d.tar.zst |
pacman and success output
Diffstat (limited to 'src/web.rs')
-rw-r--r-- | src/web.rs | 41 |
1 files changed, 17 insertions, 24 deletions
@@ -1,8 +1,8 @@ -use crate::{log::LOG, Check, Config, Service, Success, STATUS}; -use anyhow::Result; +use crate::{log::LOG, Check, Config, Service, Status, STATUS}; use axum::response::Html; +use chrono::SubsecRound; use markup::{doctype, Render}; -use std::{collections::BTreeMap, ops::Deref, sync::Arc, time::Duration}; +use std::{collections::BTreeMap, ops::Deref, sync::Arc}; pub async fn send_html_page(config: Arc<Config>) -> Html<String> { let mut out = String::new(); @@ -35,11 +35,11 @@ pub async fn send_html_page(config: Arc<Config>) -> Html<String> { h2 { "Past Events" } ul { @for event in log.iter() { - li.{if event.error.is_some() { "error" } else { "ok" }} { + li.{if event.status.status.is_ok() { "ok" } else { "error" }} { @let service = &config.services[event.service]; - b { @event.time.to_rfc2822() ": " } + b { @event.status.time.to_rfc2822() ": " } @service.title " " - @if let Some(error) = &event.error { + @if let Err(error) = &event.status.status { " failed. " @service.checks[event.check].display() " reported " @error } else { " is working again." @@ -58,8 +58,8 @@ pub async fn send_html_page(config: Arc<Config>) -> Html<String> { } markup::define!( - ServiceCard<'a>(status: &'a BTreeMap<(usize, usize), Result<Success>>, service: &'a Service, i: usize) { - @let any_err = status.range((*i,usize::MIN)..(*i,usize::MAX)).any(|(_,v)|v.is_err()); + ServiceCard<'a>(status: &'a BTreeMap<(usize, usize), Status>, service: &'a Service, i: usize) { + @let any_err = status.range((*i,usize::MIN)..(*i,usize::MAX)).any(|(_,v)|v.status.is_err()); div.service.{if any_err { "error" } else { "ok" }} { h2 { @service.title } @if let Some(url) = &service.url { a[href=url] { "Link" } } @@ -67,19 +67,19 @@ markup::define!( @for (j, check) in service.checks.iter().enumerate() { @if let Some(status) = status.get(&(*i, j)) { span.name { @check.display() } - @match status { - Ok(Success { latency, updated }) => { + @match &status.status { + Ok(s) => { span.status.ok { "Ok" } - span.details.ok { - "Checked " @format_duration(updated.elapsed().unwrap_or_default()) " ago" - @if let Some(latency) = latency { ", took " @format_duration(*latency) } "." - } + span.details.ok { @s } } - Err(e) => { + Err(s) => { span.status.error { "Error" } - span.details { @format!("{e}") } + span.details.error { @s } } } + span.time { + @status.time.time().round_subsecs(0).to_string() + } } } } @@ -93,14 +93,7 @@ impl Check { Check::Systemd(_) => "Service".to_string(), Check::Http { title, .. } => title.clone().unwrap_or("HTTP".to_string()), Check::Shell { title, .. } => title.to_owned(), + Check::Pacman(_) => "Installed".to_string(), } } } - -fn format_duration(d: Duration) -> String { - if d.as_millis() < 1500 { - format!("{}ms", d.as_millis()) - } else { - format!("{}s", d.as_secs()) - } -} |