From a518dca0cadbe1f979fe32ad2ca409922e5fb171 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sat, 28 Jan 2023 21:16:53 +0800 Subject: [PATCH] opt. --- lib/data/model/server/cpu_2_status.dart | 56 ------- lib/data/model/server/cpu_status.dart | 75 ++++++++- lib/data/model/server/disk_info.dart | 8 +- lib/data/model/server/memory.dart | 8 + lib/data/model/server/net_speed.dart | 11 ++ lib/data/model/server/server.dart | 8 +- lib/data/model/server/server_status.dart | 20 ++- lib/data/provider/server.dart | 84 ++++------ lib/data/res/build_data.dart | 8 +- lib/data/res/sizedbox.dart | 4 + lib/view/page/docker.dart | 2 +- lib/view/page/home.dart | 6 +- lib/view/page/ping.dart | 2 +- lib/view/page/pkg.dart | 2 +- lib/view/page/private_key/list.dart | 6 +- lib/view/page/server/detail.dart | 188 ++++++++++++----------- lib/view/page/server/tab.dart | 19 +-- lib/view/page/sftp/view.dart | 7 +- lib/view/page/ssh.dart | 2 +- 19 files changed, 269 insertions(+), 247 deletions(-) delete mode 100644 lib/data/model/server/cpu_2_status.dart create mode 100644 lib/data/res/sizedbox.dart diff --git a/lib/data/model/server/cpu_2_status.dart b/lib/data/model/server/cpu_2_status.dart deleted file mode 100644 index c3107ca2..00000000 --- a/lib/data/model/server/cpu_2_status.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:toolbox/data/model/server/cpu_status.dart'; - -class Cpu2Status { - List _pre; - List _now; - String temp; - Cpu2Status(this._pre, this._now, this.temp); - - double usedPercent({int coreIdx = 0}) { - if (_now.length != _pre.length) return 0; - final idleDelta = _now[coreIdx].idle - _pre[coreIdx].idle; - final totalDelta = _now[coreIdx].total - _pre[coreIdx].total; - final used = idleDelta / totalDelta; - return used.isNaN ? 0 : 100 - used * 100; - } - - void update(List newStatus, String newTemp) { - _pre = _now; - _now = newStatus; - temp = newTemp; - } - - int get coresCount => _now.length; - - int get totalDelta => _now[0].total - _pre[0].total; - - double get user { - if (_now.length != _pre.length) return 0; - final delta = _now[0].user - _pre[0].user; - final used = delta / totalDelta; - return used.isNaN ? 0 : used * 100; - } - - double get sys { - if (_now.length != _pre.length) return 0; - final delta = _now[0].sys - _pre[0].sys; - final used = delta / totalDelta; - return used.isNaN ? 0 : used * 100; - } - - double get nice { - if (_now.length != _pre.length) return 0; - final delta = _now[0].nice - _pre[0].nice; - final used = delta / totalDelta; - return used.isNaN ? 0 : used * 100; - } - - double get iowait { - if (_now.length != _pre.length) return 0; - final delta = _now[0].iowait - _pre[0].iowait; - final used = delta / totalDelta; - return used.isNaN ? 0 : used * 100; - } - - double get idle => 100 - usedPercent(); -} diff --git a/lib/data/model/server/cpu_status.dart b/lib/data/model/server/cpu_status.dart index fa275d2a..6824c14a 100644 --- a/lib/data/model/server/cpu_status.dart +++ b/lib/data/model/server/cpu_status.dart @@ -1,7 +1,78 @@ +get initOneTimeCpuStatus => OneTimeCpuStatus( + 'cpu', + 0, + 0, + 0, + 0, + 0, + 0, + 0, + ); +get initCpuStatus => CpuStatus( + [initOneTimeCpuStatus], + [initOneTimeCpuStatus], + '', + ); + +class CpuStatus { + List _pre; + List _now; + String temp; + CpuStatus(this._pre, this._now, this.temp); + + double usedPercent({int coreIdx = 0}) { + if (_now.length != _pre.length) return 0; + final idleDelta = _now[coreIdx].idle - _pre[coreIdx].idle; + final totalDelta = _now[coreIdx].total - _pre[coreIdx].total; + final used = idleDelta / totalDelta; + return used.isNaN ? 0 : 100 - used * 100; + } + + void update(List newStatus, String newTemp) { + _pre = _now; + _now = newStatus; + temp = newTemp; + } + + int get coresCount => _now.length; + + int get totalDelta => _now[0].total - _pre[0].total; + + double get user { + if (_now.length != _pre.length) return 0; + final delta = _now[0].user - _pre[0].user; + final used = delta / totalDelta; + return used.isNaN ? 0 : used * 100; + } + + double get sys { + if (_now.length != _pre.length) return 0; + final delta = _now[0].sys - _pre[0].sys; + final used = delta / totalDelta; + return used.isNaN ? 0 : used * 100; + } + + double get nice { + if (_now.length != _pre.length) return 0; + final delta = _now[0].nice - _pre[0].nice; + final used = delta / totalDelta; + return used.isNaN ? 0 : used * 100; + } + + double get iowait { + if (_now.length != _pre.length) return 0; + final delta = _now[0].iowait - _pre[0].iowait; + final used = delta / totalDelta; + return used.isNaN ? 0 : used * 100; + } + + double get idle => 100 - usedPercent(); +} + /// /// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/ /// -class CpuStatus { +class OneTimeCpuStatus { /* { "user": 0, @@ -23,7 +94,7 @@ class CpuStatus { late int irq; late int softirq; - CpuStatus( + OneTimeCpuStatus( this.id, this.user, this.sys, diff --git a/lib/data/model/server/disk_info.dart b/lib/data/model/server/disk_info.dart index 61e51080..e7ce45fe 100644 --- a/lib/data/model/server/disk_info.dart +++ b/lib/data/model/server/disk_info.dart @@ -10,16 +10,16 @@ class DiskInfo { } */ - late String mountPath; - late String mountLocation; + late String path; + late String loc; late int usedPercent; late String used; late String size; late String avail; DiskInfo( - this.mountPath, - this.mountLocation, + this.path, + this.loc, this.usedPercent, this.used, this.size, diff --git a/lib/data/model/server/memory.dart b/lib/data/model/server/memory.dart index e3913e51..7c05b10a 100644 --- a/lib/data/model/server/memory.dart +++ b/lib/data/model/server/memory.dart @@ -1,3 +1,11 @@ +get initMemory => Memory( + total: 1, + used: 0, + free: 1, + cache: 0, + avail: 1, + ); + class Memory { int total; int used; diff --git a/lib/data/model/server/net_speed.dart b/lib/data/model/server/net_speed.dart index 66596aaa..283963c5 100644 --- a/lib/data/model/server/net_speed.dart +++ b/lib/data/model/server/net_speed.dart @@ -1,5 +1,16 @@ import 'package:toolbox/core/extension/numx.dart'; +get initNetSpeedPart => NetSpeedPart( + '', + 0, + 0, + 0, + ); +get initNetSpeed => NetSpeed( + [initNetSpeedPart], + [initNetSpeedPart], + ); + class NetSpeedPart { String device; int bytesIn; diff --git a/lib/data/model/server/server.dart b/lib/data/model/server/server.dart index fa863333..70199ac7 100644 --- a/lib/data/model/server/server.dart +++ b/lib/data/model/server/server.dart @@ -2,13 +2,13 @@ import 'package:dartssh2/dartssh2.dart'; import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/model/server/server_status.dart'; -class ServerInfo { - ServerPrivateInfo info; +class Server { + ServerPrivateInfo spi; ServerStatus status; SSHClient? client; - ServerConnectionState connectionState; + ServerConnectionState cs; - ServerInfo(this.info, this.status, this.client, this.connectionState); + Server(this.spi, this.status, this.client, this.cs); } enum ServerConnectionState { disconnected, connecting, connected, failed } diff --git a/lib/data/model/server/server_status.dart b/lib/data/model/server/server_status.dart index fb6343c3..728ce5f8 100644 --- a/lib/data/model/server/server_status.dart +++ b/lib/data/model/server/server_status.dart @@ -1,4 +1,4 @@ -import 'package:toolbox/data/model/server/cpu_2_status.dart'; +import 'package:toolbox/data/model/server/cpu_status.dart'; import 'package:toolbox/data/model/server/disk_info.dart'; import 'package:toolbox/data/model/server/memory.dart'; import 'package:toolbox/data/model/server/net_speed.dart'; @@ -8,6 +8,16 @@ import 'package:toolbox/data/model/server/tcp_status.dart'; /// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/ /// +get initStatus => ServerStatus( + initCpuStatus, + initMemory, + 'Loading...', + '', + [DiskInfo('/', '/', 0, '0', '0', '0')], + TcpStatus(0, 0, 0, 0), + initNetSpeed, + ); + class ServerStatus { /* { @@ -30,8 +40,8 @@ class ServerStatus { } */ - Cpu2Status cpu2Status; - Memory memory; + CpuStatus cpu; + Memory mem; String sysVer; String uptime; List disk; @@ -39,7 +49,7 @@ class ServerStatus { NetSpeed netSpeed; String? failedInfo; - ServerStatus(this.cpu2Status, this.memory, this.sysVer, this.uptime, - this.disk, this.tcp, this.netSpeed, + ServerStatus(this.cpu, this.mem, this.sysVer, this.uptime, this.disk, + this.tcp, this.netSpeed, {this.failedInfo}); } diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index 360ecd0d..24eb1144 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -6,7 +6,6 @@ import 'package:logging/logging.dart'; import 'package:toolbox/core/extension/stringx.dart'; import 'package:toolbox/core/extension/uint8list.dart'; import 'package:toolbox/core/provider_base.dart'; -import 'package:toolbox/data/model/server/cpu_2_status.dart'; import 'package:toolbox/data/model/server/cpu_status.dart'; import 'package:toolbox/data/model/server/memory.dart'; import 'package:toolbox/data/model/server/net_speed.dart'; @@ -45,35 +44,13 @@ final numReg = RegExp(r'\s{1,}'); final memItemReg = RegExp(r'([A-Z].+:)\s+([0-9]+) kB'); class ServerProvider extends BusyProvider { - List _servers = []; - List get servers => _servers; + List _servers = []; + List get servers => _servers; Timer? _timer; final logger = Logger('SERVER'); - Memory get emptyMemory => - Memory(total: 1, used: 0, free: 1, cache: 0, avail: 1); - - NetSpeedPart get emptyNetSpeedPart => NetSpeedPart('', 0, 0, 0); - - NetSpeed get emptyNetSpeed => - NetSpeed([emptyNetSpeedPart], [emptyNetSpeedPart]); - - CpuStatus get emptyCpuStatus => CpuStatus('cpu', 0, 0, 0, 0, 0, 0, 0); - - Cpu2Status get emptyCpu2Status => - Cpu2Status([emptyCpuStatus], [emptyCpuStatus], ''); - - ServerStatus get emptyStatus => ServerStatus( - emptyCpu2Status, - emptyMemory, - 'Loading...', - '', - [DiskInfo('/', '/', 0, '0', '0', '0')], - TcpStatus(0, 0, 0, 0), - emptyNetSpeed); - Future loadLocalData() async { setBusyState(true); final infos = locator().fetch(); @@ -82,9 +59,8 @@ class ServerProvider extends BusyProvider { notifyListeners(); } - ServerInfo genInfo(ServerPrivateInfo spi) { - return ServerInfo( - spi, emptyStatus, null, ServerConnectionState.disconnected); + Server genInfo(ServerPrivateInfo spi) { + return Server(spi, initStatus, null, ServerConnectionState.disconnected); } Future genClient(ServerPrivateInfo spi) async { @@ -105,7 +81,7 @@ class ServerProvider extends BusyProvider { return; } await Future.wait(_servers.map((s) async { - await _getData(s.info); + await _getData(s.spi); })); } @@ -128,7 +104,7 @@ class ServerProvider extends BusyProvider { void setDisconnected() { for (var i = 0; i < _servers.length; i++) { - _servers[i].connectionState = ServerConnectionState.disconnected; + _servers[i].cs = ServerConnectionState.disconnected; } } @@ -140,7 +116,7 @@ class ServerProvider extends BusyProvider { } return; } - final idx = _servers.indexWhere((e) => e.info == spi); + final idx = _servers.indexWhere((e) => e.spi == spi); if (idx < 0) { throw RangeError.index(idx, _servers); } @@ -155,7 +131,7 @@ class ServerProvider extends BusyProvider { } void delServer(ServerPrivateInfo info) { - final idx = _servers.indexWhere((s) => s.info == info); + final idx = _servers.indexWhere((s) => s.spi == info); if (idx == -1) return; _servers[idx].client?.close(); _servers.removeAt(idx); @@ -165,11 +141,11 @@ class ServerProvider extends BusyProvider { Future updateServer( ServerPrivateInfo old, ServerPrivateInfo newSpi) async { - final idx = _servers.indexWhere((e) => e.info == old); + final idx = _servers.indexWhere((e) => e.spi == old); if (idx < 0) { throw RangeError.index(idx, _servers); } - _servers[idx].info = newSpi; + _servers[idx].spi = newSpi; locator().update(old, newSpi); _servers[idx].client = await genClient(newSpi); notifyListeners(); @@ -177,11 +153,11 @@ class ServerProvider extends BusyProvider { } Future _getData(ServerPrivateInfo spi) async { - final s = _servers.firstWhere((element) => element.info == spi); - final state = s.connectionState; + final s = _servers.firstWhere((element) => element.spi == spi); + final state = s.cs; if (state == ServerConnectionState.failed || state == ServerConnectionState.disconnected) { - s.connectionState = ServerConnectionState.connecting; + s.cs = ServerConnectionState.connecting; notifyListeners(); final time1 = DateTime.now(); try { @@ -189,7 +165,7 @@ class ServerProvider extends BusyProvider { final time2 = DateTime.now(); logger.info( 'Connected to [${spi.name}] in [${time2.difference(time1).toString()}].'); - s.connectionState = ServerConnectionState.connected; + s.cs = ServerConnectionState.connected; final writeResult = await s.client! .run("echo '$shellCmd' > $shellPath && chmod +x $shellPath") .string; @@ -197,7 +173,7 @@ class ServerProvider extends BusyProvider { throw Exception(writeResult); } } catch (e) { - s.connectionState = ServerConnectionState.failed; + s.cs = ServerConnectionState.failed; s.status.failedInfo = '$e ## '; logger.warning(e); } finally { @@ -210,7 +186,7 @@ class ServerProvider extends BusyProvider { final raw = await s.client!.run("sh $shellPath").string; final segments = raw.split(seperator).map((e) => e.trim()).toList(); if (raw.isEmpty || segments.length == 1) { - s.connectionState = ServerConnectionState.failed; + s.cs = ServerConnectionState.failed; if (s.status.failedInfo == null || s.status.failedInfo!.isEmpty) { s.status.failedInfo = 'No data received'; } @@ -228,7 +204,7 @@ class ServerProvider extends BusyProvider { _getTcp(spi, segments[4]); _getNetSpeed(spi, segments[0]); } catch (e) { - s.connectionState = ServerConnectionState.failed; + s.cs = ServerConnectionState.failed; s.status.failedInfo = e.toString(); logger.warning(e); rethrow; @@ -244,12 +220,12 @@ class ServerProvider extends BusyProvider { /// eth0: 48481023 505772 0 0 0 0 0 0 36002262 202307 0 0 0 0 0 0 /// 1635752901 Future _getNetSpeed(ServerPrivateInfo spi, String raw) async { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); info.status.netSpeed.update(await compute(_parseNetSpeed, raw)); } void _getSysVer(ServerPrivateInfo spi, String raw) { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); final s = raw.split('='); if (s.length == 2) { info.status.sysVer = s[1].replaceAll('"', '').replaceFirst('\n', ''); @@ -258,22 +234,22 @@ class ServerProvider extends BusyProvider { Future _getCPU(ServerPrivateInfo spi, String raw, String tempType, String tempValue) async { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); final cpus = await compute(_parseCPU, raw); if (cpus.isNotEmpty) { - info.status.cpu2Status + info.status.cpu .update(cpus, await compute(_getCPUTemp, [tempType, tempValue])); } } void _getUpTime(ServerPrivateInfo spi, String raw) { - _servers.firstWhere((e) => e.info == spi).status.uptime = + _servers.firstWhere((e) => e.spi == spi).status.uptime = raw.split('up ')[1].split(', ')[0]; } Future _getTcp(ServerPrivateInfo spi, String raw) async { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); final status = await compute(_parseTcp, raw); if (status != null) { info.status.tcp = status; @@ -281,7 +257,7 @@ class ServerProvider extends BusyProvider { } void _getDisk(ServerPrivateInfo spi, String raw) { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); final list = []; final items = raw.split('\n'); for (var item in items) { @@ -296,14 +272,14 @@ class ServerProvider extends BusyProvider { } Future _getMem(ServerPrivateInfo spi, String raw) async { - final info = _servers.firstWhere((e) => e.info == spi); + final info = _servers.firstWhere((e) => e.spi == spi); final mem = await compute(_parseMem, raw); - info.status.memory = mem; + info.status.mem = mem; } Future runSnippet(String id, Snippet snippet) async { final client = - _servers.firstWhere((element) => element.info.id == id).client; + _servers.firstWhere((element) => element.spi.id == id).client; if (client == null) { return null; } @@ -340,14 +316,14 @@ TcpStatus? _parseTcp(String raw) { return null; } -List _parseCPU(String raw) { - final List cpus = []; +List _parseCPU(String raw) { + final List cpus = []; for (var item in raw.split('\n')) { if (item == '') break; final id = item.split(' ').first; final matches = item.replaceFirst(id, '').trim().split(' '); - cpus.add(CpuStatus( + cpus.add(OneTimeCpuStatus( id, int.parse(matches[0]), int.parse(matches[1]), diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index ee5999f6..a3ae7b33 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 189; + static const int build = 190; static const String engine = - "Flutter 3.7.0 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision b06b8b2710 (4 days ago) • 2023-01-23 16:55:55 -0800\nEngine • revision b24591ed32\nTools • Dart 2.19.0 • DevTools 2.20.1\n"; - static const String buildAt = "2023-01-28 14:28:14.979200"; - static const int modifications = 2; + "Flutter 3.7.0 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision b06b8b2710 (5 days ago) • 2023-01-23 16:55:55 -0800\nEngine • revision b24591ed32\nTools • Dart 2.19.0 • DevTools 2.20.1\n"; + static const String buildAt = "2023-01-28 21:12:37.408372"; + static const int modifications = 19; } diff --git a/lib/data/res/sizedbox.dart b/lib/data/res/sizedbox.dart new file mode 100644 index 00000000..08b77fc1 --- /dev/null +++ b/lib/data/res/sizedbox.dart @@ -0,0 +1,4 @@ +import 'package:flutter/widgets.dart'; + +const height13 = SizedBox(height: 13); +const width13 = SizedBox(width: 13); diff --git a/lib/view/page/docker.dart b/lib/view/page/docker.dart index d20c35a2..20905461 100644 --- a/lib/view/page/docker.dart +++ b/lib/view/page/docker.dart @@ -47,7 +47,7 @@ class _DockerManagePageState extends State { super.initState(); final client = locator() .servers - .firstWhere((element) => element.info == widget.spi) + .firstWhere((element) => element.spi == widget.spi) .client; if (client == null) { showSnackBar(context, Text(_s.noClient)); diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index c856823c..5b7909a0 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -188,9 +188,9 @@ class _MyHomePageState extends State ListTile( leading: const Icon(Icons.vpn_key), title: Text(_s.privateKey), - onTap: () => AppRoute( - const StoredPrivateKeysPage(), 'private key list') - .go(context), + onTap: () => + AppRoute(const PrivateKeysListPage(), 'private key list') + .go(context), ), ListTile( leading: const Icon(Icons.download), diff --git a/lib/view/page/ping.dart b/lib/view/page/ping.dart index c1dfb269..232613f4 100644 --- a/lib/view/page/ping.dart +++ b/lib/view/page/ping.dart @@ -153,7 +153,7 @@ class _PingPageState extends State return; } final result = await e.client!.run('ping -c 3 $target').string; - _results.add(PingResult.parse(e.info.name, result)); + _results.add(PingResult.parse(e.spi.name, result)); setState(() {}); })); } catch (e) { diff --git a/lib/view/page/pkg.dart b/lib/view/page/pkg.dart index 4c06c588..bd6c5c39 100644 --- a/lib/view/page/pkg.dart +++ b/lib/view/page/pkg.dart @@ -51,7 +51,7 @@ class _PkgManagePageState extends State super.initState(); final si = locator() .servers - .firstWhere((e) => e.info == widget.spi); + .firstWhere((e) => e.spi == widget.spi); if (si.client == null) { showSnackBar(context, Text(_s.waitConnection)); Navigator.of(context).pop(); diff --git a/lib/view/page/private_key/list.dart b/lib/view/page/private_key/list.dart index 28779d7b..e9f8a5fd 100644 --- a/lib/view/page/private_key/list.dart +++ b/lib/view/page/private_key/list.dart @@ -7,14 +7,14 @@ import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/view/page/private_key/edit.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; -class StoredPrivateKeysPage extends StatefulWidget { - const StoredPrivateKeysPage({Key? key}) : super(key: key); +class PrivateKeysListPage extends StatefulWidget { + const PrivateKeysListPage({Key? key}) : super(key: key); @override _PrivateKeyListState createState() => _PrivateKeyListState(); } -class _PrivateKeyListState extends State { +class _PrivateKeyListState extends State { late S _s; @override diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 132684c0..c8f43099 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -14,6 +14,8 @@ import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/locator.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; +import '../../../data/res/sizedbox.dart'; + class ServerDetailPage extends StatefulWidget { const ServerDetailPage(this.id, {Key? key}) : super(key: key); @@ -23,10 +25,6 @@ class ServerDetailPage extends StatefulWidget { _ServerDetailPageState createState() => _ServerDetailPageState(); } -const width13 = SizedBox( - width: 13, -); - class _ServerDetailPageState extends State with SingleTickerProviderStateMixin { late MediaQueryData _media; @@ -48,16 +46,16 @@ class _ServerDetailPageState extends State return Consumer(builder: (_, provider, __) { return _buildMainPage( provider.servers.firstWhere( - (e) => '${e.info.ip}:${e.info.port}' == widget.id, + (e) => e.spi.id == widget.id, ), ); }); } - Widget _buildMainPage(ServerInfo si) { + Widget _buildMainPage(Server si) { return Scaffold( appBar: AppBar( - title: Text(si.info.name, style: textSize18), + title: Text(si.spi.name, style: textSize18), ), body: ListView( padding: const EdgeInsets.all(13), @@ -96,10 +94,10 @@ class _ServerDetailPageState extends State } Widget _buildCPUView(ServerStatus ss) { - final tempWidget = ss.cpu2Status.temp.isEmpty + final tempWidget = ss.cpu.temp.isEmpty ? const SizedBox() : Text( - ss.cpu2Status.temp, + ss.cpu.temp, style: textSize13Grey, ); return RoundRectCard( @@ -112,7 +110,7 @@ class _ServerDetailPageState extends State Row( children: [ Text( - '${ss.cpu2Status.usedPercent(coreIdx: 0).toInt()}%', + '${ss.cpu.usedPercent(coreIdx: 0).toInt()}%', style: textSize27, textScaleFactor: 1.0, ), @@ -121,17 +119,18 @@ class _ServerDetailPageState extends State ), Row( children: [ - _buildDetailPercent(ss.cpu2Status.user, 'user'), + _buildDetailPercent(ss.cpu.user, 'user'), width13, - _buildDetailPercent(ss.cpu2Status.sys, 'sys'), + _buildDetailPercent(ss.cpu.sys, 'sys'), width13, - _buildDetailPercent(ss.cpu2Status.iowait, 'io'), + _buildDetailPercent(ss.cpu.iowait, 'io'), width13, - _buildDetailPercent(ss.cpu2Status.idle, 'idle') + _buildDetailPercent(ss.cpu.idle, 'idle') ], ) ], ), + height13, _buildCPUProgress(ss) ]), ), @@ -159,21 +158,17 @@ class _ServerDetailPageState extends State } Widget _buildCPUProgress(ServerStatus ss) { - return SizedBox( - height: 12.0 * ss.cpu2Status.coresCount, - child: ListView.builder( - physics: const NeverScrollableScrollPhysics(), - padding: const EdgeInsets.only(top: 13), - itemBuilder: (ctx, idx) { - if (idx == 0) return const SizedBox(); - return Padding( - padding: const EdgeInsets.all(2), - child: _buildProgress(ss.cpu2Status.usedPercent(coreIdx: idx)), - ); - }, - itemCount: ss.cpu2Status.coresCount, - ), - ); + final children = []; + for (var i = 0; i < ss.cpu.coresCount; i++) { + if (i == 0) continue; + children.add( + Padding( + padding: const EdgeInsets.all(2), + child: _buildProgress(ss.cpu.usedPercent(coreIdx: i)), + ), + ); + } + return Column(children: children); } Widget _buildProgress(double percent) { @@ -188,72 +183,76 @@ class _ServerDetailPageState extends State } Widget _buildUpTimeAndSys(ServerStatus ss) { - return RoundRectCard(Padding( - padding: roundRectCardPadding, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(ss.sysVer, style: textSize11, textScaleFactor: 1.0), - Text( - ss.uptime, - style: textSize11, - textScaleFactor: 1.0, - ), - ], + return RoundRectCard( + Padding( + padding: roundRectCardPadding, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(ss.sysVer, style: textSize11, textScaleFactor: 1.0), + Text( + ss.uptime, + style: textSize11, + textScaleFactor: 1.0, + ), + ], + ), ), - )); + ); } Widget _buildMemView(ServerStatus ss) { - final used = ss.memory.used / ss.memory.total * 100; - final free = ss.memory.free / ss.memory.total * 100; - final avail = ss.memory.avail / ss.memory.total * 100; + final used = ss.mem.used / ss.mem.total * 100; + final free = ss.mem.free / ss.mem.total * 100; + final avail = ss.mem.avail / ss.mem.total * 100; - return RoundRectCard(Padding( - padding: roundRectCardPadding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - Text('${used.toStringAsFixed(0)}%', style: textSize27), - const SizedBox(width: 7), - Text('of ${(ss.memory.total * 1024).convertBytes}', - style: textSize13Grey) - ], - ), - Row( - children: [ - _buildDetailPercent(free, 'free'), - width13, - _buildDetailPercent(avail, 'avail'), - ], - ), - ], - ), - const SizedBox( - height: 11, - ), - _buildProgress(used) - ], + return RoundRectCard( + Padding( + padding: roundRectCardPadding, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Text('${used.toStringAsFixed(0)}%', style: textSize27), + const SizedBox(width: 7), + Text('of ${(ss.mem.total * 1024).convertBytes}', + style: textSize13Grey) + ], + ), + Row( + children: [ + _buildDetailPercent(free, 'free'), + width13, + _buildDetailPercent(avail, 'avail'), + ], + ), + ], + ), + const SizedBox( + height: 11, + ), + _buildProgress(used) + ], + ), ), - )); + ); } Widget _buildDiskView(ServerStatus ss) { final clone = ss.disk.toList(); for (var item in ss.disk) { - if (ignorePath.any((ele) => item.mountLocation.contains(ele))) { + if (ignorePath.any((ele) => item.loc.contains(ele))) { clone.remove(item); } } final children = clone .map((disk) => Padding( - padding: const EdgeInsets.all(3), + padding: const EdgeInsets.symmetric(vertical: 3), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -265,8 +264,7 @@ class _ServerDetailPageState extends State style: textSize11, textScaleFactor: 1.0, ), - Text(disk.mountPath, - style: textSize11, textScaleFactor: 1.0) + Text(disk.path, style: textSize11, textScaleFactor: 1.0) ], ), _buildProgress(disk.usedPercent.toDouble()) @@ -274,13 +272,15 @@ class _ServerDetailPageState extends State ), )) .toList(); - return RoundRectCard(Padding( - padding: roundRectCardPadding, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: children, + return RoundRectCard( + Padding( + padding: roundRectCardPadding, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: children, + ), ), - )); + ); } Widget _buildNetView(NetSpeed ns) { @@ -301,17 +301,19 @@ class _ServerDetailPageState extends State children.addAll(ns.devices.map((e) => _buildNetSpeedItem(ns, e))); } - return RoundRectCard(Padding( - padding: roundRectCardPadding, - child: Column( - children: children, + return RoundRectCard( + Padding( + padding: roundRectCardPadding, + child: Column( + children: children, + ), ), - )); + ); } Widget _buildNetSpeedTop() { return Padding( - padding: const EdgeInsets.symmetric(vertical: 3), + padding: const EdgeInsets.only(bottom: 3), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: const [ diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index bea0901e..f9088264 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -100,22 +100,20 @@ class _ServerPageState extends State ); } - Widget _buildEachServerCard(ServerInfo si) { + Widget _buildEachServerCard(Server si) { return RoundRectCard( InkWell( onLongPress: () => AppRoute( ServerEditPage( - spi: si.info, + spi: si.spi, ), 'Edit server info page') .go(context), child: Padding( padding: const EdgeInsets.all(13), - child: _buildRealServerCard( - si.status, si.info.name, si.connectionState, si.info), + child: _buildRealServerCard(si.status, si.spi.name, si.cs, si.spi), ), - onTap: () => AppRoute(ServerDetailPage('${si.info.ip}:${si.info.port}'), - 'server detail page') + onTap: () => AppRoute(ServerDetailPage(si.spi.id), 'server detail page') .go(context), ), ); @@ -123,11 +121,10 @@ class _ServerPageState extends State Widget _buildRealServerCard(ServerStatus ss, String serverName, ServerConnectionState cs, ServerPrivateInfo spi) { - final rootDisk = - ss.disk.firstWhere((element) => element.mountLocation == '/'); + final rootDisk = ss.disk.firstWhere((element) => element.loc == '/'); final topRightStr = - getTopRightStr(cs, ss.cpu2Status.temp, ss.uptime, ss.failedInfo); + getTopRightStr(cs, ss.cpu.temp, ss.uptime, ss.failedInfo); final hasError = cs == ServerConnectionState.failed && ss.failedInfo != null; final style = TextStyle( @@ -178,8 +175,8 @@ class _ServerPageState extends State Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - _buildPercentCircle(ss.cpu2Status.usedPercent()), - _buildPercentCircle(ss.memory.used / ss.memory.total * 100), + _buildPercentCircle(ss.cpu.usedPercent()), + _buildPercentCircle(ss.mem.used / ss.mem.total * 100), _buildIOData('Conn:\n${ss.tcp.maxConn}', 'Fail:\n${ss.tcp.fail}'), _buildIOData( 'Total:\n${rootDisk.size}', 'Used:\n${rootDisk.usedPercent}%') diff --git a/lib/view/page/sftp/view.dart b/lib/view/page/sftp/view.dart index 16e5f42c..7778f875 100644 --- a/lib/view/page/sftp/view.dart +++ b/lib/view/page/sftp/view.dart @@ -37,7 +37,7 @@ class _SFTPPageState extends State { late MediaQueryData _media; late S _s; - ServerInfo? _si; + Server? _si; SSHClient? _client; @override @@ -51,7 +51,7 @@ class _SFTPPageState extends State { void initState() { super.initState(); final serverProvider = locator(); - _si = serverProvider.servers.firstWhere((s) => s.info == widget.spi); + _si = serverProvider.servers.firstWhere((s) => s.spi == widget.spi); _client = _si?.client; } @@ -175,8 +175,7 @@ class _SFTPPageState extends State { ); Widget _buildFileView() { - if (_client == null || - _si?.connectionState != ServerConnectionState.connected) { + if (_client == null || _si?.cs != ServerConnectionState.connected) { return centerCircleLoading; } diff --git a/lib/view/page/ssh.dart b/lib/view/page/ssh.dart index dd0d9965..74f45d5d 100644 --- a/lib/view/page/ssh.dart +++ b/lib/view/page/ssh.dart @@ -52,7 +52,7 @@ class _SSHPageState extends State { final client = locator() .servers - .where((e) => e.info.id == widget.spi.id) + .where((e) => e.spi.id == widget.spi.id) .first .client; if (client == null) {