From af11d54d0c81fc3edc70080186577f5f9ba9870d Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 17 Aug 2023 19:00:35 +0200 Subject: [PATCH] Add button to batch-queue commits without runs --- ...b22c584e528b4dac6ee1103c071eb29282f17.json | 12 +++++ src/server/web.rs | 5 +- src/server/web/admin/queue.rs | 47 ++++++++++++++++++- src/server/web/pages/queue.rs | 21 +++++---- src/server/web/paths.rs | 4 ++ templates/pages/commit.html | 2 +- templates/pages/queue_inner.html | 13 ++++- 7 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 .sqlx/query-ee811ca799590d80f1c76a8625ab22c584e528b4dac6ee1103c071eb29282f17.json diff --git a/.sqlx/query-ee811ca799590d80f1c76a8625ab22c584e528b4dac6ee1103c071eb29282f17.json b/.sqlx/query-ee811ca799590d80f1c76a8625ab22c584e528b4dac6ee1103c071eb29282f17.json new file mode 100644 index 0000000..5309d27 --- /dev/null +++ b/.sqlx/query-ee811ca799590d80f1c76a8625ab22c584e528b4dac6ee1103c071eb29282f17.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT OR IGNORE INTO queue (hash, date, priority) SELECT hash, ?, ? FROM commits LEFT JOIN runs USING (hash) WHERE reachable = 2 AND id IS NULL ORDER BY unixepoch(committer_date) DESC LIMIT ? ", + "describe": { + "columns": [], + "parameters": { + "Right": 3 + }, + "nullable": [] + }, + "hash": "ee811ca799590d80f1c76a8625ab22c584e528b4dac6ee1103c071eb29282f17" +} diff --git a/src/server/web.rs b/src/server/web.rs index c66c1e2..636f627 100644 --- a/src/server/web.rs +++ b/src/server/web.rs @@ -14,8 +14,8 @@ use crate::somehow; use self::{ admin::{ queue::{ - post_admin_queue_add, post_admin_queue_decrease, post_admin_queue_delete, - post_admin_queue_increase, + post_admin_queue_add, post_admin_queue_add_batch, post_admin_queue_decrease, + post_admin_queue_delete, post_admin_queue_increase, }, repo::post_admin_repo_update, }, @@ -55,6 +55,7 @@ pub async fn run(server: Server) -> somehow::Result<()> { .typed_get(get_run_by_id) .typed_get(get_worker_by_name) .typed_post(post_admin_queue_add) + .typed_post(post_admin_queue_add_batch) .typed_post(post_admin_queue_decrease) .typed_post(post_admin_queue_delete) .typed_post(post_admin_queue_increase) diff --git a/src/server/web/admin/queue.rs b/src/server/web/admin/queue.rs index 06527d5..30b8d9a 100644 --- a/src/server/web/admin/queue.rs +++ b/src/server/web/admin/queue.rs @@ -13,8 +13,8 @@ use crate::{ server::web::{ base::Base, paths::{ - PathAdminQueueAdd, PathAdminQueueDecrease, PathAdminQueueDelete, - PathAdminQueueIncrease, PathQueue, + PathAdminQueueAdd, PathAdminQueueAddBatch, PathAdminQueueDecrease, + PathAdminQueueDelete, PathAdminQueueIncrease, PathQueue, }, }, somehow, @@ -56,6 +56,49 @@ pub async fn post_admin_queue_add( Ok(Redirect::to(&format!("{link}"))) } +#[derive(Deserialize)] +pub struct FormAdminQueueAddBatch { + amount: u32, + #[serde(default)] + priority: i32, +} + +pub async fn post_admin_queue_add_batch( + _path: PathAdminQueueAddBatch, + State(config): State<&'static ServerConfig>, + State(db): State, + Form(form): Form, +) -> somehow::Result { + let date = OffsetDateTime::now_utc(); + let added = sqlx::query!( + "\ + INSERT OR IGNORE INTO queue (hash, date, priority) \ + SELECT hash, ?, ? \ + FROM commits \ + LEFT JOIN runs USING (hash) \ + WHERE reachable = 2 AND id IS NULL \ + ORDER BY unixepoch(committer_date) DESC \ + LIMIT ? \ + ", + date, + form.priority, + form.amount, + ) + .execute(&db) + .await? + .rows_affected(); + + if added > 0 { + info!( + "Admin batch-added {added} commits to queue with priority {}", + form.priority, + ); + } + + let link = Base::link_with_config(config, PathQueue {}); + Ok(Redirect::to(&format!("{link}"))) +} + #[derive(Deserialize)] pub struct FormAdminQueueDelete { hash: String, diff --git a/src/server/web/pages/queue.rs b/src/server/web/pages/queue.rs index 693ee18..6fe6252 100644 --- a/src/server/web/pages/queue.rs +++ b/src/server/web/pages/queue.rs @@ -20,8 +20,8 @@ use crate::{ base::{Base, Link, Tab}, link::{LinkCommit, LinkRunShort, LinkWorker}, paths::{ - PathAdminQueueDecrease, PathAdminQueueDelete, PathAdminQueueIncrease, PathQueue, - PathQueueDelete, PathQueueInner, + PathAdminQueueAddBatch, PathAdminQueueDecrease, PathAdminQueueDelete, + PathAdminQueueIncrease, PathQueue, PathQueueDelete, PathQueueInner, }, r#static::QUEUE_JS, }, @@ -155,6 +155,7 @@ async fn get_queue_data( #[derive(Template)] #[template(path = "pages/queue_inner.html")] struct PageInner { + link_admin_queue_add_batch: Link, workers: Vec, tasks: Vec, } @@ -167,9 +168,11 @@ pub async fn get_queue_inner( ) -> somehow::Result { let base = Base::new(config, Tab::Queue); let sorted_workers = sorted_workers(&workers); - let workers = get_workers(&db, &sorted_workers, &base).await?; - let tasks = get_queue_data(&db, &sorted_workers, &base).await?; - Ok(PageInner { workers, tasks }) + Ok(PageInner { + link_admin_queue_add_batch: base.link(PathAdminQueueAddBatch {}), + workers: get_workers(&db, &sorted_workers, &base).await?, + tasks: get_queue_data(&db, &sorted_workers, &base).await?, + }) } #[derive(Template)] @@ -188,12 +191,14 @@ pub async fn get_queue( ) -> somehow::Result { let base = Base::new(config, Tab::Queue); let sorted_workers = sorted_workers(&workers); - let workers = get_workers(&db, &sorted_workers, &base).await?; - let tasks = get_queue_data(&db, &sorted_workers, &base).await?; Ok(Page { link_queue_js: base.link(QUEUE_JS), + inner: PageInner { + link_admin_queue_add_batch: base.link(PathAdminQueueAddBatch {}), + workers: get_workers(&db, &sorted_workers, &base).await?, + tasks: get_queue_data(&db, &sorted_workers, &base).await?, + }, base, - inner: PageInner { workers, tasks }, }) } diff --git a/src/server/web/paths.rs b/src/server/web/paths.rs index d7c98da..6c4ebd5 100644 --- a/src/server/web/paths.rs +++ b/src/server/web/paths.rs @@ -61,6 +61,10 @@ pub struct PathAdminRepoUpdate {} #[typed_path("/admin/queue/add")] pub struct PathAdminQueueAdd {} +#[derive(Deserialize, TypedPath)] +#[typed_path("/admin/queue/add_batch")] +pub struct PathAdminQueueAddBatch {} + #[derive(Deserialize, TypedPath)] #[typed_path("/admin/queue/delete")] pub struct PathAdminQueueDelete {} diff --git a/templates/pages/commit.html b/templates/pages/commit.html index ec83c3d..ba58742 100644 --- a/templates/pages/commit.html +++ b/templates/pages/commit.html @@ -52,7 +52,7 @@ There aren't any runs yet. with a of - . + . {% endblock %} diff --git a/templates/pages/queue_inner.html b/templates/pages/queue_inner.html index 70e7606..63a7b7d 100644 --- a/templates/pages/queue_inner.html +++ b/templates/pages/queue_inner.html @@ -66,5 +66,16 @@ {% endfor %} - + +
+ + + +