Files
hudi-service/service-web/client/src/pages/overview/Queue.tsx
2025-06-26 20:48:20 +08:00

96 lines
2.1 KiB
TypeScript

import {
amisRender,
commonInfo,
copyField,
crudCommonOptions,
paginationCommonOptions,
time,
yarnQueueCrud,
} from '../../util/amis.tsx'
const queueCrud = (name: string) => {
return {
type: 'crud',
title: name,
api: `${commonInfo.baseUrl}/queue/all?name=${name}`,
...crudCommonOptions(),
interval: 10000,
loadDataOnce: true,
perPage: 5,
headerToolbar: [
'reload',
'filter-toggler',
{
type: 'tpl',
tpl: '共 <span class=\'text-primary font-bold\'>${total|default:0}</span> 个任务',
},
paginationCommonOptions(false),
],
footerToolbar: [],
columns: [
{
name: 'data.flinkJobId',
label: '任务 ID',
width: 200,
...copyField('data.flinkJobId'),
},
{
name: 'data.alias',
label: '别名',
className: 'nowrap',
...copyField('data.alias'),
},
{
name: 'data.batch',
label: '批次',
width: 100,
type: 'tpl',
tpl: '<span class="label label-warning">${data.batch}</span>',
},
{
name: 'priority',
label: '优先级',
width: 60,
align: 'center',
type: 'tpl',
tpl: '<span class="label bg-info">${priority}</span>',
},
{
name: 'data.comment',
label: '备注',
className: 'nowrap',
},
{
name: 'createTime',
label: '任务提交时间',
...time('createTime'),
width: 160,
fixed: 'right',
},
],
}
}
const Queue = () => {
let items = []
for (let name of Object.keys(commonInfo.clusters.compaction)) {
// @ts-ignore
items.push(yarnQueueCrud(name, commonInfo.clusters.compaction[name]))
items.push(queueCrud(`compaction-queue-${name}`))
}
return (
<div className="hudi-queue">
{amisRender(
{
type: 'wrapper',
body: [
queueCrud('compaction-queue-pre'),
...items,
],
},
)}
</div>
)
}
export default Queue