From 6db223ec5a4664c6a070f41e9d16a96972f9d1c6 Mon Sep 17 00:00:00 2001 From: LollipopKit <2036293523@qq.com> Date: Thu, 28 Oct 2021 21:04:59 +0800 Subject: [PATCH] Change model dir structure --- README.md | 2 +- assets/linux/centos.png | Bin 7567 -> 9635 bytes lib/data/model/{ => app}/update.dart | 0 lib/data/model/{ => server}/cpu_2_status.dart | 9 +-- lib/data/model/{ => server}/cpu_status.dart | 0 lib/data/model/{ => server}/disk_info.dart | 0 lib/data/model/{ => server}/linux_icon.dart | 2 +- .../model/{ => server}/private_key_info.dart | 0 lib/data/model/{ => server}/server.dart | 6 +- .../{ => server}/server_connection_state.dart | 0 .../{ => server}/server_private_info.dart | 0 .../model/{ => server}/server_status.dart | 6 +- lib/data/model/{ => server}/tcp_status.dart | 0 lib/data/provider/private_key.dart | 2 +- lib/data/provider/server.dart | 57 ++++++++++++------ lib/data/res/build_data.dart | 6 +- lib/data/res/linux_icons.dart | 2 +- lib/data/service/app.dart | 2 +- lib/data/store/private_key.dart | 2 +- lib/data/store/server.dart | 2 +- lib/view/page/private_key/edit.dart | 2 +- lib/view/page/server/detail.dart | 8 +-- lib/view/page/server/edit.dart | 2 +- lib/view/page/server/tab.dart | 12 ++-- 24 files changed, 71 insertions(+), 51 deletions(-) rename lib/data/model/{ => app}/update.dart (100%) rename lib/data/model/{ => server}/cpu_2_status.dart (82%) rename lib/data/model/{ => server}/cpu_status.dart (100%) rename lib/data/model/{ => server}/disk_info.dart (100%) rename lib/data/model/{ => server}/linux_icon.dart (80%) rename lib/data/model/{ => server}/private_key_info.dart (100%) rename lib/data/model/{ => server}/server.dart (53%) rename lib/data/model/{ => server}/server_connection_state.dart (100%) rename lib/data/model/{ => server}/server_private_info.dart (100%) rename lib/data/model/{ => server}/server_status.dart (77%) rename lib/data/model/{ => server}/tcp_status.dart (100%) diff --git a/README.md b/README.md index 6899397f..48991418 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ A new Flutter project which provide a chart view to display server status data. - [x] Private Key Store - [x] Server Status Detail Page - [x] Theme Switch -- [ ] Custom Home Page +- [ ] Execute Snippet ## License `Apache License. LollipopKit 2021` diff --git a/assets/linux/centos.png b/assets/linux/centos.png index e6c89cfd814de2517f803138216718069bdd04f1..4eba575cc75b3eab0215a9f20035037f858a493b 100644 GIT binary patch literal 9635 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 literal 7567 zcmXYWWmr_-*Y*HPcQ-hLgXGYS5<`gy$RME%NDQTbgrp#ig!};M z25AK8ddL6semLi>YhUZEIQKql@3rp)13h&LQdUv`06?Ls0W$&s@U(HV6)_?14%UZN z;2tF28VDo+KurGc!Xw|0!wCQuKUH%-V=pJaKs#SYKww~?h^wbN(%#P7QN+vFIcHyi z6{p1ePszm9@3|wu#Kn>OiKC~VzA?9sm$MhQsiUu-tG(Uxe*)6g%ai-(3sV4qeOnWz zViJ_QmlqsnGBF+XK9HA$M3eY+%nxPaa*M$3`}hA7#CUjAYO6lA@YusthPr&H@PD(VT-{$<%0z8H*L0ThTAd0;N@`tXzZjzvnXRy_nY+6ZT<<3R;-)E&(9X{c;{yQf1}2J z3?J1%+t*D4q~p&%o3opIu_)y5$6`4w7sfsA0^bBkL@W{4+NXr`G?;@!6&|ThpD)t+ z4eml`&a*%j5Mf4bZjE~R*W~a@HBi#)!$XbLD~Z-1#jp0-n^#8Wdi_4N#91i>DgS|% zHGwsPp^xg#!Ob99VQuvcvb00g0*s|F2a-?~J?bE&lhnP!SMWTLo6}R39)GHbpZgJ)~R9 z0FN^`lK;<~v@A%w9mdl2FST<`J@DbVu-5O-zd;4dZcO1|Ms3z2i5ioM&mB<3lLGd? z7O#(7277md4yatzk#jw1KfGwBPYpMxmTy-{sD6ohhW3jVj3_R0n@BL5uu(Tr{8}?! zWI}0F>TlMVgJpHFH7&&FFGs?CRCjV3YV0p6hO4i3kx*44>-3Z=KrRSaTkG$W)J@AC zyv08Evn`+E$DP(*XTjsR40bK+Qj|Vu7P0u3m&PM?wheRO%rC&qdUmt7(@^8M9@lsf zf80er(~x-GcHeK;#ks5Ii{CCPvK3~s|0o%Q*Db)|{@FZ0_vf4S%Z-NY_9N1f-b{M( z)eIl1H%x+APSjX_}ke%$mT!t#s zhtbzJmwYZWpMD_kltR0*rgsdQDdwL|rxS-o^YIS+d?7f6`I}TJ2m)c+rkOl5~`ZA`LVtm|jTd*F&a#y* zo{HJ3p`U0`{`mXw5!B(1=C82m{SOiSS^*Lbj!o(~O(sntzdnuuA%7*cFE7IdOORnd ztia~}!a@xSITzY|c57p+vKuw78X7?d+0y1>NIaMN&`gBM7y8KCMN8H13y3#MD~rv# zFbjh1L4zgRC4gB104b-0^iltO@Al0CY6OSU)Ki^*W|nX-8&qTHX-Kumraue69`R8#n0OLJ z2eC9h!*h%Jq+ilb+c;Z-+#9~8K%zQAs8$5mp(quOmZ;K=+sN0yvI3B1k0?BZ1tj|ZP*U7wY_t|D z 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 XS!S8#rF%G@6ric92djE)`{Mrr$Ucao diff --git a/lib/data/model/update.dart b/lib/data/model/app/update.dart similarity index 100% rename from lib/data/model/update.dart rename to lib/data/model/app/update.dart diff --git a/lib/data/model/cpu_2_status.dart b/lib/data/model/server/cpu_2_status.dart similarity index 82% rename from lib/data/model/cpu_2_status.dart rename to lib/data/model/server/cpu_2_status.dart index c908a51d..fc453621 100644 --- a/lib/data/model/cpu_2_status.dart +++ b/lib/data/model/server/cpu_2_status.dart @@ -1,9 +1,10 @@ -import 'package:toolbox/data/model/cpu_status.dart'; +import 'package:toolbox/data/model/server/cpu_status.dart'; class Cpu2Status { List pre; List now; - Cpu2Status(this.pre, this.now); + String temp; + Cpu2Status(this.pre, this.now, this.temp); double usedPercent({int coreIdx = 0}) { if (now.length != pre.length) return 0; @@ -13,8 +14,8 @@ class Cpu2Status { return used.isNaN ? 0 : 100 - used * 100; } - Cpu2Status update(List newStatus) { - return Cpu2Status(now, newStatus); + Cpu2Status update(List newStatus, String newTemp) { + return Cpu2Status(now, newStatus, newTemp); } int get coresCount => now.length; diff --git a/lib/data/model/cpu_status.dart b/lib/data/model/server/cpu_status.dart similarity index 100% rename from lib/data/model/cpu_status.dart rename to lib/data/model/server/cpu_status.dart diff --git a/lib/data/model/disk_info.dart b/lib/data/model/server/disk_info.dart similarity index 100% rename from lib/data/model/disk_info.dart rename to lib/data/model/server/disk_info.dart diff --git a/lib/data/model/linux_icon.dart b/lib/data/model/server/linux_icon.dart similarity index 80% rename from lib/data/model/linux_icon.dart rename to lib/data/model/server/linux_icon.dart index 675544c6..522cffcb 100644 --- a/lib/data/model/linux_icon.dart +++ b/lib/data/model/server/linux_icon.dart @@ -5,7 +5,7 @@ class LinuxIcons { String? search(String sysVer) { for (var item in db) { - if (sysVer.contains(item)) { + if (sysVer.toLowerCase().contains(item)) { return 'assets/linux/$item.png'; } } diff --git a/lib/data/model/private_key_info.dart b/lib/data/model/server/private_key_info.dart similarity index 100% rename from lib/data/model/private_key_info.dart rename to lib/data/model/server/private_key_info.dart diff --git a/lib/data/model/server.dart b/lib/data/model/server/server.dart similarity index 53% rename from lib/data/model/server.dart rename to lib/data/model/server/server.dart index dd9852f9..b2687041 100644 --- a/lib/data/model/server.dart +++ b/lib/data/model/server/server.dart @@ -1,7 +1,7 @@ import 'package:ssh2/ssh2.dart'; -import 'package:toolbox/data/model/server_connection_state.dart'; -import 'package:toolbox/data/model/server_private_info.dart'; -import 'package:toolbox/data/model/server_status.dart'; +import 'package:toolbox/data/model/server/server_connection_state.dart'; +import 'package:toolbox/data/model/server/server_private_info.dart'; +import 'package:toolbox/data/model/server/server_status.dart'; class ServerInfo { ServerPrivateInfo info; diff --git a/lib/data/model/server_connection_state.dart b/lib/data/model/server/server_connection_state.dart similarity index 100% rename from lib/data/model/server_connection_state.dart rename to lib/data/model/server/server_connection_state.dart diff --git a/lib/data/model/server_private_info.dart b/lib/data/model/server/server_private_info.dart similarity index 100% rename from lib/data/model/server_private_info.dart rename to lib/data/model/server/server_private_info.dart diff --git a/lib/data/model/server_status.dart b/lib/data/model/server/server_status.dart similarity index 77% rename from lib/data/model/server_status.dart rename to lib/data/model/server/server_status.dart index c9a4d106..43c42562 100644 --- a/lib/data/model/server_status.dart +++ b/lib/data/model/server/server_status.dart @@ -1,6 +1,6 @@ -import 'package:toolbox/data/model/cpu_2_status.dart'; -import 'package:toolbox/data/model/disk_info.dart'; -import 'package:toolbox/data/model/tcp_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/tcp_status.dart'; /// /// Code generated by jsonToDartModel https://ashamp.github.io/jsonToDartModel/ diff --git a/lib/data/model/tcp_status.dart b/lib/data/model/server/tcp_status.dart similarity index 100% rename from lib/data/model/tcp_status.dart rename to lib/data/model/server/tcp_status.dart diff --git a/lib/data/provider/private_key.dart b/lib/data/provider/private_key.dart index 9b6ea3f6..4fd8f902 100644 --- a/lib/data/provider/private_key.dart +++ b/lib/data/provider/private_key.dart @@ -1,5 +1,5 @@ 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/locator.dart'; diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index ea032c11..1aa64848 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -4,14 +4,14 @@ import 'package:logging/logging.dart'; import 'package:ssh2/ssh2.dart'; import 'package:toolbox/core/extension/stringx.dart'; import 'package:toolbox/core/provider_base.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/disk_info.dart'; -import 'package:toolbox/data/model/server.dart'; -import 'package:toolbox/data/model/server_private_info.dart'; -import 'package:toolbox/data/model/server_status.dart'; -import 'package:toolbox/data/model/tcp_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/server_connection_state.dart'; +import 'package:toolbox/data/model/server/disk_info.dart'; +import 'package:toolbox/data/model/server/server.dart'; +import 'package:toolbox/data/model/server/server_private_info.dart'; +import 'package:toolbox/data/model/server/server_status.dart'; +import 'package:toolbox/data/model/server/tcp_status.dart'; import 'package:toolbox/data/store/server.dart'; import 'package:toolbox/data/store/setting.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); Cpu2Status get emptyCpu2Status => - Cpu2Status([emptyCpuStatus], [emptyCpuStatus]); + Cpu2Status([emptyCpuStatus], [emptyCpuStatus], ''); ServerStatus get emptyStatus => ServerStatus( emptyCpu2Status, @@ -133,16 +133,20 @@ class ServerProvider extends BusyProvider { } try { 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 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 disk = await client.execute('df -h') ?? ''; final tcp = await client.execute('cat /proc/net/snmp') ?? ''; return ServerStatus( - _getCPU(cpu, _servers[idx].status.cpu2Status), + _getCPU(cpu, _servers[idx].status.cpu2Status, cpuTemp), _getMem(mem), - sysVer.trim(), + _getSysVer(sysVer), _getUpTime(upTime), _getDisk(disk), _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 cpus = []; + for (var item in raw.split('\n')) { if (item == '') break; final id = item.split(' ').first; @@ -174,7 +197,7 @@ class ServerProvider extends BusyProvider { return emptyCpu2Status; } - return old.update(cpus); + return old.update(cpus, _getCPUTemp(temp)); } String _getUpTime(String raw) { @@ -190,11 +213,7 @@ class ServerProvider extends BusyProvider { } if (idx == 2) { final vals = item.split(RegExp(r'\s{1,}')); - return TcpStatus( - vals[5].i, - vals[6].i, - vals[7].i, - vals[8].i); + return TcpStatus(vals[5].i, vals[6].i, vals[7].i, vals[8].i); } } return TcpStatus(0, 0, 0, 0); diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index fc514dd5..8d208a9b 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,8 +2,8 @@ class BuildData { 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 buildAt = "2021-10-28 19:02:21.118303"; - static const int modifications = 17; + static const String buildAt = "2021-10-28 19:40:46.947619"; + static const int modifications = 32; } diff --git a/lib/data/res/linux_icons.dart b/lib/data/res/linux_icons.dart index 76b6b99d..ee50149b 100644 --- a/lib/data/res/linux_icons.dart +++ b/lib/data/res/linux_icons.dart @@ -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', 'opensuse', 'kali']); \ No newline at end of file diff --git a/lib/data/service/app.dart b/lib/data/service/app.dart index 4744b9fc..9f240949 100644 --- a/lib/data/service/app.dart +++ b/lib/data/service/app.dart @@ -1,5 +1,5 @@ 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'; class AppService { diff --git a/lib/data/store/private_key.dart b/lib/data/store/private_key.dart index 8fbe882c..2e1d7a1c 100644 --- a/lib/data/store/private_key.dart +++ b/lib/data/store/private_key.dart @@ -1,7 +1,7 @@ import 'dart:convert'; 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 { void put(PrivateKeyInfo info) { diff --git a/lib/data/store/server.dart b/lib/data/store/server.dart index 40b1e6ec..743b1775 100644 --- a/lib/data/store/server.dart +++ b/lib/data/store/server.dart @@ -1,7 +1,7 @@ import 'dart:convert'; 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 { void put(ServerPrivateInfo info) { diff --git a/lib/view/page/private_key/edit.dart b/lib/view/page/private_key/edit.dart index 0ab98ec3..fe6f78ed 100644 --- a/lib/view/page/private_key/edit.dart +++ b/lib/view/page/private_key/edit.dart @@ -1,6 +1,6 @@ import 'package:after_layout/after_layout.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/locator.dart'; import 'package:toolbox/view/widget/input_decoration.dart'; diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 7259e202..42e39524 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/data/model/server.dart'; -import 'package:toolbox/data/model/server_status.dart'; +import 'package:toolbox/data/model/server/server.dart'; +import 'package:toolbox/data/model/server/server_status.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/color.dart'; import 'package:toolbox/data/res/linux_icons.dart'; @@ -54,7 +54,7 @@ class _ServerDetailPageState extends State } Widget _buildLinuxIcon(String sysVer) { - final iconPath = linuxIcons.search(sysVer.toLowerCase()); + final iconPath = linuxIcons.search(sysVer); if (iconPath == null) return const SizedBox(); return SizedBox(height: _media.size.height * 0.15, child: Image.asset(iconPath)); } @@ -260,5 +260,5 @@ class _ServerDetailPageState extends State )); } - static const ignorePath = ['/run', '/sys', '/dev/shm', '/snap']; + static const ignorePath = ['/run', '/sys', '/dev/shm', '/snap', '/var/lib/docker']; } diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index 7c8ba06f..46b27b0c 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/route.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/server.dart'; import 'package:toolbox/data/res/color.dart'; diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 4ceba42c..7a81d524 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -6,9 +6,9 @@ import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:get_it/get_it.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/route.dart'; -import 'package:toolbox/data/model/server.dart'; -import 'package:toolbox/data/model/server_connection_state.dart'; -import 'package:toolbox/data/model/server_status.dart'; +import 'package:toolbox/data/model/server/server.dart'; +import 'package:toolbox/data/model/server/server_connection_state.dart'; +import 'package:toolbox/data/model/server/server_status.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/store/setting.dart'; import 'package:toolbox/locator.dart'; @@ -123,7 +123,7 @@ class _ServerPageState extends State style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 12), textScaleFactor: 1.0, ), - Text(getTopRightStr(cs, ss.uptime), + Text(getTopRightStr(cs, ss.cpu2Status.temp, ss.uptime), textScaleFactor: 1.0, style: TextStyle( color: _theme.textTheme.bodyText1!.color!.withAlpha(100), @@ -148,12 +148,12 @@ class _ServerPageState extends State ); } - String getTopRightStr(ServerConnectionState cs, String upTime) { + String getTopRightStr(ServerConnectionState cs, String temp, String upTime) { switch (cs) { case ServerConnectionState.disconnected: return 'Disconnected'; case ServerConnectionState.connected: - return upTime == '' ? 'Loading...' : upTime; + return temp == '' ? (upTime == '' ? 'Loading...' : upTime) : temp; case ServerConnectionState.connecting: return 'Connecting...'; case ServerConnectionState.failed: