diff --git a/amoro-ams/amoro-ams-dashboard/src/types/common.type.ts b/amoro-ams/amoro-ams-dashboard/src/types/common.type.ts index 2b136adedb..c2e0ba208b 100644 --- a/amoro-ams/amoro-ams-dashboard/src/types/common.type.ts +++ b/amoro-ams/amoro-ams-dashboard/src/types/common.type.ts @@ -242,6 +242,7 @@ export interface IOptimizeTableItem { quotaOccupationDesc: string duration: number durationDesc: string + durationDisplay: string fileSizeDesc: string tableIdentifier: ITableIdentifier tableNameOnly?: string diff --git a/amoro-ams/amoro-ams-dashboard/src/utils/index.ts b/amoro-ams/amoro-ams-dashboard/src/utils/index.ts index 4aab37a270..8d852e0837 100644 --- a/amoro-ams/amoro-ams-dashboard/src/utils/index.ts +++ b/amoro-ams/amoro-ams-dashboard/src/utils/index.ts @@ -57,51 +57,33 @@ export function mbToSize(size: number): string { /** * Convert ms to d h min s */ -export function formatMS2Time(time: number, fromHour?: boolean): string { - if (time === null || time === undefined || Number.isNaN(time)) { - return '-' - } - // 3h 34min 12s - const Second = 1000 - const Minute = Second * 60 - const Hour = Minute * 60 - const Day = Hour * 24 - if (time === 0) { - return '0 ms' - } - if (time < Second) { - return fromHour ? '0 min ' : `${time} ms` - } - if (time >= Second && time < Minute) { - const s = Math.floor(time / Second) - if (fromHour) { - return '0 min' - } - return s ? `${s} s` : '' - } - if (time >= Minute && time < Hour) { - const calcMin = Math.floor(time / Minute) - const s = Math.floor((time - calcMin * Minute) / Second) - if (fromHour) { - return `${calcMin} min` - } - else { - return time % Minute === 0 ? `${time / Minute} min` : `${calcMin} min ${s ? `${s} s` : ''}` - } - } - if (time % Hour === 0) { - return `${time / Hour} h` - } - if (time >= Hour && time < Day) { - const calcHour = Math.floor(time / Hour) - return `${calcHour} h ${formatMS2Time(time - calcHour * Hour, true)}` - } - if (time % Day === 0) { - return `${time / Day} d` - } +export function formatMS2Time(ms: number): string { + const secondsInMs = 1000 + const minutesInMs = secondsInMs * 60 + const hoursInMs = minutesInMs * 60 + const daysInMs = hoursInMs * 24 + + const days = Math.floor(ms / daysInMs) + ms %= daysInMs + + const hours = Math.floor(ms / hoursInMs) + ms %= hoursInMs + + const minutes = Math.floor(ms / minutesInMs) + ms %= minutesInMs + + const seconds = Math.floor(ms / secondsInMs) + + const times = [ + { value: days, unit: 'd' }, + { value: hours, unit: 'h' }, + { value: minutes, unit: 'min' }, + { value: seconds, unit: 's' }, + ] - const calcDay = Math.floor(time / Day) - return `${calcDay} d ${formatMS2Time(time - calcDay * Day, true)}` + return times.reduce((pre: string, cur: { value: number, unit: string }) => { + return cur.value > 0 ? `${pre}${cur.value} ${cur.unit} ` : pre + }, '') } /** * Convert milliseconds to d h min s format diff --git a/amoro-ams/amoro-ams-dashboard/src/views/optimize/components/List.vue b/amoro-ams/amoro-ams-dashboard/src/views/optimize/components/List.vue index a815b24f68..cebd16a728 100644 --- a/amoro-ams/amoro-ams-dashboard/src/views/optimize/components/List.vue +++ b/amoro-ams/amoro-ams-dashboard/src/views/optimize/components/List.vue @@ -91,8 +91,8 @@ async function getTableList() { pagination.total = total; (list || []).forEach((p: IOptimizeTableItem) => { p.quotaOccupationDesc = p.quotaOccupation - 0.0005 > 0 ? `${(p.quotaOccupation * 100).toFixed(1)}%` : '0' - p.durationDesc = formatMS2Time(p.duration || 0) as string - (p as any).durationDisplay = formatMS2DisplayTime(p.duration || 0) + p.durationDesc = p.duration ? formatMS2Time(p.duration) : '-' + p.durationDisplay = formatMS2DisplayTime(p.duration || 0) p.fileSizeDesc = bytesToSize(p.fileSize) dataSource.push(p) }) diff --git a/amoro-ams/amoro-ams-dashboard/src/views/resource/components/List.vue b/amoro-ams/amoro-ams-dashboard/src/views/resource/components/List.vue index 981e370995..6e9a206b30 100644 --- a/amoro-ams/amoro-ams-dashboard/src/views/resource/components/List.vue +++ b/amoro-ams/amoro-ams-dashboard/src/views/resource/components/List.vue @@ -197,13 +197,13 @@ const groupRecord = ref({ container: '', resourceOccupation: '', }) -const scaleOutViseble = ref(false) +const scaleOutVisible = ref(false) function scaleOutGroup(record: IIOptimizeGroupItem) { if (record.container === 'external') { return } groupRecord.value = { ...record } - scaleOutViseble.value = true + scaleOutVisible.value = true } function changeTable({ current = pagination.current, pageSize = pagination.pageSize }) { @@ -221,7 +221,10 @@ onMounted(() => { diff --git a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Optimizing.vue b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Optimizing.vue index eeb45138f8..f40558f684 100644 --- a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Optimizing.vue +++ b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Optimizing.vue @@ -107,7 +107,7 @@ async function refreshOptimizingProcesses() { startTime: item.startTime ? dateFormat(item.startTime) : '-', finishTime: item.finishTime ? dateFormat(item.finishTime) : '-', optimizingType: item.optimizingType ? item.optimizingType : '-', - duration: formatMS2Time(item.duration || '-'), + duration: item.duration ? formatMS2Time(item.duration) : '-', inputFiles: `${bytesToSize(inputFiles.totalSize)} / ${inputFiles.fileCnt}`, outputFiles: `${bytesToSize(outputFiles.totalSize)} / ${outputFiles.fileCnt}`, tasks: `${item.successTasks || '0'} / ${item.totalTasks || '0'}${item.runningTasks ? ` (${item.runningTasks} running)` : ''}`, @@ -186,7 +186,7 @@ async function refreshOptimizingTasks() { list.forEach((p: BreadcrumbOptimizingItem) => { p.startTime = p.startTime ? dateFormat(p.startTime) : '-' p.endTime = p.endTime ? dateFormat(p.endTime) : '-' - p.formatCostTime = formatMS2Time(p.costTime) + p.formatCostTime = p.costTime ? formatMS2Time(p.costTime) : '-' p.thread = p.optimizerToken ? `(${p.threadId})${p.optimizerToken}` : '-' p.partitionData = p.partitionData ? p.partitionData : '-' p.inputFilesDesc = `${bytesToSize(p.inputFiles.totalSize)} / ${p.inputFiles.fileCnt}`