Fix runners not disappearing

This commit is contained in:
Joscha 2023-08-10 23:35:20 +02:00
parent 2079d0b12d
commit b16b3a668e
5 changed files with 10 additions and 8 deletions

View file

@ -35,9 +35,11 @@ impl Runners {
} }
} }
pub fn clean(&mut self, now: OffsetDateTime) { pub fn clean(&mut self) -> &mut Self {
let now = OffsetDateTime::now_utc();
self.runners self.runners
.retain(|_, v| now <= v.last_seen + self.config.web_runner_timeout) .retain(|_, v| now <= v.last_seen + self.config.web_runner_timeout);
self
} }
pub fn verify(&self, name: &str, secret: &str) -> bool { pub fn verify(&self, name: &str, secret: &str) -> bool {

View file

@ -37,7 +37,6 @@ async fn post_status(
Err(response) => return Ok(response), Err(response) => return Ok(response),
}; };
let now = OffsetDateTime::now_utc();
let queue = sqlx::query_scalar!( let queue = sqlx::query_scalar!(
"\ "\
SELECT hash FROM queue \ SELECT hash FROM queue \
@ -48,13 +47,13 @@ async fn post_status(
.await?; .await?;
let mut guard = runners.lock().unwrap(); let mut guard = runners.lock().unwrap();
guard.clean(now); guard.clean();
if !guard.verify(&name, &request.secret) { if !guard.verify(&name, &request.secret) {
return Ok((StatusCode::UNAUTHORIZED, "invalid secret").into_response()); return Ok((StatusCode::UNAUTHORIZED, "invalid secret").into_response());
} }
guard.update( guard.update(
name.clone(), name.clone(),
RunnerInfo::new(request.secret, now, request.status), RunnerInfo::new(request.secret, OffsetDateTime::now_utc(), request.status),
); );
let work = match request.request_work { let work = match request.request_work {
true => guard.find_free_work(&queue), true => guard.find_free_work(&queue),

View file

@ -9,8 +9,7 @@ use sqlx::SqlitePool;
use crate::{config::Config, server::util, somehow}; use crate::{config::Config, server::util, somehow};
use super::{Base, Tab, link::CommitLink}; use super::{link::CommitLink, Base, Tab};
#[derive(Template)] #[derive(Template)]
#[template(path = "commit.html")] #[template(path = "commit.html")]

View file

@ -46,6 +46,7 @@ fn sorted_runners(runners: &Mutex<Runners>) -> Vec<(String, RunnerInfo)> {
let mut runners = runners let mut runners = runners
.lock() .lock()
.unwrap() .unwrap()
.clean()
.get_all() .get_all()
.into_iter() .into_iter()
.collect::<Vec<_>>(); .collect::<Vec<_>>();

View file

@ -29,7 +29,8 @@ pub async fn get(
State(config): State<&'static Config>, State(config): State<&'static Config>,
State(runners): State<Arc<Mutex<Runners>>>, State(runners): State<Arc<Mutex<Runners>>>,
) -> somehow::Result<Response> { ) -> somehow::Result<Response> {
let Some(info) = runners.lock().unwrap().get(&name) else { let info = runners.lock().unwrap().clean().get(&name);
let Some(info) = info else {
return Ok(StatusCode::NOT_FOUND.into_response()); return Ok(StatusCode::NOT_FOUND.into_response());
}; };