fix(selfop): distinguish preparation progress from warehouse tasks
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import type { Task } from './types'
|
||||
import { label, phaseText, quantityText, unitText } from './state'
|
||||
|
||||
export function taskStateText(task: Task | null | undefined) {
|
||||
if (!task) return '尚无任务'
|
||||
const states: Record<string, string> = { WAITING_SOURCE: '等待数据准备', WAITING_UPSTREAM: '等待数据准备', READY: '等待执行', QUEUED: '等待执行', WAITING: '等待执行', RUNNING: '正在执行', RETRY_WAIT: '等待重试', YIELDED: '等待请求额度', DEAD: '已停止,需处理', SUCCEEDED: '执行完成', FAILED: '执行失败' }
|
||||
return states[task.taskStatus] ?? label(task.taskStatus)
|
||||
}
|
||||
export function taskProgressText(task: Task | null | undefined) {
|
||||
if (!task) return '尚无任务'
|
||||
if (['WAITING_SOURCE', 'WAITING_UPSTREAM'].includes(task.taskStatus)) return '尚未开始,等待数据准备'
|
||||
if (task.attemptCount === 0 && ['READY', 'QUEUED', 'WAITING'].includes(task.taskStatus)) return '尚未开始,等待执行'
|
||||
const progress = task.progress
|
||||
if (!progress?.phase) return task.taskStatus === 'SUCCEEDED' ? '本任务执行完成' : '当前进度尚未提供'
|
||||
const phase = phaseText(progress.phase)
|
||||
if (progress.completed == null || !progress.unit || progress.unit === 'NONE') return phase
|
||||
const amount = `${quantityText(progress.completed)}${unitText(progress.unit)}`
|
||||
if (!progress.totalKnown || progress.total == null) return `${phase},已处理 ${amount},总量尚未确定`
|
||||
const total = Number(progress.total), completed = Number(progress.completed)
|
||||
const percent = Number.isFinite(total) && Number.isFinite(completed) && total > 0 && completed >= 0 && completed <= total ? `(${Math.floor(completed / total * 1000) / 10}%,当前阶段)` : ''
|
||||
return `${phase},已处理 ${quantityText(progress.completed)} / ${quantityText(progress.total)}${unitText(progress.unit)}${percent}`
|
||||
}
|
||||
export function taskCompletionText(task: Task | null | undefined) {
|
||||
if (!task) return '—'
|
||||
if (task.resultPublicationState === 'PUBLISHED' || task.resultPublicationState === 'REUSED') return '结果已可用'
|
||||
if (task.taskStatus === 'SUCCEEDED') return '执行完成,结果尚未发布'
|
||||
if (['DEAD', 'FAILED', 'ABORTED'].includes(task.taskStatus)) return '已停止,需先处理异常'
|
||||
return '完成时间暂无法预计'
|
||||
}
|
||||
Reference in New Issue
Block a user