abnormalCounts.js 923 B

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