diff options
Diffstat (limited to 'src/web.rs')
-rw-r--r-- | src/web.rs | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -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)) { |