17 lines
1.2 KiB
JavaScript
17 lines
1.2 KiB
JavaScript
const terminal = new Set(['complete','failed','cancelled'])
|
|
const running = new Set(['waking','submitting','rendering','saving'])
|
|
export function queueJobs(jobs) {
|
|
return jobs.filter(j=>running.has(j.state)||['waiting','queued','held'].includes(j.state)).sort((a,b)=>Number(running.has(b.state))-Number(running.has(a.state)) || (a.queuedAt||0)-(b.queuedAt||0))
|
|
}
|
|
export function jobView(record, queue, live) {
|
|
const statuses={complete:'complete',error:'failed',cancelled:'cancelled'}
|
|
const state=statuses[queue?.status] || (!live?.saving && statuses[live?.status]) || (queue?.status==='held'?'held':record.state)
|
|
const finishedAt=terminal.has(state)?record.finishedAt || (statuses[queue?.status]?queue.updatedAt:0) || (state==='complete'?record.savedAt:0) || record.updatedAt || record.startedAt || record.queuedAt:undefined
|
|
return {...record,state,finishedAt,error:record.error || queue?.lastError || live?.error}
|
|
}
|
|
export function elapsedSeconds(job, now) {
|
|
const start=job.startedAt || job.queuedAt
|
|
const end=terminal.has(job.state)?job.finishedAt || job.savedAt || job.updatedAt || start:now
|
|
return Number.isFinite(start)&&Number.isFinite(end)?Math.max(0,Math.floor((end-start)/1000)):0
|
|
}
|