diff --git a/lib/data/model/server_status.dart b/lib/data/model/server_status.dart index 022e7b0e..c202e5e9 100644 --- a/lib/data/model/server_status.dart +++ b/lib/data/model/server_status.dart @@ -35,11 +35,6 @@ class ServerStatus { late List disk; late TcpStatus tcp; - ServerStatus( - this.cpu2Status, - this.memList, - this.sysVer, - this.uptime, - this.disk, - this.tcp); + ServerStatus(this.cpu2Status, this.memList, this.sysVer, this.uptime, + this.disk, this.tcp); } diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index 47078d58..dabd9fce 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -73,15 +73,18 @@ class ServerProvider extends BusyProvider { } return; } - - await Future.wait(_servers.map((s) async { - final idx = _servers.indexOf(s); - final status = await _getData(s.info, idx); - if (status != null) { - _servers[idx].status = status; - notifyListeners(); - } - })); + try { + await Future.wait(_servers.map((s) async { + final idx = _servers.indexOf(s); + final status = await _getData(s.info, idx); + if (status != null) { + _servers[idx].status = status; + notifyListeners(); + } + })); + } catch (e) { + rethrow; + } } Future startAutoRefresh() async { @@ -136,21 +139,27 @@ class ServerProvider extends BusyProvider { logger.warning(e); } } + try { + final cpu = await client.execute("cat /proc/stat | grep cpu") ?? ''; + final mem = await client.execute('free -m') ?? ''; + final sysVer = await client.execute('cat /etc/issue.net') ?? ''; + final upTime = await client.execute('uptime') ?? ''; + final disk = await client.execute('df -h') ?? ''; + final tcp = await client.execute('cat /proc/net/snmp') ?? ''; - final cpu = await client.execute("cat /proc/stat | grep cpu") ?? ''; - final mem = await client.execute('free -m') ?? ''; - final sysVer = await client.execute('cat /etc/issue.net') ?? ''; - final upTime = await client.execute('uptime') ?? ''; - final disk = await client.execute('df -h') ?? ''; - final tcp = await client.execute('cat /proc/net/snmp') ?? ''; - - return ServerStatus( - _getCPU(cpu, _servers[idx].status.cpu2Status), - _getMem(mem), - sysVer.trim(), - _getUpTime(upTime), - _getDisk(disk), - _getTcp(tcp)); + return ServerStatus( + _getCPU(cpu, _servers[idx].status.cpu2Status), + _getMem(mem), + sysVer.trim(), + _getUpTime(upTime), + _getDisk(disk), + _getTcp(tcp)); + } catch (e) { + _servers[idx].connectionState = ServerConnectionState.failed; + notifyListeners(); + logger.warning(e); + return null; + } } Cpu2Status _getCPU(String raw, Cpu2Status old) { diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 19d21547..7ab92d6d 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -14,6 +14,14 @@ class ServerDetailPage extends StatefulWidget { } class _ServerDetailPageState extends State { + late MediaQueryData _media; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _media = MediaQuery.of(context); + } + @override Widget build(BuildContext context) { return Consumer(builder: (_, provider, __) { @@ -34,11 +42,14 @@ class _ServerDetailPageState extends State { } Widget _buildCPUView(ServerStatus ss) { - return ListView.builder( - itemBuilder: (ctx, idx) { - return Text('$idx ${ss.cpu2Status.usedPercent(coreIdx: idx)}'); - }, - itemCount: ss.cpu2Status.now.length, + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: _media.size.height * 0.3), + child: ListView.builder( + itemBuilder: (ctx, idx) { + return Text('$idx ${ss.cpu2Status.usedPercent(coreIdx: idx)}'); + }, + itemCount: ss.cpu2Status.now.length, + ), ); }