aboutsummaryrefslogtreecommitdiff
path: root/src/web.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-05-03 22:57:30 +0200
committermetamuffin <metamuffin@disroot.org>2024-05-03 22:57:30 +0200
commit8448c9c87a91f9f0b35f45b9cc1ae437b79ecb0d (patch)
tree3e5fa7c0c8fc43e664980d3ca128ad6cb3d20ce1 /src/web.rs
parent2171eb57378eb33db70a1e54f953590fa13ade4a (diff)
downloadstatuspage-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.rs41
1 files changed, 17 insertions, 24 deletions
diff --git a/src/web.rs b/src/web.rs
index daf5101..b0d2ca9 100644
--- a/src/web.rs
+++ b/src/web.rs
@@ -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())
- }
-}