import { visualForStatus } from './pointStatus.js' export const POINT_ABNORMAL_BUCKETS = ['ALARM', 'WARNING', 'OFFLINE', 'EMPTY'] export const METRIC_ABNORMAL_BUCKETS = ['WARNING', 'ALARM', 'EXPIRED', 'OFFLINE', 'UNKNOWN'] const METRIC_LABELS = { WARNING: '预警', ALARM: '报警', EXPIRED: '过期', OFFLINE: '离线', UNKNOWN: '未发布' } /** Successful count distributions omit empty buckets; no totals across object types. */ export function abnormalCountRows(rows, kind) { const source = new Map((Array.isArray(rows) ? rows : []).map((row) => [row.status, row.count])) const keys = kind === 'point' ? POINT_ABNORMAL_BUCKETS : METRIC_ABNORMAL_BUCKETS return keys.map((code) => ({ code, label: kind === 'point' ? visualForStatus(code).label : METRIC_LABELS[code], count: typeof source.get(code) === 'number' && Number.isFinite(source.get(code)) ? source.get(code) : 0, })) }