From 9bfb13f561884e321adc5b2c316277b23f46288e Mon Sep 17 00:00:00 2001 From: zk Date: Fri, 19 Jun 2026 17:38:53 +0100 Subject: [PATCH] fix: admin stash cron viewer is capped in a funny way (#1695) --- .../server/src/lib/admin/admin-queries.ts | 35 ++++++++++++++++--- .../src/server/router/api/v1/admin/router.ts | 2 +- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/typescript/server/src/lib/admin/admin-queries.ts b/typescript/server/src/lib/admin/admin-queries.ts index 501bf6764..4c2086755 100644 --- a/typescript/server/src/lib/admin/admin-queries.ts +++ b/typescript/server/src/lib/admin/admin-queries.ts @@ -7,6 +7,7 @@ import { SELECT_JOB_QUEUE, } from "#lib/db-formats/admin-jobs"; import DB from "#services/pg/db"; +import { sql } from "kysely"; export const ADMIN_PAGE_SIZE = 50; @@ -161,10 +162,34 @@ export function GetCronTasks(): Promise> { .execute(); } -export function GetCronTaskExecutions(limit = 100): Promise> { - return DB.selectFrom("cron_task_execution") - .select(SELECT_CRON_TASK_EXECUTION) - .orderBy("cron_task_execution.scheduled_at", "desc") - .limit(limit) +const CAP_PER_TASK_TYPE = 100; + +export async function GetCronTaskExecutions(): Promise> { + const rows = await DB.with("ranked", (db) => + db + .selectFrom("cron_task_execution") + .select([ + ...SELECT_CRON_TASK_EXECUTION, + sql`ROW_NUMBER() OVER (PARTITION BY cron_task_execution.task_id ORDER BY cron_task_execution.scheduled_at DESC)`.as( + "rn", + ), + ]) + .where("cron_task_execution.scheduled_at", ">=", adminRecentSinceIso()), + ) + .selectFrom("ranked") + .select([ + "ranked.id", + "ranked.task_id", + "ranked.scheduled_at", + "ranked.started_at", + "ranked.completed_at", + "ranked.status", + "ranked.output", + "ranked.error", + ]) + .where(sql`ranked.rn <= ${sql.lit(CAP_PER_TASK_TYPE)}`) + .orderBy("ranked.scheduled_at", "desc") .execute(); + + return rows as Array; } diff --git a/typescript/server/src/server/router/api/v1/admin/router.ts b/typescript/server/src/server/router/api/v1/admin/router.ts index 5c7b80ae2..24944cb3c 100644 --- a/typescript/server/src/server/router/api/v1/admin/router.ts +++ b/typescript/server/src/server/router/api/v1/admin/router.ts @@ -68,7 +68,7 @@ API_V1_ROUTER.add("GET /admin/actions", withAdmin, async ({ input }) => { }); API_V1_ROUTER.add("GET /admin/cron-tasks", withAdmin, async () => { - const [tasks, executions] = await Promise.all([GetCronTasks(), GetCronTaskExecutions(100)]); + const [tasks, executions] = await Promise.all([GetCronTasks(), GetCronTaskExecutions()]); return success("Done.", { executions, tasks }); });