function defaultInterface(route) { var lines = route.split(/\r?\n/); for (var i = 0; i < lines.length; i++) { var l = lines[i]; if (l.indexOf("default via") === 0) return l.split(/\s+/)[4]; } throw "No default interface"; } function getRxTxBytes(dev, iface) { var lines = dev.split(/\r?\n/); for (var i = 0; i < lines.length; i++) { var l = lines[i].trim(); if (!l.startsWith(iface + ":")) continue; var p = l.split(/\s+/); return { rx: parseInt(p[1]), tx: parseInt(p[9]) }; } throw "Interface not found"; } function formatSize(size, unit) { const labels = ["B", "K", "M", "G", "T"]; let power = 0, kilo = 2 ** 10; while (size > kilo && power < labels.length - 1) { size /= kilo; power++; } if (unit) { return labels[power]; } else { return size.toFixed(0); } }