opts: new logs page

This commit is contained in:
lollipopkit
2023-01-27 17:05:47 +08:00
parent 877b93ae3a
commit 092c3f522a
6 changed files with 53 additions and 17 deletions

View File

@@ -1,10 +1,38 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/// format: [NAME][LEVEL]: MESSAGE
final _headReg = RegExp(r'(\[[A-Za-z]+\])(\[[A-Z]+\]): (.*)');
const _level2Color = {
'[INFO]': Colors.blue,
'[WARNING]': Colors.yellow,
};
class DebugProvider extends ChangeNotifier { class DebugProvider extends ChangeNotifier {
final widgets = <Widget>[]; final widgets = <Widget>[];
void addText(String text) { void addText(String text) {
final match = _headReg.allMatches(text);
if (match.isNotEmpty) {
addWidget(Text.rich(TextSpan(
children: [
TextSpan(
text: match.first.group(1),
style: const TextStyle(color: Colors.cyan),
),
TextSpan(
text: match.first.group(2),
style: TextStyle(color: _level2Color[match.first.group(2)]),
),
TextSpan(
text: '\n${match.first.group(3)}',
)
],
)));
} else {
_addText(text); _addText(text);
}
notifyListeners(); notifyListeners();
} }
@@ -45,17 +73,8 @@ class DebugProvider extends ChangeNotifier {
} }
void _addWidget(Widget widget) { void _addWidget(Widget widget) {
final outlined = Container( widgets.add(widget);
margin: const EdgeInsets.symmetric(vertical: 2), widgets.add(const SizedBox(height: 13));
decoration: BoxDecoration(
border: Border.all(
color: Colors.green,
),
),
child: widget,
);
widgets.add(outlined);
} }
void clear() { void clear() {

View File

@@ -19,8 +19,9 @@ final _editionReg = RegExp(r'(Client:)\s+(.+-.+)');
final _dockerPrefixReg = RegExp(r'(sudo )?docker '); final _dockerPrefixReg = RegExp(r'(sudo )?docker ');
const _dockerPS = 'docker ps -a'; const _dockerPS = 'docker ps -a';
const _dockerImgs = 'docker images';
final _logger = Logger('DockerProvider'); final _logger = Logger('DOCKER');
class DockerProvider extends BusyProvider { class DockerProvider extends BusyProvider {
final dockerStore = locator<DockerStore>(); final dockerStore = locator<DockerStore>();
@@ -84,7 +85,7 @@ class DockerProvider extends BusyProvider {
lines.removeWhere((element) => element.isEmpty); lines.removeWhere((element) => element.isEmpty);
items = lines.map((e) => DockerPsItem.fromRawString(e)).toList(); items = lines.map((e) => DockerPsItem.fromRawString(e)).toList();
final imageCmd = _wrap('docker image ls'); final imageCmd = _wrap(_dockerImgs);
raw = ''; raw = '';
await client!.exec( await client!.exec(
imageCmd, imageCmd,

View File

@@ -13,7 +13,7 @@ import 'package:toolbox/data/model/server/dist.dart';
enum _Type { apt, yum, dnf, zypper, pkg, pacman, opkg } enum _Type { apt, yum, dnf, zypper, pkg, pacman, opkg }
class PkgProvider extends BusyProvider { class PkgProvider extends BusyProvider {
final logger = Logger('PkgProvider'); final logger = Logger('PKG');
SSHClient? client; SSHClient? client;
Dist? dist; Dist? dist;

View File

@@ -50,7 +50,7 @@ class ServerProvider extends BusyProvider {
Timer? _timer; Timer? _timer;
final logger = Logger('ServerProvider'); final logger = Logger('SERVER');
Memory get emptyMemory => Memory get emptyMemory =>
Memory(total: 1, used: 0, free: 1, cache: 0, avail: 1); Memory(total: 1, used: 0, free: 1, cache: 0, avail: 1);
@@ -132,6 +132,21 @@ class ServerProvider extends BusyProvider {
} }
} }
void closeServer({ServerPrivateInfo? spi}) {
if (spi == null) {
for (var i = 0; i < _servers.length; i++) {
_servers[i].client?.close();
_servers[i].client = null;
}
return;
}
final idx = _servers.indexWhere((e) => e.info == spi);
if (idx < 0) {
throw RangeError.index(idx, _servers);
}
_servers[idx].client?.close();
}
void addServer(ServerPrivateInfo spi) { void addServer(ServerPrivateInfo spi) {
_servers.add(genInfo(spi)); _servers.add(genInfo(spi));
locator<ServerStore>().put(spi); locator<ServerStore>().put(spi);

View File

@@ -14,7 +14,7 @@ class _DebugPageState extends State<DebugPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('App log'), title: const Text('Logs'),
backgroundColor: Colors.black, backgroundColor: Colors.black,
), ),
body: _buildTerminal(context), body: _buildTerminal(context),

View File

@@ -67,6 +67,7 @@ class _MyHomePageState extends State<MyHomePage>
void dispose() { void dispose() {
super.dispose(); super.dispose();
WidgetsBinding.instance.removeObserver(this); WidgetsBinding.instance.removeObserver(this);
_serverProvider.closeServer();
} }
@override @override