/** 财务模块监控数据转为图表百分比;非法或缺测值保留 null,不伪造零使用率。 */ function e(e) { if (typeof e != `number` && (typeof e != `string` || !e.trim())) return null; let t = Number(e); return Number.isFinite(t) ? t : null; } /** 已是百分比的曲线直接归一;容量曲线按同一时间戳匹配总量与已用/空闲量后计算。 */ function t(t, n) { let r = t.list ?? [], i = t.label ?? [], a = i.findIndex((e) => /已用|使用|used|usage|utilization/i.test(e)), o = (t) => { let n = e(t); return n === null ? null : Number(Math.min(100, Math.max(0, n)).toFixed(2)); }, s = (e) => e.map((e) => String(e.time ?? ``).slice(11, 16)); if (n === `cpu` || /%|percent/i.test(t.unit ?? ``)) { let e = r[n === `memory` && a >= 0 ? a : 0] ?? []; return { labels: s(e), data: e.map((e) => o(e.value)), }; } // 不能按数组下标直接相除:不同曲线可能缺点,必须用时间戳对齐。 let c = i.findIndex((e) => /总|total|allocated/i.test(e)), l = c >= 0 ? c : 0, u = i.findIndex((e) => /空闲|可用|free|available/i.test(e)), d = a >= 0 ? a : u >= 0 ? u : 1, f = r[l] ?? [], p = new Map((r[d] ?? []).map((e) => [String(e.time ?? ``), e.value])); return { labels: s(f), data: f.map((t) => { let n = e(t.value), r = t.time ? e(p.get(t.time)) : null; if (l === d || n === null || n <= 0 || r === null || r < 0) return null; let i = a < 0 && u >= 0 ? n - r : r; return o((i / n) * 100); }), }; } export { t as n, e as t };