Update memList to Memory

This commit is contained in:
LollipopKit
2021-11-02 19:21:04 +08:00
parent 9e73dd07ca
commit d38bad7802
8 changed files with 50 additions and 22 deletions

View File

@@ -0,0 +1,9 @@
class Memory {
int total;
int used;
int free;
int shared;
int cache;
int avail;
Memory({required this.total, required this.used, required this.free, required this.shared, required this.cache, required this.avail});
}

View File

@@ -1,5 +1,6 @@
import 'package:toolbox/data/model/server/cpu_2_status.dart'; import 'package:toolbox/data/model/server/cpu_2_status.dart';
import 'package:toolbox/data/model/server/disk_info.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'; import 'package:toolbox/data/model/server/net_speed.dart';
import 'package:toolbox/data/model/server/tcp_status.dart'; import 'package:toolbox/data/model/server/tcp_status.dart';
@@ -30,13 +31,13 @@ class ServerStatus {
*/ */
Cpu2Status cpu2Status; Cpu2Status cpu2Status;
List<int> memList; Memory memory;
String sysVer; String sysVer;
String uptime; String uptime;
List<DiskInfo> disk; List<DiskInfo> disk;
TcpStatus tcp; TcpStatus tcp;
NetSpeed netSpeed; NetSpeed netSpeed;
ServerStatus(this.cpu2Status, this.memList, this.sysVer, this.uptime, ServerStatus(this.cpu2Status, this.memory, this.sysVer, this.uptime,
this.disk, this.tcp, this.netSpeed); this.disk, this.tcp, this.netSpeed);
} }

View File

@@ -6,6 +6,7 @@ import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/core/provider_base.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_2_status.dart';
import 'package:toolbox/data/model/server/cpu_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'; import 'package:toolbox/data/model/server/net_speed.dart';
import 'package:toolbox/data/model/server/server_connection_state.dart'; import 'package:toolbox/data/model/server/server_connection_state.dart';
import 'package:toolbox/data/model/server/disk_info.dart'; import 'package:toolbox/data/model/server/disk_info.dart';
@@ -23,6 +24,9 @@ class ServerProvider extends BusyProvider {
final logger = Logger('ServerProvider'); final logger = Logger('ServerProvider');
Memory get emptyMemory =>
Memory(total: 1, used: 0, free: 1, shared: 0, cache: 0, avail: 1);
NetSpeedPart get emptyNetSpeedPart => NetSpeedPart('', 0, 0, 0); NetSpeedPart get emptyNetSpeedPart => NetSpeedPart('', 0, 0, 0);
NetSpeed get emptyNetSpeed => NetSpeed get emptyNetSpeed =>
@@ -35,7 +39,7 @@ class ServerProvider extends BusyProvider {
ServerStatus get emptyStatus => ServerStatus( ServerStatus get emptyStatus => ServerStatus(
emptyCpu2Status, emptyCpu2Status,
[100, 0], emptyMemory,
'Loading...', 'Loading...',
'', '',
[DiskInfo('/', '/', 0, '0', '0', '0')], [DiskInfo('/', '/', 0, '0', '0', '0')],
@@ -269,15 +273,21 @@ class ServerProvider extends BusyProvider {
return list; return list;
} }
List<int> _getMem(String mem) { Memory _getMem(String mem) {
for (var item in mem.split('\n')) { for (var item in mem.split('\n')) {
if (item.contains('Mem:')) { if (item.contains('Mem:')) {
return RegExp(r'[1-9][0-9]*') final split = item.replaceFirst('Mem:', '').split(' ');
.allMatches(item) split.removeWhere((e) => e == '');
.map((e) => int.parse(item.substring(e.start, e.end))) final memList = split.map((e) => int.parse(e)).toList();
.toList(); return Memory(
total: memList[0],
used: memList[1],
free: memList[2],
shared: memList[3],
cache: memList[4],
avail: memList[5]);
} }
} }
return []; return emptyMemory;
} }
} }

View File

@@ -16,6 +16,7 @@ import 'package:toolbox/view/page/debug.dart';
import 'package:toolbox/view/page/private_key/stored.dart'; import 'package:toolbox/view/page/private_key/stored.dart';
import 'package:toolbox/view/page/server/tab.dart'; import 'package:toolbox/view/page/server/tab.dart';
import 'package:toolbox/view/page/setting.dart'; import 'package:toolbox/view/page/setting.dart';
import 'package:toolbox/view/page/snippet/list.dart';
import 'package:toolbox/view/widget/url_text.dart'; import 'package:toolbox/view/widget/url_text.dart';
class MyHomePage extends StatefulWidget { class MyHomePage extends StatefulWidget {
@@ -87,6 +88,13 @@ class _MyHomePageState extends State<MyHomePage>
AppRoute(const StoredPrivateKeysPage(), 'private key list') AppRoute(const StoredPrivateKeysPage(), 'private key list')
.go(context), .go(context),
), ),
ListTile(
leading: const Icon(Icons.snippet_folder),
title: const Text('Snippet'),
onTap: () =>
AppRoute(const SnippetListPage(), 'snippet list')
.go(context),
),
AboutListTile( AboutListTile(
icon: const Icon(Icons.text_snippet), icon: const Icon(Icons.text_snippet),
child: const Text('Licences'), child: const Text('Licences'),

View File

@@ -182,7 +182,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
Widget _buildMemView(ServerStatus ss) { Widget _buildMemView(ServerStatus ss) {
final pColor = primaryColor; final pColor = primaryColor;
final used = ss.memList[1] / ss.memList[0]; final used = ss.memory.used / ss.memory.total;
final width = _media.size.width - 17 * 2 - 17 * 2; final width = _media.size.width - 17 * 2 - 17 * 2;
return RoundRectCard(SizedBox( return RoundRectCard(SizedBox(
height: 47, height: 47,
@@ -212,10 +212,10 @@ class _ServerDetailPageState extends State<ServerDetailPage>
SizedBox( SizedBox(
width: width * (1 - used), width: width * (1 - used),
child: LinearProgressIndicator( child: LinearProgressIndicator(
// length == 2: failed to get mem list, now mem list = [100,0] which is initial value. // memory.total == 1: failed to get mem, now mem = [emptyMemory] which is initial value.
value: ss.memList.length == 2 value: ss.memory.total == 1
? 0 ? 0
: ss.memList[4] / ss.memList[0], : ss.memory.cache / ss.memory.total,
backgroundColor: progressColor.resolve(context), backgroundColor: progressColor.resolve(context),
color: pColor.withAlpha(77), color: pColor.withAlpha(77),
), ),

View File

@@ -138,7 +138,7 @@ class _ServerPageState extends State<ServerPage>
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
_buildPercentCircle(ss.cpu2Status.usedPercent(), 'CPU'), _buildPercentCircle(ss.cpu2Status.usedPercent(), 'CPU'),
_buildPercentCircle(ss.memList[1] / ss.memList[0] * 100, 'Mem'), _buildPercentCircle(ss.memory.used / ss.memory.total * 100, 'Mem'),
_buildIOData('Net', 'Conn:\n' + ss.tcp.maxConn.toString(), _buildIOData('Net', 'Conn:\n' + ss.tcp.maxConn.toString(),
'Fail:\n' + ss.tcp.fail.toString()), 'Fail:\n' + ss.tcp.fail.toString()),
_buildIOData('Disk', 'Total:\n' + rootDisk.size, _buildIOData('Disk', 'Total:\n' + rootDisk.size,

View File

@@ -1,13 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SnappetEditPage extends StatefulWidget { class SnippetEditPage extends StatefulWidget {
const SnappetEditPage({Key? key}) : super(key: key); const SnippetEditPage({Key? key}) : super(key: key);
@override @override
_SnappetEditPageState createState() => _SnappetEditPageState(); _SnippetEditPageState createState() => _SnippetEditPageState();
} }
class _SnappetEditPageState extends State<SnappetEditPage> { class _SnippetEditPageState extends State<SnippetEditPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container(); return Container();

View File

@@ -1,13 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SnappetListPage extends StatefulWidget { class SnippetListPage extends StatefulWidget {
const SnappetListPage({Key? key}) : super(key: key); const SnippetListPage({Key? key}) : super(key: key);
@override @override
_SnappetListPageState createState() => _SnappetListPageState(); _SnippetListPageState createState() => _SnippetListPageState();
} }
class _SnappetListPageState extends State<SnappetListPage> { class _SnippetListPageState extends State<SnippetListPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container(); return Container();