From 0c4cb405f9b166398a2bf7e128c47fa56dfa2d71 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 17 May 2025 18:27:00 +0200 Subject: enqueue works --- src/webui.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/webui.rs (limited to 'src/webui.rs') diff --git a/src/webui.rs b/src/webui.rs new file mode 100644 index 0000000..9e8b9c3 --- /dev/null +++ b/src/webui.rs @@ -0,0 +1,63 @@ +use crate::State; +use axum::extract::State as S; +use axum::response::Html; +use serde_json::{Map, Value}; +use std::sync::Arc; +use tokio::sync::RwLock; + +pub(crate) async fn webui(S(state): S>>) -> Html { + let g = state.read().await; + + let doc = markup::new! { + html { + head { + meta[charset="UTF-8"]; + title { "" } + } + body { + section { + h2 { "Workers"} + ul { @for (id, w) in &g.workers { + li { div { + h3 { @w.name } + span { "ID: " @id } " " + @if w.accept > 0 { + span { "Accepting Jobs (" @w.accept ")" } + } else { + span { "Idle" } + } + }} + }} + } + section { + h2 { "Queued" } + ul { @for key in &g.queue { + li { @key } + }} + } + section { + h2 { "Loading" } + ul { @for key in &g.loading { + li { @key } + }} + } + section { + h2 { "Completed" } + ul { @for key in &g.complete { + li { @key } + }} + } + } + } + }; + Html(doc.to_string()) +} + +markup::define!( + Task<'a>(key: &'a str, data: &'a Map) { + div.task { + h3 { @data["title"].as_str().unwrap_or(key) } + spawn.key { @key } + } + } +); -- cgit v1.2.3-70-g09d2