Add /runner/:name endpoint

This commit is contained in:
Joscha 2023-08-10 21:26:57 +02:00
parent b5bdd49d9c
commit 0253d2d90b
6 changed files with 79 additions and 26 deletions

View file

@ -5,6 +5,7 @@ use time::OffsetDateTime;
use crate::{config::Config, shared::RunnerStatus};
#[derive(Clone)]
pub struct RunnerInfo {
pub secret: String,
pub last_seen: OffsetDateTime,
@ -81,4 +82,8 @@ impl Runners {
.find(|hash| !covered.contains(hash))
.map(|hash| hash as &str)
}
pub fn get(&self, name: &str) -> Option<RunnerInfo> {
self.runners.get(name).cloned()
}
}

View file

@ -2,6 +2,7 @@ mod api;
mod commit;
mod index;
mod queue;
mod runner;
mod r#static;
use axum::{routing::get, Router};
@ -44,6 +45,7 @@ pub async fn run(server: Server) -> somehow::Result<()> {
let app = Router::new()
.route("/", get(index::get))
.route("/commit/:hash", get(commit::get))
.route("/runner/:name", get(runner::get))
.route("/queue/", get(queue::get))
.route("/queue/table", get(queue::get_table))
.merge(api::router(&server))

42
src/server/web/runner.rs Normal file
View file

@ -0,0 +1,42 @@
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::Commit),
name,
last_seen: util::format_time(info.last_seen),
}
.into_response())
}