Skip to content

Commit

Permalink
🔊 Introduce new Logging framework.
Browse files Browse the repository at this point in the history
  • Loading branch information
Chralu committed Jun 4, 2024
1 parent 8f82824 commit 1e51baf
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 31 deletions.
4 changes: 3 additions & 1 deletion lib/infrastructure/rpc/awc_webview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:aewallet/util/universal_platform.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:logging/logging.dart';
import 'package:stream_channel/stream_channel.dart';

class AWCWebview extends StatefulWidget {
Expand Down Expand Up @@ -130,7 +131,7 @@ class WebviewMessagePortStreamChannel
with StreamChannelMixin<String>
implements StreamChannel<String> {
WebviewMessagePortStreamChannel({required this.port}) {
print('Wallet Init WebMessage PortStreamchannel');
logger.info('Wallet Init WebMessage PortStreamchannel');

port.setWebMessageCallback((message) {
if (message == null) return;
Expand All @@ -141,6 +142,7 @@ class WebviewMessagePortStreamChannel
port.postMessage(WebMessage(data: event));
});
}
static final logger = Logger('AWCBrowserExtension');

final IWebMessagePort port;
final _in = StreamController<String>(sync: true);
Expand Down
52 changes: 31 additions & 21 deletions lib/infrastructure/rpc/browser_extension_aws.web.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
// ignore_for_file: avoid_web_libraries_in_flutter, avoid_print
// ignore_for_file: avoid_web_libraries_in_flutter

import 'dart:async';
import 'dart:js';

import 'package:aewallet/infrastructure/rpc/awc_json_rpc_server.dart';
import 'package:aewallet/infrastructure/rpc/browser_extension_aws.js.dart';
import 'package:logging/logging.dart';
import 'package:stream_channel/stream_channel.dart';

class BrowserExtensionAWS {
BrowserExtensionAWS() {
print('[AWCBrowserExtension] Init');
logger.info('Init');
_interopConnectionReceived = allowInterop(_connectionReceived);
}
static const logName = 'Browser RPC Server';
static final logger = Logger('Browser RPC Server');

static bool get isPlatformCompatible => isWebBrowserExtension;

Expand All @@ -22,42 +23,46 @@ class BrowserExtensionAWS {

late Function(BrowserExtensionPort port) _interopConnectionReceived;
void _connectionReceived(BrowserExtensionPort port) {
print('[AWCBrowserExtension] external connection received ');
logger.info('external connection received');
port.postMessage('connected');
final channel = BrowserExtensionMessagePortStreamChannel(port: port);
final peerServer = AWCJsonRPCServer(channel.cast<String>());
_peerServers.add(peerServer);

port.onDisconnect.addListener(allowInterop((_) async {
print('[AWCBrowserExtension] external connection closed ');
await peerServer.close();
_peerServers.remove(peerServer);
}));
port.onDisconnect.addListener(
allowInterop((_) async {
logger.info('external connection closed');
await peerServer.close();
_peerServers.remove(peerServer);
}),
);

unawaited(peerServer.listen());
}

Future<void> run() async => runZonedGuarded(
() async {
if (_isRunning) {
print('[AWCBrowserExtension] Already running. Cancel `start`');
logger.info('Already running. Cancel `start`');

return;
}

print('[AWCBrowserExtension] Starting');
logger.info('Starting');

onConnectExternal.addListener(_interopConnectionReceived);
_isRunning = true;
},
(error, stack) {
print(
'[AWCBrowserExtension] failed : $error',
logger.severe(
'failed',
error,
stack,
);
},
);

Future<void> stop() async {
print('[AWCBrowserExtension] Stopping');
logger.info('Stopping');
_isRunning = false;
onConnectExternal.removeListener(_interopConnectionReceived);
for (final peerServer in _peerServers) {
Expand All @@ -71,34 +76,39 @@ class BrowserExtensionMessagePortStreamChannel
with StreamChannelMixin<String>
implements StreamChannel<String> {
BrowserExtensionMessagePortStreamChannel({required this.port}) {
print('Wallet Init WebMessage PortStreamchannel');
logger.info('Wallet Init WebMessage PortStreamchannel');

port.onMessage.addListener(
allowInterop((message, _) {
if (message == null) return;
print('Wallet message received $message');
logger.info('Wallet message received $message');

_in.add(message);
print('Wallet message received done $message');
logger.info('Wallet message received done $message');
}),
);

_out.onCancel = close;

_outSubscription = _out.stream.listen((event) {
print('Wallet response sent $event');
logger.info('Wallet response sent $event');

port.postMessage(event);
});
}

static final logger = Logger('Browser RPC Server - StreamChannel');

Future<void> close() async {
print('Wallet releases port');
logger.info('Wallet releases port');

_out.onCancel = null;
await _outSubscription.cancel();
await _out.close();
port.disconnect();

await _in.close();
print('Wallet port release done');
logger.info('Wallet releases done');
}

final BrowserExtensionPort port;
Expand Down
15 changes: 8 additions & 7 deletions lib/ui/views/rpc_command_receiver/rpc_command_receiver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:aewallet/ui/views/rpc_command_receiver/sub_current_account/comma
import 'package:aewallet/util/get_it_instance.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:logging/logging.dart';

class RPCCommandReceiver extends ConsumerStatefulWidget {
const RPCCommandReceiver({
Expand All @@ -38,7 +39,7 @@ class RPCCommandReceiver extends ConsumerStatefulWidget {
class _RPCCommandReceiverState extends ConsumerState<RPCCommandReceiver> {
final _browserExtensionAWS =
BrowserExtensionAWS.isPlatformCompatible ? BrowserExtensionAWS() : null;

static final logger = Logger('RPCCommandReceiver');
@override
void initState() {
_initCommandDispatcher();
Expand All @@ -48,7 +49,7 @@ class _RPCCommandReceiverState extends ConsumerState<RPCCommandReceiver> {
}

void _initCommandDispatcher() {
print('Init RPC Command dispatcher');
logger.info('Init RPC Command dispatcher');
sl.get<CommandDispatcher>()
..clear()
..addGuard((command) async {
Expand Down Expand Up @@ -98,7 +99,7 @@ class _RPCCommandReceiverState extends ConsumerState<RPCCommandReceiver> {
}

Future<void> _initWebsocketRPC() async {
print('Init websocket RPC');
logger.info('Init websocket RPC');
final isRpcEnabled = (await sl
.get<SettingsRepositoryInterface>()
.getSettings(const Locale('fr')))
Expand All @@ -110,7 +111,7 @@ class _RPCCommandReceiverState extends ConsumerState<RPCCommandReceiver> {
}

void _initBrowserExtensionRPC() {
print('Init Browser extension RPC');
logger.info('Init Browser extension RPC');
unawaited(_browserExtensionAWS?.run());
}

Expand All @@ -123,17 +124,17 @@ class _RPCCommandReceiverState extends ConsumerState<RPCCommandReceiver> {
}

Future<void> _disposeWebsocketRPC() async {
print('Dispose websocket RPC');
logger.info('Dispose websocket RPC');
await sl.get<ArchethicWebsocketRPCServer>().stop();
}

Future<void> _disposeBrowserExtensionRPC() async {
print('Dispose Browser extension RPC');
logger.info('Dispose Browser extension RPC');
await _browserExtensionAWS?.stop();
}

void _disposeCommandDispatcher() {
print('Dispose RPC command dispatcher');
logger.info('Dispose RPC command dispatcher');
sl.get<CommandDispatcher>().clear();
}

Expand Down
36 changes: 36 additions & 0 deletions lib/util/logger.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import 'dart:developer' as dev;

import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';

extension LoggerSetup on Logger {
static Future<void> setup() async {
Logger.root.level = kDebugMode ? Level.ALL : Level.INFO;
if (kIsWeb) {
Logger.root.onRecord.listen((event) {
debugPrint('[${event.loggerName}] ${event.message}');
if (event.error != null) {
debugPrint('\t${event.error}');
}
if (event.stackTrace != null) {
debugPrint('\t${event.stackTrace}');
}
});
}

if (!kIsWeb) {
Logger.root.onRecord.listen((event) {
dev.log(
event.message,
name: event.loggerName,
error: event.error,
stackTrace: event.stackTrace,
level: event.level.value,
time: event.time,
sequenceNumber: event.sequenceNumber,
zone: event.zone,
);
});
}
}
}
3 changes: 2 additions & 1 deletion lib/util/service_locator.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:aewallet/domain/repositories/settings.dart';
import 'package:aewallet/domain/rpc/command_dispatcher.dart';
import 'package:aewallet/infrastructure/datasources/appdb.hive.dart';
Expand All @@ -11,6 +10,7 @@ import 'package:aewallet/service/app_service.dart';
import 'package:aewallet/util/biometrics_util.dart';
import 'package:aewallet/util/get_it_instance.dart';
import 'package:aewallet/util/haptic_util.dart';
import 'package:aewallet/util/logger.dart';
import 'package:aewallet/util/nfc.dart';
import 'package:archethic_lib_dart/archethic_lib_dart.dart'
show AddressService, ApiService, OracleService;
Expand Down Expand Up @@ -70,6 +70,7 @@ Future<void> _setupServiceLocatorNetworkDependencies() async {
logsActivation: false,
),
);
await LoggerSetup.setup();
}

Future<void> updateServiceLocatorNetworkDependencies() async {
Expand Down
2 changes: 1 addition & 1 deletion pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1319,7 +1319,7 @@ packages:
source: hosted
version: "1.0.10"
logging:
dependency: transitive
dependency: "direct main"
description:
name: logging
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
Expand Down
3 changes: 3 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ dependencies:
# Flutter plugin for Android and iOS devices to allow local authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern
local_auth: ^2.2.0

# Logging lib
logging: ^1.2.0

# Using Official Material Symbols Icons variable fonts
material_symbols_icons: ^4.2719.1

Expand Down

0 comments on commit 1e51baf

Please sign in to comment.