nits runs page

This commit is contained in:
Ruben Fiszel
2024-08-30 00:03:21 +02:00
parent 3ca89f552d
commit 5c82f815ae
4 changed files with 91 additions and 71 deletions
+5 -1
View File
@@ -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() },
@@ -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 })
}
}
@@ -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)
}
]
@@ -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<number> | undefined = undefined
let suspended_count: Tweened<number> | 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<string>) {
@@ -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 @@
</div>
<div class="flex flex-col gap-1 md:flex-row w-full p-4">
<div class="flex gap-2 grow flex-row">
<RunsQueue {success} {queue_count} {suspended_count} on:jobs_waiting={() => {
jobsFilter('waiting')
}} on:jobs_suspended={() => {
jobsFilter('suspended')
}} />
<RunsQueue
{success}
{queue_count}
{suspended_count}
on:jobs_waiting={() => {
jobsFilter('waiting')
}}
on:jobs_suspended={() => {
jobsFilter('suspended')
}}
/>
<div class="flex flex-row">
{#if isSelectingJobsToCancel}
<div class="mt-1 p-2 h-8 flex flex-row items-center gap-1">
@@ -774,7 +786,9 @@
localStorage.setItem('show_schedules_in_run', showSchedules ? 'true' : 'false')
}}
/>
<span class="text-xs absolute -top-4"><span class="hidden xl:inline">CRON</span> Schedules</span>
<span class="text-xs absolute -top-4"
><span class="hidden xl:inline">CRON</span> Schedules</span
>
<Calendar size={16} />
</div>
@@ -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 @@
<div class="flex flex-col gap-4 md:flex-row w-full p-4 overflow-x-auto">
<div class="flex items-center flex-row gap-2 grow">
{#if queue_count}
<RunsQueue {success} {queue_count} {suspended_count} on:jobs_waiting={() => {
jobsFilter('waiting')
}} on:jobs_suspended={() => {
jobsFilter('suspended')
}} />
<RunsQueue
{success}
{queue_count}
{suspended_count}
on:jobs_waiting={() => {
jobsFilter('waiting')
}}
on:jobs_suspended={() => {
jobsFilter('suspended')
}}
/>
{/if}
<div class="flex flex-row">
{#if isSelectingJobsToCancel}