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

@@ -690,7 +690,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -700,7 +700,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -826,7 +826,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -836,7 +836,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -854,7 +854,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -864,7 +864,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -885,7 +885,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
@@ -898,7 +898,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
@@ -924,7 +924,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
@@ -937,7 +937,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -960,7 +960,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
@@ -973,7 +973,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -996,7 +996,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES;
@@ -1008,7 +1008,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
@@ -1037,7 +1037,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES;
@@ -1049,7 +1049,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox;
@@ -1075,7 +1075,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES;
@@ -1087,7 +1087,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox;

View File

@@ -67,6 +67,7 @@ extension DialogX on BuildContext {
Future<String?> showPwdDialog({
String? hostId,
String? title,
String? label,
}) async {
if (!mounted) return null;
return await showRoundDialog<String>(
@@ -82,7 +83,7 @@ extension DialogX on BuildContext {
_recoredPwd[hostId] = val;
}
},
label: l10n.pwd,
label: label ?? l10n.pwd,
),
);
}

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/res/provider.dart';
@@ -11,7 +12,10 @@ abstract final class KeybordInteractive {
BuildContext? ctx,
}) async {
try {
final res = await (ctx ?? Pros.app.ctx)?.showPwdDialog(title: spi.id);
final res = await (ctx ?? Pros.app.ctx)?.showPwdDialog(
title: '2FA ${l10n.pwd}',
label: spi.id,
);
return res == null ? null : [res];
} catch (e) {
return null;

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 {
}
}
bool _shouldCalc(String fs, String mount) {
if (fs.startsWith('/dev')) return true;
// 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;
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,

View File

@@ -504,7 +504,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
}
Widget _buildDiskItem(Disk disk, ServerStatus ss) {
final (read, write) = ss.diskIO.getSpeed(disk.dev);
final (read, write) = ss.diskIO.getSpeed(disk.fs);
final text = () {
final use = '${l10n.used} ${disk.used.kb2Str} / ${disk.size.kb2Str}';
if (read == null || write == null) return use;
@@ -521,7 +521,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
disk.dev,
disk.fs,
style: UIs.text12,
textScaler: _textFactor,
),

View File

@@ -471,7 +471,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
@@ -481,7 +481,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -608,7 +608,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
@@ -618,7 +618,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -638,7 +638,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 880;
CURRENT_PROJECT_VERSION = 881;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist;
@@ -649,7 +649,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.880;
MARKETING_VERSION = 1.0.881;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = "";

97
test/disk_test.dart Normal file
View File

@@ -0,0 +1,97 @@
// ignore_for_file: avoid_print
import 'package:flutter_test/flutter_test.dart';
import 'package:toolbox/data/model/server/disk.dart';
void main() {
test('parse disk', () {
for (final raw in _raws) {
print('---' * 10);
final disks = Disk.parse(raw);
print(disks.join('\n'));
print('\n');
}
});
}
const _raws = [
// '''
// Filesystem 1K-blocks Used Available Use% Mounted on
// udev 864088 0 864088 0% /dev
// tmpfs 176724 688 176036 1% /run
// /dev/vda3 40910528 18067948 20951380 47% /
// tmpfs 883612 0 883612 0% /dev/shm
// tmpfs 5120 0 5120 0% /run/lock
// /dev/vda2 192559 11807 180752 7% /boot/efi
// tmpfs 176720 104 176616 1% /run/user/1000
// ''',
'''
Filesystem 1K-blocks Used Available Use% Mounted on
udev 16181648 0 16181648 0% /dev
tmpfs 3270528 37268 3233260 2% /run
boot-pool/ROOT/23.10.2 467090304 3083008 464007296 1% /
tmpfs 16352624 112 16352512 1% /dev/shm
tmpfs 102400 0 102400 0% /run/lock
tmpfs 16352624 12 16352612 1% /tmp
boot-pool/grub 464015744 8448 464007296 1% /boot/grub
v2000pro 1906569472 128 1906569344 1% /mnt/v2000pro
v2000pro/local-app 1921857408 15288064 1906569344 1% /mnt/v2000pro/local-app
v2000pro/ix-applications 1906569472 128 1906569344 1% /mnt/v2000pro/ix-applications
v2000pro/sdd 1906569472 128 1906569344 1% /mnt/v2000pro/sdd
v2000pro/ix-applications/catalogs 1907647744 1078400 1906569344 1% /mnt/v2000pro/ix-applications/catalogs
v2000pro/ix-applications/k3s 1907116416 547072 1906569344 1% /mnt/v2000pro/ix-applications/k3s
v2000pro/ix-applications/releases 1906569472 128 1906569344 1% /mnt/v2000pro/ix-applications/releases
v2000pro/ix-applications/default_volumes 1906569472 128 1906569344 1% /mnt/v2000pro/ix-applications/default_volumes
wd16-raidz 19217443072 256 19217442816 1% /mnt/wd16-raidz
wd16-raidz/games 19386510592 169067776 19217442816 1% /mnt/wd16-raidz/games
wd16-raidz/store 20526360832 1308918016 19217442816 7% /mnt/wd16-raidz/store
wd16-raidz/share 62914560 24397312 38517248 39% /mnt/wd16-raidz/share
wd16-raidz/media 60509795968 41292353152 19217442816 69% /mnt/wd16-raidz/media
boot-pool/.system 464007424 128 464007296 1% /var/db/system
boot-pool/.system/cores 1048576 128 1048448 1% /var/db/system/cores
boot-pool/.system/samba4 464007680 384 464007296 1% /var/db/system/samba4
boot-pool/.system/rrd-ae32c386e13840b2bf9c0083275e7941 464007424 128 464007296 1% /var/db/system/rrd-ae32c386e13840b2bf9c0083275e7941
boot-pool/.system/configs-ae32c386e13840b2bf9c0083275e7941 464010368 3072 464007296 1% /var/db/system/configs-ae32c386e13840b2bf9c0083275e7941
boot-pool/.system/webui 464007424 128 464007296 1% /var/db/system/webui
boot-pool/.system/services 464007424 128 464007296 1% /var/db/system/services
boot-pool/.system/glusterd 464007424 128 464007296 1% /var/db/system/glusterd
boot-pool/.system/ctdb_shared_vol 464007424 128 464007296 1% /var/db/system/ctdb_shared_vol
boot-pool/.system/netdata-ae32c386e13840b2bf9c0083275e7941 464239744 232448 464007296 1% /var/db/system/netdata-ae32c386e13840b2bf9c0083275e7941
v2000pro/ix-applications/k3s/kubelet 1906569728 384 1906569344 1% /var/lib/kubelet
tmpfs 512000 12 511988 1% /var/lib/kubelet/pods/26ae1c0e-18cf-4b75-b29d-8ce9636a7da3/volumes/kubernetes.io~projected/kube-api-access-9q9bx
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/c66db36fb35c6c881949ceb69b6c9da9b3ad92e305783ea3b77e65de791f61ba/shm
tmpfs 409600 12 409588 1% /var/lib/kubelet/pods/df8fac94-f5c1-4d3a-8f45-8e455510a2c8/volumes/kubernetes.io~projected/kube-api-access-4vzjm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/c66db36fb35c6c881949ceb69b6c9da9b3ad92e305783ea3b77e65de791f61ba/rootfs
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/6f49cc72b9702e2713b67128235c9dd5837b41861022a021c9d315426cc352c4/shm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/6f49cc72b9702e2713b67128235c9dd5837b41861022a021c9d315426cc352c4/rootfs
tmpfs 174080 12 174068 1% /var/lib/kubelet/pods/4d744e5b-1b98-41bd-8742-8d987f17c4af/volumes/kubernetes.io~projected/kube-api-access-jrzpb
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/ed0264ba5e5beebb1614da00b9fc9ce2f4241173b4ba8f52f83ffb068dc97034/shm
tmpfs 307200 12 307188 1% /var/lib/kubelet/pods/9423f3b8-712e-4539-b473-fb6e4b44481e/volumes/kubernetes.io~projected/kube-api-access-frxkj
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ed0264ba5e5beebb1614da00b9fc9ce2f4241173b4ba8f52f83ffb068dc97034/rootfs
tmpfs 921600 12 921588 1% /var/lib/kubelet/pods/b6e2f566-3d64-4533-835f-1acf24293db8/volumes/kubernetes.io~projected/kube-api-access-v5rql
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/d6a11b1f80e1406ca31c260b4eadf9c7c0e9db17a98eac5d62cbcaf7ea0a013b/shm
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/76401fc48a79755d503ddac81d37ac2e00e0cccbcbd0de5527e3c132a3d93709/shm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/d6a11b1f80e1406ca31c260b4eadf9c7c0e9db17a98eac5d62cbcaf7ea0a013b/rootfs
tmpfs 614400 12 614388 1% /var/lib/kubelet/pods/5676e37b-d0a4-4910-b3fd-cf7ec25f201f/volumes/kubernetes.io~projected/kube-api-access-jrm62
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/76401fc48a79755d503ddac81d37ac2e00e0cccbcbd0de5527e3c132a3d93709/rootfs
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/22f66d268f14cedc9d16ff0c31a4babdb4a082e7444f72a745b8f0e6ccc7cec7/shm
tmpfs 307200 12 307188 1% /var/lib/kubelet/pods/b528d0cb-cf84-4f25-8d5d-eae89f6c853e/volumes/kubernetes.io~projected/kube-api-access-5bgtp
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/22f66d268f14cedc9d16ff0c31a4babdb4a082e7444f72a745b8f0e6ccc7cec7/rootfs
tmpfs 32705248 12 32705236 1% /var/lib/kubelet/pods/c2070b60-ec0a-4107-97ad-f1eb475ebac3/volumes/kubernetes.io~projected/kube-api-access-scxv6
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/ceb3da406b1d6f38dfab42cc314b69a510947e42867afae6b33d0d8e10e705b5/shm
tmpfs 32705248 12 32705236 1% /var/lib/kubelet/pods/593d00aa-16bb-4d18-906d-37731ba3f8bf/volumes/kubernetes.io~projected/kube-api-access-x54qh
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/26547c6bfd920ed69d0d95c48a3d890695b0238420e4c54ee56075dc43e03ea5/shm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ceb3da406b1d6f38dfab42cc314b69a510947e42867afae6b33d0d8e10e705b5/rootfs
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/2119c0e105c80619f630691263450234456349d3ddce64b77a184491bda56dd2/rootfs
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/26547c6bfd920ed69d0d95c48a3d890695b0238420e4c54ee56075dc43e03ea5/rootfs
tmpfs 32705248 12 32705236 1% /var/lib/kubelet/pods/eccfba54-48aa-4950-b3b8-e18ad155e16d/volumes/kubernetes.io~projected/kube-api-access-lc9gs
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/dda821508458f2207ebfb53485b33932724c5ede375efebbfc002b511daef1f3/shm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/dda821508458f2207ebfb53485b33932724c5ede375efebbfc002b511daef1f3/rootfs
shm 65536 0 65536 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/510d5900ec9d403ba57689325b5560f713704d69c784487d9c3be127316e1db8/shm
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/510d5900ec9d403ba57689325b5560f713704d69c784487d9c3be127316e1db8/rootfs
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/a873561950eb40a58a6dfa3dd7e74a171a31b598cd3edacd930d09a8fede9ea1/rootfs
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/fa65821375d894f5039a763315734ed51befdafaa5215e30d2f8f889e351c1a3/rootfs
overlay 1907116416 547072 1906569344 1% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/3e463fd96ee1e2ddba7aca7e8cb161b59f33b0a778e5f7d8c1a5939a72a6f4a5/rootfs
v2000pro/pve 1906694784 125440 1906569344 1% /mnt/v2000pro/pve
v2000pro/download 1906569472 128 1906569344 1% /mnt/v2000pro/download''',
];

View File

@@ -1,87 +0,0 @@
// ignore_for_file: avoid_print
import 'package:flutter_test/flutter_test.dart';
import 'package:toolbox/data/model/server/disk.dart';
void main() {
test('test parse disk', () {
const raw = '''
Filesystem Size Used Available Use% Mounted on
none 400.0M 321.0M 79.0M 80% /
devtmpfs 7.7G 4.0K 7.7G 0% /dev
tmpfs 64.0M 1.5M 62.5M 2% /tmp
tmpfs 7.7G 144.0K 7.7G 0% /dev/shm
tmpfs 16.0M 0 16.0M 0% /share
/dev/mmcblk0p5 7.7M 46.0K 7.7M 1% /mnt/boot_config
tmpfs 16.0M 0 16.0M 0% /mnt/snapshot/export
/dev/md9 493.5M 169.3M 324.2M 34% /mnt/HDA_ROOT
cgroup_root 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/mapper/vg1-lv1312
352.1M 232.0K 351.9M 0% /mnt/pool1
/dev/mapper/cachedev1
3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA
/dev/mapper/cachedev2
792.8G 823.3M 791.5G 0% /share/CACHEDEV2_DATA
/dev/md13 417.0M 387.1M 29.9M 93% /mnt/ext
tmpfs 32.0M 27.2M 4.8M 85% /samba_third_party
tmpfs 48.0M 36.0K 48.0M 0% /share/CACHEDEV1_DATA/.samba/lock/msg.lock
df: /mnt/ext/opt/samba/private/msg.sock: Permission denied
/dev/mapper/vg1-snap10001
3.0T 1.4T 1.6T 47% /mnt/snapshot/1/10001
/dev/mapper/vg1-snap10004
3.0T 1.1T 1.9T 36% /mnt/snapshot/1/10004
/dev/mapper/vg1-snap10007
3.0T 1.3T 1.7T 43% /mnt/snapshot/1/10007
/dev/mapper/vg1-snap10008
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10008
/dev/mapper/vg1-snap10009
3.0T 1.1T 1.9T 37% /mnt/snapshot/1/10009
/dev/mapper/vg1-snap10010
3.0T 1.4T 1.6T 46% /mnt/snapshot/1/10010
/dev/mapper/vg1-snap10011
3.0T 1.1T 1.9T 38% /mnt/snapshot/1/10011
/dev/mapper/vg1-snap10012
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10012
/dev/mapper/vg1-snap10013
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10013
/dev/mapper/vg1-snap10014
3.0T 1.2T 1.8T 39% /mnt/snapshot/1/10014
/dev/mapper/vg1-snap10015
3.0T 1.3T 1.7T 43% /mnt/snapshot/1/10015
/dev/mapper/vg1-snap10017
3.0T 1.4T 1.6T 46% /mnt/snapshot/1/10017
/dev/mapper/cachedev1
3.0T 1.4T 1.6T 48% /lib/modules/5.10.60-qnap/container-station
tmpfs 100.0K 0 100.0K 0% /share/CACHEDEV1_DATA/Container/container-station-data/lib/lxd/shmounts
tmpfs 100.0K 0 100.0K 0% /share/CACHEDEV1_DATA/Container/container-station-data/lib/lxd/devlxd
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/a8b24fbc86efcced498db198044bcef8edc3d5d8d34854556d6def3435451092/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/e336c44a9bd40074eab29515da98f6fb5d4930e0d410994980d103678a46d19b/merg ed
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/badd629737c8abc5e18272165d15eca9e307a885d8809224339bc93cc9b8bf13/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/d232b71046f5ecc218e812adc9309f6a95590b2b8ec788a54acec0d33b6a346c/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/de77097c9d1560270bb4e5ad617555f00443c28dd2b4553d38d2eac4db1ed4a5/merged
Overlay 3.0T 1.4T 1.6T 48%/Share/CacheDev1_data/Container/Container-SATA/LIB/DOCKER/OVERLAY2/9E943181C3130C5AD306786CC9F773 E7B698BF87A7549363502D0/Merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/2d997d801b6cd2cf03b8760c8c01b111eec915ac5e57dc4b9d1c6c391e8f951f/merg ed
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/2e73a7857f218c2867ebc7ec69f7764bd5787ea2f9bfdcbfe25cdd2f25d62cd3/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/41c1a6e22899d9d0f8c02f0e9f2683c93b2fd8b2c93d677e9f87552839a1686c/ merged
Overlay 3.0T 1.4T 1.6T 48%/Share/CacheDev1_data/Container/Container-SATA/LIB/DOCKER/OVERLAY2/B23ef7F05050550D2D2D956BBBBBBBBBBBBB D2377575738F3F27D86A0D2/MERGED
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/6a105e8f5e740dceed8a96d16c3fcc95775974e6fbac382b5446b45bb611065b/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/4a25157fa48fcdfc89dcc46e6ff4acb685916a74f1ffbd541f99614dfc825645/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/6a10d2c42c3d2c3057f5c2e8816ddca2e384601666dfeecf19bd1c1d8d7e683b/merged
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/d648e717655504c32365b5145df409c1754d0b20d438c7a156763972ded1bfe0/merg ed
overlay 3.0T 1.4T 1.6T 48% /share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay2/d78d05dca0b50f28e5dcc0846f8034839cc17beb94b16e79095ac4cc00afc6ed/merged
/dev/mapper/vg1-snap10002
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10002
/dev/mapper/vg1-snap10003
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10003
/dev/mapper/vg1-snap10005
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10005
/dev/mapper/vg1-snap10006
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10006
Overlay 3.0T 1.4t 1.6T 48%/Share/CacheDev1_data/Container/Container-SATA/LIB/DOCKER/Overlay2/67586B522723529842984249DDDDD5F 1A923759CA7ECF626555408/MERGED
/dev/mapper/vg1-snap10016
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10016
''';
final disks = Disk.parse(raw);
print(disks.map((e) => '${e.mount} ${e.used}').join('\n'));
});
}