From 5c82f815ae4c3bf07b7842354c0717fd33ec2f14 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 30 Aug 2024 00:03:15 +0200 Subject: [PATCH] nits runs page --- backend/windmill-api/src/jobs.rs | 6 +- .../src/lib/components/runs/JobLoader.svelte | 27 +++++-- .../components/runs/ManuelDatePicker.svelte | 56 +++++--------- .../(logged)/runs/[...path]/+page.svelte | 73 ++++++++++++------- 4 files changed, 91 insertions(+), 71 deletions(-) diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 5318cc7d2b..7ccb2e63f5 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -1578,7 +1578,11 @@ async fn list_jobs( None }; - let sql = if lq.success.is_none() && lq.label.is_none() { + let sql = if lq.success.is_none() + && lq.label.is_none() + && lq.created_or_started_before.is_none() + && lq.started_before.is_none() + { let mut sqlq = list_queue_jobs_query( &w_id, &ListQueueQuery { order_desc: Some(true), ..lq.into() }, diff --git a/frontend/src/lib/components/runs/JobLoader.svelte b/frontend/src/lib/components/runs/JobLoader.svelte index 57609dab9c..9190201d3e 100644 --- a/frontend/src/lib/components/runs/JobLoader.svelte +++ b/frontend/src/lib/components/runs/JobLoader.svelte @@ -20,7 +20,8 @@ export let label: string | null = null export let folder: string | null export let path: string | null - export let success: 'success' | 'suspended' | 'waiting' | 'failure' | 'running' | undefined = undefined + export let success: 'success' | 'suspended' | 'waiting' | 'failure' | 'running' | undefined = + undefined export let isSkipped: boolean = false export let showSchedules: boolean = true export let showFutureJobs: boolean = true @@ -46,7 +47,9 @@ export let refreshRate = 5000 export let syncQueuedRunsCount: boolean = true export let allWorkspaces: boolean = false - export let computeMinAndMax: (() => { minTs: string; maxTs: string } | undefined) | undefined + export let computeMinAndMax: + | (() => { minTs: string; maxTs: string | undefined } | undefined) + | undefined export let lookback: number = 0 export let perPage: number | undefined = undefined @@ -140,7 +143,12 @@ scriptPathStart: scriptPathStart, jobKinds, success: success == 'success' ? true : success == 'failure' ? false : undefined, - running: (success == 'running' || success == 'suspended' ) ? true : (success == 'waiting' ) ? false : undefined, + running: + success == 'running' || success == 'suspended' + ? true + : success == 'waiting' + ? false + : undefined, isSkipped: isSkipped ? undefined : false, // isFlowStep: jobKindsCat != 'all' ? false : undefined, hasNullParent: @@ -151,7 +159,10 @@ tag: tag === null || tag === '' ? undefined : tag, isNotSchedule: showSchedules == false ? true : undefined, suspended: success == 'waiting' ? false : success == 'suspended' ? true : undefined, - scheduledForBeforeNow: showFutureJobs == false || (success == 'waiting' || success == 'suspended') ? true : undefined, + scheduledForBeforeNow: + showFutureJobs == false || success == 'waiting' || success == 'suspended' + ? true + : undefined, args: argFilter && argFilter != '{}' && argFilter != '' && argError == '' ? argFilter @@ -296,8 +307,11 @@ } async function getCount() { - const { database_length, suspended} = (await JobService.getQueueCount({ workspace: $workspaceStore!, allWorkspaces })) - + const { database_length, suspended } = await JobService.getQueueCount({ + workspace: $workspaceStore!, + allWorkspaces + }) + if (queue_count) { queue_count.set(database_length) } else { @@ -307,7 +321,6 @@ suspended_count.set(suspended ?? 0) } else { suspended_count = tweened(suspended ?? 0, { duration: 1000 }) - } } diff --git a/frontend/src/lib/components/runs/ManuelDatePicker.svelte b/frontend/src/lib/components/runs/ManuelDatePicker.svelte index ef62b4281a..e2d18af0e8 100644 --- a/frontend/src/lib/components/runs/ManuelDatePicker.svelte +++ b/frontend/src/lib/components/runs/ManuelDatePicker.svelte @@ -8,13 +8,23 @@ export let loading: boolean = false export let selectedManualDate = 0 - export function computeMinMax(): { minTs: string; maxTs: string } | undefined { + export function computeMinMax(): { minTs: string; maxTs: string | undefined } | undefined { return manualDates[selectedManualDate].computeMinMax() } + export function resetChoice() { + selectedManualDate = 0 + } + + function computeMinMaxInc(inc: number) { + let minTs = new Date(new Date().getTime() - inc).toISOString() + let maxTs = undefined + return { minTs, maxTs } + } + const manualDates: { label: string - computeMinMax: () => { minTs: string; maxTs: string } | undefined + computeMinMax: () => { minTs: string; maxTs: string | undefined } | undefined }[] = [ { label: 'Last 1000 runs', @@ -24,59 +34,31 @@ }, { label: 'Within 30 seconds', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 30 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(30 * 1000) }, { label: 'Within last minute', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(1 * 60 * 1000) }, { label: 'Within last 5 minutes', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 5 * 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(5 * 60 * 1000) }, { label: 'Within last 30 minutes', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 30 * 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(30 * 60 * 1000) }, { label: 'Within last 24 hours', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 24 * 60 * 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(24 * 60 * 60 * 1000) }, { label: 'Within last 7 days', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(7 * 24 * 60 * 60 * 1000) }, { label: 'Within last month', - computeMinMax: () => { - let minTs = new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000).toISOString() - let maxTs = new Date().toISOString() - return { minTs, maxTs } - } + computeMinMax: () => computeMinMaxInc(30 * 24 * 60 * 60 * 1000) } ] diff --git a/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte index 020eaa6f88..f735d56969 100644 --- a/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte @@ -51,9 +51,12 @@ let concurrencyKey: string | null = $page.url.searchParams.get('concurrency_key') let tag: string | null = $page.url.searchParams.get('tag') // Rest of filters handled by RunsFilter - let success: 'running' | 'suspended' | 'waiting' | 'success' | 'failure' | undefined = ($page.url.searchParams.get( - 'success' - ) ?? undefined) as 'running' | 'success' | 'failure' | undefined + let success: 'running' | 'suspended' | 'waiting' | 'success' | 'failure' | undefined = + ($page.url.searchParams.get('success') ?? undefined) as + | 'running' + | 'success' + | 'failure' + | undefined let isSkipped: boolean | undefined = $page.url.searchParams.get('is_skipped') != undefined ? $page.url.searchParams.get('is_skipped') == 'true' @@ -88,7 +91,7 @@ let queue_count: Tweened | undefined = undefined let suspended_count: Tweened | undefined = undefined - + let jobKinds: string | undefined = undefined let loading: boolean = false let paths: string[] = [] @@ -297,7 +300,6 @@ concurrencyKey = null tag = null schedulePath = undefined - } function filterByUser(e: CustomEvent) { @@ -398,27 +400,31 @@ scriptPathStart: folder === null || folder === '' ? undefined : `f/${folder}/`, jobKinds, success: success == 'success' ? true : success == 'failure' ? false : undefined, - running: (success == 'running' || success == 'suspended' ) ? true : (success == 'waiting' ) ? false : undefined, + running: + success == 'running' || success == 'suspended' + ? true + : success == 'waiting' + ? false + : undefined, isSkipped: isSkipped ? undefined : false, // isFlowStep: jobKindsCat != 'all' ? false : undefined, hasNullParent: - path != undefined || path != undefined || jobKindsCat != 'all' - ? true - : undefined, + path != undefined || path != undefined || jobKindsCat != 'all' ? true : undefined, label: label === null || label === '' ? undefined : label, tag: tag === null || tag === '' ? undefined : tag, isNotSchedule: showSchedules == false ? true : undefined, suspended: success == 'waiting' ? false : success == 'suspended' ? true : undefined, - scheduledForBeforeNow: showFutureJobs == false || (success == 'waiting' || success == 'suspended') ? true : undefined, - args: - argFilter && argFilter != '{}' && argFilter != '' && argError == '' - ? argFilter + scheduledForBeforeNow: + showFutureJobs == false || success == 'waiting' || success == 'suspended' + ? true : undefined, + args: + argFilter && argFilter != '{}' && argFilter != '' && argError == '' ? argFilter : undefined, result: resultFilter && resultFilter != '{}' && resultFilter != '' && resultError == '' ? resultFilter : undefined, - allWorkspaces: allWorkspaces ? true : undefined, + allWorkspaces: allWorkspaces ? true : undefined } selectedFiltersString = JSON.stringify(selectedFilters, null, 4) @@ -451,7 +457,6 @@ extendedJobs !== undefined && extendedJobs.jobs.length + extendedJobs.obscured_jobs.length >= 1000 - function jobsFilter(f: 'waiting' | 'suspended') { path = null user = null @@ -678,6 +683,7 @@ on:zoom={async (e) => { minTs = e.detail.min.toISOString() maxTs = e.detail.max.toISOString() + manualDatePicker?.resetChoice() jobLoader?.loadJobs(minTs, maxTs, true) }} /> @@ -697,11 +703,17 @@
- { - jobsFilter('waiting') - }} on:jobs_suspended={() => { - jobsFilter('suspended') - }} /> + { + jobsFilter('waiting') + }} + on:jobs_suspended={() => { + jobsFilter('suspended') + }} + />
{#if isSelectingJobsToCancel}
@@ -774,7 +786,9 @@ localStorage.setItem('show_schedules_in_run', showSchedules ? 'true' : 'false') }} /> - Schedules + Schedules
@@ -1027,6 +1041,7 @@ on:zoom={async (e) => { minTs = e.detail.min.toISOString() maxTs = e.detail.max.toISOString() + manualDatePicker?.resetChoice() jobLoader?.loadJobs(minTs, maxTs, true) }} /> @@ -1047,11 +1062,17 @@
{#if queue_count} - { - jobsFilter('waiting') - }} on:jobs_suspended={() => { - jobsFilter('suspended') - }} /> + { + jobsFilter('waiting') + }} + on:jobs_suspended={() => { + jobsFilter('suspended') + }} + /> {/if}
{#if isSelectingJobsToCancel}