mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-18 15:54:35 +01:00
Fix CPU Algorithm
This commit is contained in:
17
lib/data/model/cpu_2_status.dart
Normal file
17
lib/data/model/cpu_2_status.dart
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import 'package:toolbox/data/model/cpu_status.dart';
|
||||||
|
|
||||||
|
class Cpu2Status {
|
||||||
|
List<CpuStatus> pre;
|
||||||
|
List<CpuStatus> now;
|
||||||
|
Cpu2Status(this.pre, this.now);
|
||||||
|
|
||||||
|
double usedPercent({int coreIdx = 0}) {
|
||||||
|
final used = (now[coreIdx].idle - pre[coreIdx].idle) /
|
||||||
|
(now[coreIdx].total - pre[coreIdx].total);
|
||||||
|
return used.isNaN ? 0 : used;
|
||||||
|
}
|
||||||
|
|
||||||
|
Cpu2Status update(List<CpuStatus> newStatus) {
|
||||||
|
return Cpu2Status(now, newStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,13 +15,13 @@ class CpuStatus {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
late String id;
|
late String id;
|
||||||
late double user;
|
late int user;
|
||||||
late double sys;
|
late int sys;
|
||||||
late double nice;
|
late int nice;
|
||||||
late double idle;
|
late int idle;
|
||||||
late double iowait;
|
late int iowait;
|
||||||
late double irq;
|
late int irq;
|
||||||
late double softirq;
|
late int softirq;
|
||||||
|
|
||||||
CpuStatus(
|
CpuStatus(
|
||||||
this.id,
|
this.id,
|
||||||
@@ -56,8 +56,5 @@ class CpuStatus {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
double get calculateUsedPercent {
|
int get total => user + sys + nice + idle + iowait + irq + softirq;
|
||||||
final used = idle / (user + sys + nice + iowait + irq + softirq + idle);
|
|
||||||
return used.isNaN ? 0 : used;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:toolbox/data/model/cpu_percent.dart';
|
import 'package:toolbox/data/model/cpu_2_status.dart';
|
||||||
import 'package:toolbox/data/model/disk_info.dart';
|
import 'package:toolbox/data/model/disk_info.dart';
|
||||||
import 'package:toolbox/data/model/tcp_status.dart';
|
import 'package:toolbox/data/model/tcp_status.dart';
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ class ServerStatus {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
List<CpuStatus>? cpuPercent;
|
Cpu2Status? cpu2Status;
|
||||||
List<int?>? memList;
|
List<int?>? memList;
|
||||||
String? sysVer;
|
String? sysVer;
|
||||||
String? uptime;
|
String? uptime;
|
||||||
@@ -36,59 +36,10 @@ class ServerStatus {
|
|||||||
TcpStatus? tcp;
|
TcpStatus? tcp;
|
||||||
|
|
||||||
ServerStatus(
|
ServerStatus(
|
||||||
{this.cpuPercent,
|
{this.cpu2Status,
|
||||||
this.memList,
|
this.memList,
|
||||||
this.sysVer,
|
this.sysVer,
|
||||||
this.uptime,
|
this.uptime,
|
||||||
this.disk,
|
this.disk,
|
||||||
this.tcp});
|
this.tcp});
|
||||||
ServerStatus.fromJson(Map<String, dynamic> json) {
|
|
||||||
cpuPercent = [];
|
|
||||||
for (var item in json["cpuPercent"]) {
|
|
||||||
cpuPercent!.add(CpuStatus.fromJson(item));
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import 'package:logging/logging.dart';
|
|||||||
import 'package:ssh2/ssh2.dart';
|
import 'package:ssh2/ssh2.dart';
|
||||||
import 'package:toolbox/core/extension/stringx.dart';
|
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/cpu_percent.dart';
|
import 'package:toolbox/data/model/cpu_2_status.dart';
|
||||||
|
import 'package:toolbox/data/model/cpu_status.dart';
|
||||||
import 'package:toolbox/data/model/server_connection_state.dart';
|
import 'package:toolbox/data/model/server_connection_state.dart';
|
||||||
import 'package:toolbox/data/model/disk_info.dart';
|
import 'package:toolbox/data/model/disk_info.dart';
|
||||||
import 'package:toolbox/data/model/server.dart';
|
import 'package:toolbox/data/model/server.dart';
|
||||||
@@ -21,11 +22,13 @@ class ServerProvider extends BusyProvider {
|
|||||||
|
|
||||||
final logger = Logger('ServerProvider');
|
final logger = Logger('ServerProvider');
|
||||||
|
|
||||||
List<CpuStatus> get emptyCpuPercent =>
|
CpuStatus get emptyCpuStatus => CpuStatus('cpu', 0, 0, 0, 0, 0, 0, 0);
|
||||||
[CpuStatus('cpu', 0, 0, 0, 0, 0, 0, 0)];
|
|
||||||
|
Cpu2Status get emptyCpu2Status =>
|
||||||
|
Cpu2Status([emptyCpuStatus], [emptyCpuStatus]);
|
||||||
|
|
||||||
ServerStatus get emptyStatus => ServerStatus(
|
ServerStatus get emptyStatus => ServerStatus(
|
||||||
cpuPercent: emptyCpuPercent,
|
cpu2Status: emptyCpu2Status,
|
||||||
memList: [100, 0],
|
memList: [100, 0],
|
||||||
disk: [
|
disk: [
|
||||||
DiskInfo(
|
DiskInfo(
|
||||||
@@ -142,7 +145,7 @@ class ServerProvider extends BusyProvider {
|
|||||||
final tcp = await client.execute('cat /proc/net/snmp') ?? '';
|
final tcp = await client.execute('cat /proc/net/snmp') ?? '';
|
||||||
|
|
||||||
return ServerStatus(
|
return ServerStatus(
|
||||||
cpuPercent: _getCPU(cpu),
|
cpu2Status: _getCPU(cpu, _servers[idx].status.cpu2Status!),
|
||||||
memList: _getMem(mem),
|
memList: _getMem(mem),
|
||||||
sysVer: sysVer.trim(),
|
sysVer: sysVer.trim(),
|
||||||
disk: _getDisk(disk),
|
disk: _getDisk(disk),
|
||||||
@@ -150,7 +153,7 @@ class ServerProvider extends BusyProvider {
|
|||||||
tcp: _getTcp(tcp));
|
tcp: _getTcp(tcp));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CpuStatus> _getCPU(String raw) {
|
Cpu2Status _getCPU(String raw, Cpu2Status old) {
|
||||||
final List<CpuStatus> cpus = [];
|
final List<CpuStatus> cpus = [];
|
||||||
for (var item in raw.split('\n')) {
|
for (var item in raw.split('\n')) {
|
||||||
if (item == '') break;
|
if (item == '') break;
|
||||||
@@ -158,18 +161,19 @@ class ServerProvider extends BusyProvider {
|
|||||||
final matches = item.replaceFirst(id, '').trim().split(' ');
|
final matches = item.replaceFirst(id, '').trim().split(' ');
|
||||||
cpus.add(CpuStatus(
|
cpus.add(CpuStatus(
|
||||||
id,
|
id,
|
||||||
double.parse(matches[0]),
|
int.parse(matches[0]),
|
||||||
double.parse(matches[1]),
|
int.parse(matches[1]),
|
||||||
double.parse(matches[2]),
|
int.parse(matches[2]),
|
||||||
double.parse(matches[3]),
|
int.parse(matches[3]),
|
||||||
double.parse(matches[4]),
|
int.parse(matches[4]),
|
||||||
double.parse(matches[5]),
|
int.parse(matches[5]),
|
||||||
double.parse(matches[6])));
|
int.parse(matches[6])));
|
||||||
}
|
}
|
||||||
if (cpus.isEmpty) {
|
if (cpus.isEmpty) {
|
||||||
return emptyCpuPercent;
|
return emptyCpu2Status;
|
||||||
}
|
}
|
||||||
return cpus;
|
|
||||||
|
return old.update(cpus);
|
||||||
}
|
}
|
||||||
|
|
||||||
String _getUpTime(String raw) {
|
String _getUpTime(String raw) {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class _ServerDetailPageState extends State<ServerDetailPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildCPUView(ServerStatus ss) {
|
Widget _buildCPUView(ServerStatus ss) {
|
||||||
return Text(ss.cpuPercent!.toString());
|
return Text(ss.cpu2Status!.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMemView(ServerStatus ss) {
|
Widget _buildMemView(ServerStatus ss) {
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
_buildPercentCircle(ss.cpuPercent!.first.calculateUsedPercent, 'CPU'),
|
_buildPercentCircle(ss.cpu2Status!.usedPercent(), 'CPU'),
|
||||||
_buildPercentCircle(
|
_buildPercentCircle(
|
||||||
ss.memList![1]! / ss.memList![0]! * 100 + 0.01, 'Mem'),
|
ss.memList![1]! / ss.memList![0]! * 100 + 0.01, 'Mem'),
|
||||||
_buildIOData('Net', 'Conn:\n' + ss.tcp!.maxConn!.toString(),
|
_buildIOData('Net', 'Conn:\n' + ss.tcp!.maxConn!.toString(),
|
||||||
|
|||||||
Reference in New Issue
Block a user