Исправлена функция formatMem → formatBytes: корректное форматирование байтов в МБ/ГБ

This commit is contained in:
2026-07-25 10:50:46 +03:00
parent 65a9bf20f2
commit 86343c922a
+10 -3
View File
@@ -17,9 +17,16 @@ function formatUptime(sec) {
return `${m}м`; return `${m}м`;
} }
function formatMem(mb) { /**
* Форматирует размер памяти из байтов в читаемую строку.
* Принимает байты, возвращает строку вида "4.0 ГБ" или "728.7 МБ".
*/
function formatBytes(bytes) {
const n = Number(bytes);
if (!Number.isFinite(n) || n <= 0) return "0 МБ";
const mb = n / (1024 * 1024);
if (mb >= 1024) return `${(mb / 1024).toFixed(1)} ГБ`; if (mb >= 1024) return `${(mb / 1024).toFixed(1)} ГБ`;
return `${fmt1(mb)} МБ`; return `${mb.toFixed(1)} МБ`;
} }
function fmt1(v) { function fmt1(v) {
@@ -58,7 +65,7 @@ export default function InstanceCard({ instance, onAction, onDelete }) {
const memBar = live && live.mem_total > 0 ? ( const memBar = live && live.mem_total > 0 ? (
<div style={{ display: "inline-flex", alignItems: "center", gap: 6 }}> <div style={{ display: "inline-flex", alignItems: "center", gap: 6 }}>
<span>🧠 {fmt1(formatMem(live.mem_used / (1024 * 1024)))} / {fmt1(formatMem(live.mem_total / (1024 * 1024)))}</span> <span>🧠 {formatBytes(live.mem_used)} / {formatBytes(live.mem_total)}</span>
<div style={{ width: 50, height: 8, background: "#333", borderRadius: 4, overflow: "hidden" }}> <div style={{ width: 50, height: 8, background: "#333", borderRadius: 4, overflow: "hidden" }}>
<div style={{ width: `${fmt1(Math.min((live.mem_used / live.mem_total) * 100, 100))}%`, height: "100%", <div style={{ width: `${fmt1(Math.min((live.mem_used / live.mem_total) * 100, 100))}%`, height: "100%",
background: (live.mem_used / live.mem_total) > 0.8 ? "#f44336" : (live.mem_used / live.mem_total) > 0.5 ? "#ff9800" : "#4caf50", background: (live.mem_used / live.mem_total) > 0.8 ? "#f44336" : (live.mem_used / live.mem_total) > 0.5 ? "#ff9800" : "#4caf50",