支持添加删除服务器信息,以在服务器状态页显示CPU、内存等

This commit is contained in:
LollipopKit
2021-09-17 00:28:58 +08:00
parent c922bad90c
commit 6b72bc9509
15 changed files with 759 additions and 138 deletions

View File

@@ -0,0 +1,46 @@
class DiskInfo {
/*
{
"mountPath": "",
"mountLocation": "",
"usedPercent": 0,
"used": "",=
"size": "",
"avail": ""
}
*/
String? mountPath;
String? mountLocation;
double? usedPercent;
String? used;
String? size;
String? avail;
DiskInfo({
this.mountPath,
this.mountLocation,
this.usedPercent,
this.used,
this.size,
this.avail,
});
DiskInfo.fromJson(Map<String, dynamic> json) {
mountPath = json["mountPath"]?.toString();
mountLocation = json["mountLocation"]?.toString();
usedPercent = double.parse(json["usedPercent"]);
used = json["used"]?.toString();
size = json["size"]?.toString();
avail = json["avail"]?.toString();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data["mountPath"] = mountPath;
data["mountLocation"] = mountLocation;
data["usedPercent"] = usedPercent;
data["used"] = used;
data["size"] = size;
data["avail"] = avail;
return data;
}
}

View File

@@ -0,0 +1,57 @@
import 'dart:convert';
///
/// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/
///
class ServerPrivateInfo {
/*
{
"ip": "",
"port": 1,
"user": "",
"authorization": ""
}
*/
String? name;
String? ip;
int? port;
String? user;
Object? authorization;
ServerPrivateInfo({
this.name,
this.ip,
this.port,
this.user,
this.authorization,
});
ServerPrivateInfo.fromJson(Map<String, dynamic> json) {
name = json["name"]?.toString();
ip = json["ip"]?.toString();
port = json["port"]?.toInt();
user = json["user"]?.toString();
authorization = json["authorization"];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data["name"] = name;
data["ip"] = ip;
data["port"] = port;
data["user"] = user;
data["authorization"] = authorization;
return data;
}
}
List<ServerPrivateInfo>? getServerInfoList(dynamic data) {
List<ServerPrivateInfo> ss = [];
if (data is String) {
data = json.decode(data);
}
for (var t in data) {
ss.add(ServerPrivateInfo.fromJson(t));
}
return ss;
}

View File

@@ -0,0 +1,90 @@
import 'package:toolbox/data/model/disk_info.dart';
import 'package:toolbox/data/model/tcp_status.dart';
///
/// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/
///
class ServerStatus {
/*
{
"cpuPercent": 0,
"memList": [
1
],
"sysVer": "",
"uptime": "",
"disk": [
{
"mountPath": "",
"mountLocation": "",
"usedPercent": 0,
"used": "",
"size": "",
"avail": ""
}
]
}
*/
double? cpuPercent;
List<int?>? memList;
String? sysVer;
String? uptime;
List<DiskInfo?>? disk;
TcpStatus? tcp;
ServerStatus(
{this.cpuPercent,
this.memList,
this.sysVer,
this.uptime,
this.disk,
this.tcp});
ServerStatus.fromJson(Map<String, dynamic> json) {
cpuPercent = double.parse(json["cpuPercent"]);
if (json["memList"] != null) {
final v = json["memList"];
final arr0 = <int>[];
v.forEach((v) {
arr0.add(v.toInt());
});
memList = arr0;
}
sysVer = json["sysVer"]?.toString();
uptime = json["uptime"]?.toString();
if (json["disk"] != null) {
final v = json["disk"];
final arr0 = <DiskInfo>[];
v.forEach((v) {
arr0.add(DiskInfo.fromJson(v));
});
disk = arr0;
}
tcp = TcpStatus.fromJson(json['tcp']);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data["cpuPercent"] = cpuPercent;
if (memList != null) {
final v = memList;
final arr0 = [];
for (var v in v!) {
arr0.add(v);
}
data["memList"] = arr0;
}
data["sysVer"] = sysVer;
data["uptime"] = uptime;
if (disk != null) {
final v = disk;
final arr0 = [];
for (var v in v!) {
arr0.add(v!.toJson());
}
data["disk"] = arr0;
}
data['tcp'] = tcp;
return data;
}
}

View File

@@ -0,0 +1,39 @@
///
/// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/
///
class TcpStatus {
/*
{
"maxConn": 0,
"active": 1,
"passive": 2,
"fail": 3
}
*/
int? maxConn;
int? active;
int? passive;
int? fail;
TcpStatus({
this.maxConn,
this.active,
this.passive,
this.fail,
});
TcpStatus.fromJson(Map<String, dynamic> json) {
maxConn = json["maxConn"]?.toInt();
active = json["active"]?.toInt();
passive = json["passive"]?.toInt();
fail = json["fail"]?.toInt();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data["maxConn"] = maxConn;
data["active"] = active;
data["passive"] = passive;
data["fail"] = fail;
return data;
}
}

View File

@@ -0,0 +1,29 @@
import 'package:toolbox/core/provider_base.dart';
import 'package:toolbox/data/model/server_private_info.dart';
import 'package:toolbox/data/store/server.dart';
import 'package:toolbox/locator.dart';
class ServerProvider extends BusyProvider {
late List<ServerPrivateInfo> _servers;
List<ServerPrivateInfo> get servers => _servers;
Future<void> loadData() async {
setBusyState(true);
_servers = locator<ServerStore>().fetch();
setBusyState(false);
notifyListeners();
}
void addServer(ServerPrivateInfo info) {
_servers.add(info);
locator<ServerStore>().put(info);
notifyListeners();
}
void delServer(ServerPrivateInfo info) {
_servers.remove(info);
locator<ServerStore>().delete(info);
notifyListeners();
}
}

View File

@@ -1 +1,27 @@
import 'dart:convert';
import 'package:toolbox/core/persistant_store.dart';
import 'package:toolbox/data/model/server_private_info.dart';
class ServerStore extends PersistentStore {
void put(ServerPrivateInfo info) {
final ss = fetch();
if (!have(info)) ss.add(info);
box.put('servers', json.encode(ss));
}
List<ServerPrivateInfo> fetch() {
return getServerInfoList(
json.decode(box.get('servers', defaultValue: '[]')!))!;
}
void delete(ServerPrivateInfo s) {
final ss = fetch();
ss.removeWhere((e) => e.ip == s.ip && e.port == s.port && e.user == e.user);
box.put('servers', json.encode(ss));
}
bool have(ServerPrivateInfo s) => fetch()
.where((e) => e.ip == s.ip && e.port == s.port && e.user == e.user)
.isNotEmpty;
}