fix: disk parse

This commit is contained in:
lollipopkit
2024-05-09 14:51:41 +08:00
parent 8ed6a3869e
commit dc16574a04
12 changed files with 163 additions and 141 deletions

View File

@@ -18,7 +18,7 @@ class Conn {
final idx = lines.lastWhere((element) => element.startsWith('Tcp:'),
orElse: () => '');
if (idx != '') {
final vals = idx.split(Miscs.numReg);
final vals = idx.split(Miscs.blankReg);
return Conn(
maxConn: int.tryParse(vals[5]) ?? 0,
active: int.tryParse(vals[6]) ?? 0,

View File

@@ -5,7 +5,7 @@ import 'package:toolbox/data/model/server/time_seq.dart';
import '../../res/misc.dart';
class Disk {
final String dev;
final String fs;
final String mount;
final int usedPercent;
final BigInt used;
@@ -13,7 +13,7 @@ class Disk {
final BigInt avail;
const Disk({
required this.dev,
required this.fs,
required this.mount,
required this.usedPercent,
required this.used,
@@ -30,7 +30,7 @@ class Disk {
if (item.isEmpty) {
continue;
}
final vals = item.split(Miscs.numReg);
final vals = item.split(Miscs.blankReg);
if (vals.length == 1) {
pathCache = vals[0];
continue;
@@ -40,15 +40,16 @@ class Disk {
pathCache = '';
}
try {
final dev = vals[0];
if (!_shouldCalc(dev)) continue;
final fs = vals[0];
final mount = vals[5];
if (!_shouldCalc(fs, mount)) continue;
list.add(Disk(
dev: dev,
mount: vals[5],
fs: fs,
mount: mount,
usedPercent: int.parse(vals[4].replaceFirst('%', '')),
used: BigInt.tryParse(vals[2]) ?? BigInt.zero,
size: BigInt.tryParse(vals[1]) ?? BigInt.one,
avail: BigInt.tryParse(vals[3]) ?? BigInt.one,
used: BigInt.parse(vals[2]),
size: BigInt.parse(vals[1]),
avail: BigInt.parse(vals[3]),
));
} catch (e) {
continue;
@@ -56,6 +57,11 @@ class Disk {
}
return list;
}
@override
String toString() {
return 'Disk{dev: $fs, mount: $mount, usedPercent: $usedPercent, used: $used, size: $size, avail: $avail}';
}
}
class DiskIO extends TimeSeq<List<DiskIOPiece>> {
@@ -169,9 +175,9 @@ class DiskUsage {
var used = BigInt.zero;
var size = BigInt.zero;
for (var disk in disks) {
if (!_shouldCalc(disk.dev)) continue;
if (devs.contains(disk.dev)) continue;
devs.add(disk.dev);
if (!_shouldCalc(disk.fs, disk.mount)) continue;
if (devs.contains(disk.fs)) continue;
devs.add(disk.fs);
used += disk.used;
size += disk.size;
}
@@ -179,9 +185,13 @@ class DiskUsage {
}
}
// Some NAS may have mounted path like this `//192.168.1.2/`
bool _shouldCalc(String dev) {
if (dev.startsWith('/dev')) return true;
if (dev.startsWith('//')) return true;
bool _shouldCalc(String fs, String mount) {
if (fs.startsWith('/dev')) return true;
// Some NAS may have mounted path like this `//192.168.1.2/`
if (fs.startsWith('//')) return true;
if (mount.startsWith('/mnt')) return true;
// if (fs.startsWith('shm') ||
// fs.startsWith('overlay') ||
// fs.startsWith('tmpfs')) return false;
return false;
}

View File

@@ -2,9 +2,9 @@
class BuildData {
static const String name = "ServerBox";
static const int build = 880;
static const int build = 881;
static const String engine = "3.19.6";
static const String buildAt = "2024-05-09 13:38:11";
static const int modifications = 7;
static const int script = 45;
static const String buildAt = "2024-05-09 14:50:53";
static const int modifications = 12;
static const int script = 46;
}

View File

@@ -1,9 +1,6 @@
import 'dart:convert';
abstract final class Miscs {
/// RegExp for number
static final numReg = RegExp(r'\s{1,}');
static final blankReg = RegExp(r'\s+');
/// RegExp for password request

View File

@@ -42,7 +42,7 @@ abstract final class InitStatus {
),
disk: [
Disk(
dev: '/',
fs: '/',
mount: '/',
usedPercent: 0,
used: BigInt.zero,