mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 23:34:24 +01:00
支持添加删除服务器信息,以在服务器状态页显示CPU、内存等
This commit is contained in:
46
lib/data/model/disk_info.dart
Normal file
46
lib/data/model/disk_info.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
57
lib/data/model/server_private_info.dart
Normal file
57
lib/data/model/server_private_info.dart
Normal 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;
|
||||
}
|
||||
90
lib/data/model/server_status.dart
Normal file
90
lib/data/model/server_status.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
39
lib/data/model/tcp_status.dart
Normal file
39
lib/data/model/tcp_status.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
29
lib/data/provider/server.dart
Normal file
29
lib/data/provider/server.dart
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user