mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
Change model dir structure
This commit is contained in:
@@ -38,7 +38,7 @@ A new Flutter project which provide a chart view to display server status data.
|
|||||||
- [x] Private Key Store
|
- [x] Private Key Store
|
||||||
- [x] Server Status Detail Page
|
- [x] Server Status Detail Page
|
||||||
- [x] Theme Switch
|
- [x] Theme Switch
|
||||||
- [ ] Custom Home Page
|
- [ ] Execute Snippet
|
||||||
|
|
||||||
## License
|
## License
|
||||||
`Apache License. LollipopKit 2021`
|
`Apache License. LollipopKit 2021`
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 9.4 KiB |
@@ -1,9 +1,10 @@
|
|||||||
import 'package:toolbox/data/model/cpu_status.dart';
|
import 'package:toolbox/data/model/server/cpu_status.dart';
|
||||||
|
|
||||||
class Cpu2Status {
|
class Cpu2Status {
|
||||||
List<CpuStatus> pre;
|
List<CpuStatus> pre;
|
||||||
List<CpuStatus> now;
|
List<CpuStatus> now;
|
||||||
Cpu2Status(this.pre, this.now);
|
String temp;
|
||||||
|
Cpu2Status(this.pre, this.now, this.temp);
|
||||||
|
|
||||||
double usedPercent({int coreIdx = 0}) {
|
double usedPercent({int coreIdx = 0}) {
|
||||||
if (now.length != pre.length) return 0;
|
if (now.length != pre.length) return 0;
|
||||||
@@ -13,8 +14,8 @@ class Cpu2Status {
|
|||||||
return used.isNaN ? 0 : 100 - used * 100;
|
return used.isNaN ? 0 : 100 - used * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
Cpu2Status update(List<CpuStatus> newStatus) {
|
Cpu2Status update(List<CpuStatus> newStatus, String newTemp) {
|
||||||
return Cpu2Status(now, newStatus);
|
return Cpu2Status(now, newStatus, newTemp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int get coresCount => now.length;
|
int get coresCount => now.length;
|
||||||
@@ -5,7 +5,7 @@ class LinuxIcons {
|
|||||||
|
|
||||||
String? search(String sysVer) {
|
String? search(String sysVer) {
|
||||||
for (var item in db) {
|
for (var item in db) {
|
||||||
if (sysVer.contains(item)) {
|
if (sysVer.toLowerCase().contains(item)) {
|
||||||
return 'assets/linux/$item.png';
|
return 'assets/linux/$item.png';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'package:ssh2/ssh2.dart';
|
import 'package:ssh2/ssh2.dart';
|
||||||
import 'package:toolbox/data/model/server_connection_state.dart';
|
import 'package:toolbox/data/model/server/server_connection_state.dart';
|
||||||
import 'package:toolbox/data/model/server_private_info.dart';
|
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||||
import 'package:toolbox/data/model/server_status.dart';
|
import 'package:toolbox/data/model/server/server_status.dart';
|
||||||
|
|
||||||
class ServerInfo {
|
class ServerInfo {
|
||||||
ServerPrivateInfo info;
|
ServerPrivateInfo info;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:toolbox/data/model/cpu_2_status.dart';
|
import 'package:toolbox/data/model/server/cpu_2_status.dart';
|
||||||
import 'package:toolbox/data/model/disk_info.dart';
|
import 'package:toolbox/data/model/server/disk_info.dart';
|
||||||
import 'package:toolbox/data/model/tcp_status.dart';
|
import 'package:toolbox/data/model/server/tcp_status.dart';
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/
|
/// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:toolbox/core/provider_base.dart';
|
import 'package:toolbox/core/provider_base.dart';
|
||||||
import 'package:toolbox/data/model/private_key_info.dart';
|
import 'package:toolbox/data/model/server/private_key_info.dart';
|
||||||
import 'package:toolbox/data/store/private_key.dart';
|
import 'package:toolbox/data/store/private_key.dart';
|
||||||
import 'package:toolbox/locator.dart';
|
import 'package:toolbox/locator.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ 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_2_status.dart';
|
import 'package:toolbox/data/model/server/cpu_2_status.dart';
|
||||||
import 'package:toolbox/data/model/cpu_status.dart';
|
import 'package:toolbox/data/model/server/cpu_status.dart';
|
||||||
import 'package:toolbox/data/model/server_connection_state.dart';
|
import 'package:toolbox/data/model/server/server_connection_state.dart';
|
||||||
import 'package:toolbox/data/model/disk_info.dart';
|
import 'package:toolbox/data/model/server/disk_info.dart';
|
||||||
import 'package:toolbox/data/model/server.dart';
|
import 'package:toolbox/data/model/server/server.dart';
|
||||||
import 'package:toolbox/data/model/server_private_info.dart';
|
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||||
import 'package:toolbox/data/model/server_status.dart';
|
import 'package:toolbox/data/model/server/server_status.dart';
|
||||||
import 'package:toolbox/data/model/tcp_status.dart';
|
import 'package:toolbox/data/model/server/tcp_status.dart';
|
||||||
import 'package:toolbox/data/store/server.dart';
|
import 'package:toolbox/data/store/server.dart';
|
||||||
import 'package:toolbox/data/store/setting.dart';
|
import 'package:toolbox/data/store/setting.dart';
|
||||||
import 'package:toolbox/locator.dart';
|
import 'package:toolbox/locator.dart';
|
||||||
@@ -25,7 +25,7 @@ class ServerProvider extends BusyProvider {
|
|||||||
CpuStatus get emptyCpuStatus => CpuStatus('cpu', 0, 0, 0, 0, 0, 0, 0);
|
CpuStatus get emptyCpuStatus => CpuStatus('cpu', 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
|
||||||
Cpu2Status get emptyCpu2Status =>
|
Cpu2Status get emptyCpu2Status =>
|
||||||
Cpu2Status([emptyCpuStatus], [emptyCpuStatus]);
|
Cpu2Status([emptyCpuStatus], [emptyCpuStatus], '');
|
||||||
|
|
||||||
ServerStatus get emptyStatus => ServerStatus(
|
ServerStatus get emptyStatus => ServerStatus(
|
||||||
emptyCpu2Status,
|
emptyCpu2Status,
|
||||||
@@ -133,16 +133,20 @@ class ServerProvider extends BusyProvider {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
final cpu = await client.execute("cat /proc/stat | grep cpu") ?? '';
|
final cpu = await client.execute("cat /proc/stat | grep cpu") ?? '';
|
||||||
|
final cpuTemp = await client.execute(
|
||||||
|
r"paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'") ??
|
||||||
|
'';
|
||||||
final mem = await client.execute('free -m') ?? '';
|
final mem = await client.execute('free -m') ?? '';
|
||||||
final sysVer = await client.execute('cat /etc/issue.net') ?? '';
|
final sysVer =
|
||||||
|
await client.execute('cat /etc/os-release | grep PRETTY_NAME') ?? '';
|
||||||
final upTime = await client.execute('uptime') ?? '';
|
final upTime = await client.execute('uptime') ?? '';
|
||||||
final disk = await client.execute('df -h') ?? '';
|
final disk = await client.execute('df -h') ?? '';
|
||||||
final tcp = await client.execute('cat /proc/net/snmp') ?? '';
|
final tcp = await client.execute('cat /proc/net/snmp') ?? '';
|
||||||
|
|
||||||
return ServerStatus(
|
return ServerStatus(
|
||||||
_getCPU(cpu, _servers[idx].status.cpu2Status),
|
_getCPU(cpu, _servers[idx].status.cpu2Status, cpuTemp),
|
||||||
_getMem(mem),
|
_getMem(mem),
|
||||||
sysVer.trim(),
|
_getSysVer(sysVer),
|
||||||
_getUpTime(upTime),
|
_getUpTime(upTime),
|
||||||
_getDisk(disk),
|
_getDisk(disk),
|
||||||
_getTcp(tcp));
|
_getTcp(tcp));
|
||||||
@@ -154,8 +158,27 @@ class ServerProvider extends BusyProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Cpu2Status _getCPU(String raw, Cpu2Status old) {
|
String _getSysVer(String raw) {
|
||||||
|
final s = raw.split('=');
|
||||||
|
if (s.length == 2) {
|
||||||
|
return s[1].replaceAll('"', '').replaceFirst('\n', '');
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
String _getCPUTemp(String raw) {
|
||||||
|
final split = raw.split('\n');
|
||||||
|
for (var item in split) {
|
||||||
|
if (item.contains('x86_pkg_temp') || item.contains('cpu_thermal')) {
|
||||||
|
return item.split(' ').last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
Cpu2Status _getCPU(String raw, Cpu2Status old, String temp) {
|
||||||
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;
|
||||||
final id = item.split(' ').first;
|
final id = item.split(' ').first;
|
||||||
@@ -174,7 +197,7 @@ class ServerProvider extends BusyProvider {
|
|||||||
return emptyCpu2Status;
|
return emptyCpu2Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
return old.update(cpus);
|
return old.update(cpus, _getCPUTemp(temp));
|
||||||
}
|
}
|
||||||
|
|
||||||
String _getUpTime(String raw) {
|
String _getUpTime(String raw) {
|
||||||
@@ -190,11 +213,7 @@ class ServerProvider extends BusyProvider {
|
|||||||
}
|
}
|
||||||
if (idx == 2) {
|
if (idx == 2) {
|
||||||
final vals = item.split(RegExp(r'\s{1,}'));
|
final vals = item.split(RegExp(r'\s{1,}'));
|
||||||
return TcpStatus(
|
return TcpStatus(vals[5].i, vals[6].i, vals[7].i, vals[8].i);
|
||||||
vals[5].i,
|
|
||||||
vals[6].i,
|
|
||||||
vals[7].i,
|
|
||||||
vals[8].i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TcpStatus(0, 0, 0, 0);
|
return TcpStatus(0, 0, 0, 0);
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
class BuildData {
|
class BuildData {
|
||||||
static const String name = "ToolBox";
|
static const String name = "ToolBox";
|
||||||
static const int build = 40;
|
static const int build = 42;
|
||||||
static const String engine = "Flutter 2.5.3 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 18116933e7 (13 days ago) • 2021-10-15 10:46:35 -0700\nEngine • revision d3ea636dc5\nTools • Dart 2.14.4\n";
|
static const String engine = "Flutter 2.5.3 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 18116933e7 (13 days ago) • 2021-10-15 10:46:35 -0700\nEngine • revision d3ea636dc5\nTools • Dart 2.14.4\n";
|
||||||
static const String buildAt = "2021-10-28 19:02:21.118303";
|
static const String buildAt = "2021-10-28 19:40:46.947619";
|
||||||
static const int modifications = 17;
|
static const int modifications = 32;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:toolbox/data/model/linux_icon.dart';
|
import 'package:toolbox/data/model/server/linux_icon.dart';
|
||||||
|
|
||||||
final linuxIcons = LinuxIcons(['ubuntu', 'arch', 'centos', 'debian', 'fedora',
|
final linuxIcons = LinuxIcons(['ubuntu', 'arch', 'centos', 'debian', 'fedora',
|
||||||
'opensuse', 'kali']);
|
'opensuse', 'kali']);
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:toolbox/data/model/update.dart';
|
import 'package:toolbox/data/model/app/update.dart';
|
||||||
import 'package:toolbox/data/res/url.dart';
|
import 'package:toolbox/data/res/url.dart';
|
||||||
|
|
||||||
class AppService {
|
class AppService {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:toolbox/core/persistant_store.dart';
|
import 'package:toolbox/core/persistant_store.dart';
|
||||||
import 'package:toolbox/data/model/private_key_info.dart';
|
import 'package:toolbox/data/model/server/private_key_info.dart';
|
||||||
|
|
||||||
class PrivateKeyStore extends PersistentStore {
|
class PrivateKeyStore extends PersistentStore {
|
||||||
void put(PrivateKeyInfo info) {
|
void put(PrivateKeyInfo info) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:toolbox/core/persistant_store.dart';
|
import 'package:toolbox/core/persistant_store.dart';
|
||||||
import 'package:toolbox/data/model/server_private_info.dart';
|
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||||
|
|
||||||
class ServerStore extends PersistentStore {
|
class ServerStore extends PersistentStore {
|
||||||
void put(ServerPrivateInfo info) {
|
void put(ServerPrivateInfo info) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:after_layout/after_layout.dart';
|
import 'package:after_layout/after_layout.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:toolbox/data/model/private_key_info.dart';
|
import 'package:toolbox/data/model/server/private_key_info.dart';
|
||||||
import 'package:toolbox/data/provider/private_key.dart';
|
import 'package:toolbox/data/provider/private_key.dart';
|
||||||
import 'package:toolbox/locator.dart';
|
import 'package:toolbox/locator.dart';
|
||||||
import 'package:toolbox/view/widget/input_decoration.dart';
|
import 'package:toolbox/view/widget/input_decoration.dart';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:toolbox/data/model/server.dart';
|
import 'package:toolbox/data/model/server/server.dart';
|
||||||
import 'package:toolbox/data/model/server_status.dart';
|
import 'package:toolbox/data/model/server/server_status.dart';
|
||||||
import 'package:toolbox/data/provider/server.dart';
|
import 'package:toolbox/data/provider/server.dart';
|
||||||
import 'package:toolbox/data/res/color.dart';
|
import 'package:toolbox/data/res/color.dart';
|
||||||
import 'package:toolbox/data/res/linux_icons.dart';
|
import 'package:toolbox/data/res/linux_icons.dart';
|
||||||
@@ -54,7 +54,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildLinuxIcon(String sysVer) {
|
Widget _buildLinuxIcon(String sysVer) {
|
||||||
final iconPath = linuxIcons.search(sysVer.toLowerCase());
|
final iconPath = linuxIcons.search(sysVer);
|
||||||
if (iconPath == null) return const SizedBox();
|
if (iconPath == null) return const SizedBox();
|
||||||
return SizedBox(height: _media.size.height * 0.15, child: Image.asset(iconPath));
|
return SizedBox(height: _media.size.height * 0.15, child: Image.asset(iconPath));
|
||||||
}
|
}
|
||||||
@@ -260,5 +260,5 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const ignorePath = ['/run', '/sys', '/dev/shm', '/snap'];
|
static const ignorePath = ['/run', '/sys', '/dev/shm', '/snap', '/var/lib/docker'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:toolbox/core/route.dart';
|
import 'package:toolbox/core/route.dart';
|
||||||
import 'package:toolbox/core/utils.dart';
|
import 'package:toolbox/core/utils.dart';
|
||||||
import 'package:toolbox/data/model/server_private_info.dart';
|
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||||
import 'package:toolbox/data/provider/private_key.dart';
|
import 'package:toolbox/data/provider/private_key.dart';
|
||||||
import 'package:toolbox/data/provider/server.dart';
|
import 'package:toolbox/data/provider/server.dart';
|
||||||
import 'package:toolbox/data/res/color.dart';
|
import 'package:toolbox/data/res/color.dart';
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
|||||||
import 'package:get_it/get_it.dart';
|
import 'package:get_it/get_it.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:toolbox/core/route.dart';
|
import 'package:toolbox/core/route.dart';
|
||||||
import 'package:toolbox/data/model/server.dart';
|
import 'package:toolbox/data/model/server/server.dart';
|
||||||
import 'package:toolbox/data/model/server_connection_state.dart';
|
import 'package:toolbox/data/model/server/server_connection_state.dart';
|
||||||
import 'package:toolbox/data/model/server_status.dart';
|
import 'package:toolbox/data/model/server/server_status.dart';
|
||||||
import 'package:toolbox/data/provider/server.dart';
|
import 'package:toolbox/data/provider/server.dart';
|
||||||
import 'package:toolbox/data/store/setting.dart';
|
import 'package:toolbox/data/store/setting.dart';
|
||||||
import 'package:toolbox/locator.dart';
|
import 'package:toolbox/locator.dart';
|
||||||
@@ -123,7 +123,7 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 12),
|
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 12),
|
||||||
textScaleFactor: 1.0,
|
textScaleFactor: 1.0,
|
||||||
),
|
),
|
||||||
Text(getTopRightStr(cs, ss.uptime),
|
Text(getTopRightStr(cs, ss.cpu2Status.temp, ss.uptime),
|
||||||
textScaleFactor: 1.0,
|
textScaleFactor: 1.0,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: _theme.textTheme.bodyText1!.color!.withAlpha(100),
|
color: _theme.textTheme.bodyText1!.color!.withAlpha(100),
|
||||||
@@ -148,12 +148,12 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTopRightStr(ServerConnectionState cs, String upTime) {
|
String getTopRightStr(ServerConnectionState cs, String temp, String upTime) {
|
||||||
switch (cs) {
|
switch (cs) {
|
||||||
case ServerConnectionState.disconnected:
|
case ServerConnectionState.disconnected:
|
||||||
return 'Disconnected';
|
return 'Disconnected';
|
||||||
case ServerConnectionState.connected:
|
case ServerConnectionState.connected:
|
||||||
return upTime == '' ? 'Loading...' : upTime;
|
return temp == '' ? (upTime == '' ? 'Loading...' : upTime) : temp;
|
||||||
case ServerConnectionState.connecting:
|
case ServerConnectionState.connecting:
|
||||||
return 'Connecting...';
|
return 'Connecting...';
|
||||||
case ServerConnectionState.failed:
|
case ServerConnectionState.failed:
|
||||||
|
|||||||
Reference in New Issue
Block a user