37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
const stateLabels = {
|
|
online: '在线',
|
|
offline: '离线',
|
|
recovering: '恢复中',
|
|
ready: '正常',
|
|
unavailable: '不可用',
|
|
idle: '无待回填',
|
|
pending: '等待回填'
|
|
}
|
|
|
|
const eventLabels = {
|
|
heartbeat_received: '首次心跳',
|
|
heartbeat_timeout: '心跳超时',
|
|
node_recovered: '心跳恢复',
|
|
recovery_started: '开始恢复'
|
|
}
|
|
|
|
export function stateLabel(value) { return stateLabels[value] || value || '未知' }
|
|
export function eventLabel(value) { return eventLabels[value] || value || '状态变化' }
|
|
export function stateType(value) { return ({ online: 'success', offline: 'danger', recovering: 'warning', ready: 'success', unavailable: 'danger', idle: 'info', pending: 'warning' })[value] || 'info' }
|
|
export function freshnessText(item) {
|
|
if (!item?.lastHeartbeatAt) return '从未收到心跳'
|
|
const seconds = Math.max(0, Number(item.freshnessSeconds) || 0)
|
|
if (item.stale) return `已陈旧 ${durationText(seconds)}`
|
|
return `${durationText(seconds)}前`
|
|
}
|
|
export function durationText(seconds) {
|
|
const value = Math.max(0, Number(seconds) || 0)
|
|
if (value < 60) return `${Math.floor(value)} 秒`
|
|
if (value < 3600) return `${Math.floor(value / 60)} 分钟`
|
|
if (value < 86400) return `${Math.floor(value / 3600)} 小时`
|
|
return `${Math.floor(value / 86400)} 天`
|
|
}
|
|
export function buildEdgeNodeQuery(query) {
|
|
return { pageIndex: Number(query.pageIndex) || 1, pageSize: Number(query.pageSize) || 10 }
|
|
}
|