From 092c3f522a5edcf5cc71469e2dbd962ba0efba02 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Fri, 27 Jan 2023 17:05:47 +0800 Subject: [PATCH] opts: new logs page --- lib/data/provider/debug.dart | 43 +++++++++++++++++++++++++---------- lib/data/provider/docker.dart | 5 ++-- lib/data/provider/pkg.dart | 2 +- lib/data/provider/server.dart | 17 +++++++++++++- lib/view/page/debug.dart | 2 +- lib/view/page/home.dart | 1 + 6 files changed, 53 insertions(+), 17 deletions(-) diff --git a/lib/data/provider/debug.dart b/lib/data/provider/debug.dart index 268fc0c4..dd34e017 100644 --- a/lib/data/provider/debug.dart +++ b/lib/data/provider/debug.dart @@ -1,10 +1,38 @@ 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 { final widgets = []; void addText(String text) { - _addText(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); + } + notifyListeners(); } @@ -45,17 +73,8 @@ class DebugProvider extends ChangeNotifier { } void _addWidget(Widget widget) { - final outlined = Container( - margin: const EdgeInsets.symmetric(vertical: 2), - decoration: BoxDecoration( - border: Border.all( - color: Colors.green, - ), - ), - child: widget, - ); - - widgets.add(outlined); + widgets.add(widget); + widgets.add(const SizedBox(height: 13)); } void clear() { diff --git a/lib/data/provider/docker.dart b/lib/data/provider/docker.dart index 753515fb..11ee2c31 100644 --- a/lib/data/provider/docker.dart +++ b/lib/data/provider/docker.dart @@ -19,8 +19,9 @@ final _editionReg = RegExp(r'(Client:)\s+(.+-.+)'); final _dockerPrefixReg = RegExp(r'(sudo )?docker '); const _dockerPS = 'docker ps -a'; +const _dockerImgs = 'docker images'; -final _logger = Logger('DockerProvider'); +final _logger = Logger('DOCKER'); class DockerProvider extends BusyProvider { final dockerStore = locator(); @@ -84,7 +85,7 @@ class DockerProvider extends BusyProvider { lines.removeWhere((element) => element.isEmpty); items = lines.map((e) => DockerPsItem.fromRawString(e)).toList(); - final imageCmd = _wrap('docker image ls'); + final imageCmd = _wrap(_dockerImgs); raw = ''; await client!.exec( imageCmd, diff --git a/lib/data/provider/pkg.dart b/lib/data/provider/pkg.dart index 005abcf0..4191bf06 100644 --- a/lib/data/provider/pkg.dart +++ b/lib/data/provider/pkg.dart @@ -13,7 +13,7 @@ import 'package:toolbox/data/model/server/dist.dart'; enum _Type { apt, yum, dnf, zypper, pkg, pacman, opkg } class PkgProvider extends BusyProvider { - final logger = Logger('PkgProvider'); + final logger = Logger('PKG'); SSHClient? client; Dist? dist; diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index 4b38fff1..ce703461 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -50,7 +50,7 @@ class ServerProvider extends BusyProvider { Timer? _timer; - final logger = Logger('ServerProvider'); + final logger = Logger('SERVER'); Memory get emptyMemory => 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) { _servers.add(genInfo(spi)); locator().put(spi); diff --git a/lib/view/page/debug.dart b/lib/view/page/debug.dart index 1f2d03de..203289e0 100644 --- a/lib/view/page/debug.dart +++ b/lib/view/page/debug.dart @@ -14,7 +14,7 @@ class _DebugPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: const Text('App log'), + title: const Text('Logs'), backgroundColor: Colors.black, ), body: _buildTerminal(context), diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index 22906591..c856823c 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -67,6 +67,7 @@ class _MyHomePageState extends State void dispose() { super.dispose(); WidgetsBinding.instance.removeObserver(this); + _serverProvider.closeServer(); } @override