tablejohn/src/server/web/runner.rs
2023-08-10 22:04:30 +02:00

42 lines
895 B
Rust

use std::sync::{Arc, Mutex};
use askama::Template;
use axum::{
extract::{Path, State},
http::StatusCode,
response::{IntoResponse, Response},
};
use crate::{
config::Config,
server::{runners::Runners, util},
somehow,
};
use super::{Base, Tab};
#[derive(Template)]
#[template(path = "runner.html")]
struct RunnerTemplate {
base: Base,
name: String,
last_seen: String,
// TODO Status
}
pub async fn get(
Path(name): Path<String>,
State(config): State<&'static Config>,
State(runners): State<Arc<Mutex<Runners>>>,
) -> somehow::Result<Response> {
let Some(info) = runners.lock().unwrap().get(&name) else {
return Ok(StatusCode::NOT_FOUND.into_response());
};
Ok(RunnerTemplate {
base: Base::new(config, Tab::None),
name,
last_seen: util::format_time(info.last_seen),
}
.into_response())
}