aboutsummaryrefslogtreecommitdiff
path: root/src/web.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/web.rs')
-rw-r--r--src/web.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/web.rs b/src/web.rs
index 0080697..daf5101 100644
--- a/src/web.rs
+++ b/src/web.rs
@@ -1,4 +1,4 @@
-use crate::{Check, Config, Service, Success, STATUS};
+use crate::{log::LOG, Check, Config, Service, Success, STATUS};
use anyhow::Result;
use axum::response::Html;
use markup::{doctype, Render};
@@ -8,6 +8,8 @@ pub async fn send_html_page(config: Arc<Config>) -> Html<String> {
let mut out = String::new();
let status = STATUS.read().await;
let status = status.deref();
+ let log = LOG.read().await;
+ let log = log.deref();
#[cfg(not(debug_assertions))]
let css = include_str!("style.css");
@@ -29,6 +31,23 @@ pub async fn send_html_page(config: Arc<Config>) -> Html<String> {
@for (i, service) in config.services.iter().enumerate() {
@ServiceCard { i, status, service }
}
+ div.log {
+ h2 { "Past Events" }
+ ul {
+ @for event in log.iter() {
+ li.{if event.error.is_some() { "error" } else { "ok" }} {
+ @let service = &config.services[event.service];
+ b { @event.time.to_rfc2822() ": " }
+ @service.title " "
+ @if let Some(error) = &event.error {
+ " failed. " @service.checks[event.check].display() " reported " @error
+ } else {
+ " is working again."
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -43,6 +62,7 @@ markup::define!(
@let any_err = status.range((*i,usize::MIN)..(*i,usize::MAX)).any(|(_,v)|v.is_err());
div.service.{if any_err { "error" } else { "ok" }} {
h2 { @service.title }
+ @if let Some(url) = &service.url { a[href=url] { "Link" } }
div.checks {
@for (j, check) in service.checks.iter().enumerate() {
@if let Some(status) = status.get(&(*i, j)) {