dev
dart 88 lines 2.3 KB
Raw
1 import 'package:cw_core/utils/print_verbose.dart';
2 import 'package:cw_core/wallet_type.dart';
3
4 class SocketHealthLogEntry {
5 final DateTime timestamp;
6 final WalletType? walletType;
7 final String? walletName;
8 final bool? isHealthy;
9 final String? error;
10 final String? syncStatus;
11 final bool wasReconnected;
12 final String trigger;
13
14 SocketHealthLogEntry({
15 required this.timestamp,
16 required this.walletType,
17 required this.walletName,
18 required this.isHealthy,
19 this.error,
20 this.syncStatus,
21 required this.wasReconnected,
22 required this.trigger,
23 });
24
25 String toLogString() {
26 final dateStr = timestamp.toIso8601String();
27 final status = isHealthy != null ? (isHealthy! ? 'HEALTHY' : 'UNHEALTHY') : 'UNKNOWN';
28 final reconnect = wasReconnected ? 'RECONNECTED' : 'NO_RECONNECT';
29 final errorStr = error != null ? ' | Error: $error' : '';
30 final syncStr = syncStatus != null ? ' | Sync: $syncStatus' : '';
31
32 return '[$dateStr] $trigger | ${walletType?.name ?? 'UNKNOWN'} | $walletName | $status | $reconnect$errorStr$syncStr';
33 }
34 }
35
36 class SocketHealthLogger {
37 static final SocketHealthLogger _instance = SocketHealthLogger._internal();
38 factory SocketHealthLogger() => _instance;
39 SocketHealthLogger._internal();
40
41 static const int _maxLogs = 100;
42
43 static final List<SocketHealthLogEntry> logs = [];
44
45 void addLog(SocketHealthLogEntry entry) {
46 try {
47 printV('Adding log entry: ${entry.toLogString()}');
48
49 logs.add(entry);
50
51 if (logs.length > _maxLogs * 2) {
52 final excessCount = logs.length - _maxLogs;
53 logs.removeRange(0, excessCount);
54 }
55 } catch (e) {
56 printV('Failed to add log: $e');
57 }
58 }
59
60 void clearLogs() {
61 logs.clear();
62 printV('Cleared all logs');
63 }
64
65 /// Log a health check with the given parameters
66 void logHealthCheck({
67 WalletType? walletType,
68 String? walletName,
69 bool? isHealthy,
70 String? error,
71 String? syncStatus,
72 required bool wasReconnected,
73 required String trigger,
74 }) {
75 addLog(
76 SocketHealthLogEntry(
77 timestamp: DateTime.now(),
78 walletType: walletType,
79 walletName: walletName,
80 isHealthy: isHealthy,
81 error: error,
82 syncStatus: syncStatus,
83 wasReconnected: wasReconnected,
84 trigger: trigger,
85 ),
86 );
87 }
88 }