Frontend WIP - just websocket support left

This commit is contained in:
2025-02-09 21:23:27 -07:00
parent f73bd53214
commit e7641f6aec
19 changed files with 484 additions and 132 deletions
+3 -46
View File
@@ -3,7 +3,7 @@ import 'dart:io';
import 'package:backend/utils/environment.dart';
import 'package:dart_frog/dart_frog.dart';
import 'package:logging/logging.dart';
import 'package:shared_models/fart_logger.dart';
bool _listening = false;
@@ -12,54 +12,11 @@ Future<HttpServer> run(Handler handler, InternetAddress ip, int port) async {
// Logic to prevent multiple listeners with hot-reload
// Changes to this are not hot-reloaded, you must restart the server
if (!_listening) {
final logLevel = Platform.environment['LOG_LEVEL'] ?? (isDevelopment ? 'FINEST' : 'INFO');
Logger.root.level =
Level.LEVELS.firstWhere((l) => l.name == logLevel, orElse: () => Level.INFO); // defaults to Level.INFO
Logger.root.onRecord.listen((record) {
writeLogRecord(record, record.level.value >= Level.SEVERE.value ? stderr : stdout);
});
FartLogger.listen(isDevelopment: isDevelopment);
_listening = true;
}
checkEnvironment(isDevelopment);
for (final lvl in Level.LEVELS) {
writeLogRecord(LogRecord(lvl, 'Test message', 'main'), stdout);
}
checkEnvironment(isDevEnv: isDevelopment);
return serve(handler, ip, port);
}
const Map<String, String> _levelColors = {
'FINEST': '\x1B[1;37m', // White
'FINER': '\x1B[1;38m', // Gray
'FINE': '\x1B[1;35m', // Purple
'CONFIG': '\x1B[1;36m', // Cyan
'INFO': '\x1B[1;32m', // Green
'WARNING': '\x1B[1;33m', // Yellow
'SEVERE': '\x1B[1;31m', // Red
'SHOUT': '\x1B[1;38;5;52m\x1B[1;48;5;213m', // Red on pink
};
const String _resetColor = '\x1B[0m';
String _getColoredLevel(String levelName) {
return '${_levelColors[levelName] ?? ''}$levelName$_resetColor';
}
void writeLogRecord(LogRecord record, IOSink iosink) {
// Write the basic log message with colored level
iosink.writeln(
'[${_getColoredLevel(record.level.name)}]:[${record.loggerName}] '
'${record.time}: ${record.message}',
);
// Additional details for severe logs
if (record.level.value >= Level.SEVERE.value) {
iosink.writeln(
'[${_getColoredLevel(record.level.name)}]:[${record.loggerName}] '
'${record.error?.toString() ?? "No error provided"}\n'
'${record.stackTrace?.toString() ?? "No trace provided"}',
);
}
}