feat: add retry to db connection when startup.

dev
DebuggerX 3 years ago
parent c567122d84
commit 44b5df3d24

@ -8,12 +8,11 @@ import 'package:logging/logging.dart';
void main() async { void main() async {
// Watch the config/ and web/ directories for changes, and hot-reload the server. // Watch the config/ and web/ directories for changes, and hot-reload the server.
hierarchicalLoggingEnabled = true;
var hot = HotReloader(() async { var hot = HotReloader(() async {
var logger = Logger.detached('dde_gesture_manager_api') Logger.root
..level = Level.ALL ..level = Level.ALL
..onRecord.listen(prettyLog); ..onRecord.listen(prettyLog);
var logger = Logger.detached('dde_gesture_manager_api');
var app = Angel(logger: logger, reflector: MirrorsReflector()); var app = Angel(logger: logger, reflector: MirrorsReflector());
await app.configure(configureServer); await app.configure(configureServer);
return app; return app;
@ -23,6 +22,5 @@ void main() async {
]); ]);
var server = await hot.startServer('127.0.0.1', 3000); var server = await hot.startServer('127.0.0.1', 3000);
print( print('dde_gesture_manager_api server listening at http://${server.address.address}:${server.port}');
'dde_gesture_manager_api server listening at http://${server.address.address}:${server.port}');
} }

@ -3,11 +3,32 @@ import 'dart:io';
import 'package:angel3_framework/angel3_framework.dart'; import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_orm/angel3_orm.dart'; import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_orm_postgres/angel3_orm_postgres.dart'; import 'package:angel3_orm_postgres/angel3_orm_postgres.dart';
import 'package:logging/logging.dart';
import 'package:postgres/postgres.dart'; import 'package:postgres/postgres.dart';
const times = ['', 'st', 'nd', 'rd'];
const retryTimeOut = Duration(seconds: 30);
Future<void> configureServer(Angel app) async { Future<void> configureServer(Angel app) async {
var connection = await connectToPostgres(app.configuration); final _log = Logger('OrmPlugin');
await connection.open(); late PostgreSQLConnection connection;
var _startTime = DateTime.now();
var _retry = 1;
while (_startTime.difference(DateTime.now()).abs() <= retryTimeOut) {
try {
connection = await connectToPostgres(app.configuration);
await connection.open();
break;
} catch (e, st) {
await connection.close();
_log.severe(
'Failed to connect, the $_retry${_retry <= 3 ? times[_retry] : 'th'} retry will do in a second.', e, st);
sleep(Duration(seconds: 1));
_retry++;
if (_startTime.difference(DateTime.now()).abs() > retryTimeOut) rethrow;
}
}
var logger = app.environment.isProduction ? null : app.logger; var logger = app.environment.isProduction ? null : app.logger;
var executor = PostgreSqlExecutor(connection, logger: logger); var executor = PostgreSqlExecutor(connection, logger: logger);

@ -1,5 +1,6 @@
import 'package:angel3_framework/angel3_framework.dart'; import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_cors/angel3_cors.dart'; import 'package:angel3_cors/angel3_cors.dart';
import 'package:angel3_static/angel3_static.dart';
import 'package:file/file.dart'; import 'package:file/file.dart';
import 'controllers/auth_controllers.dart' as auth_controllers; import 'controllers/auth_controllers.dart' as auth_controllers;
import 'controllers/system_controllers.dart' as system_controllers; import 'controllers/system_controllers.dart' as system_controllers;
@ -28,6 +29,9 @@ AngelConfigurer configureServer(FileSystem fileSystem) {
await app.configure(auth_controllers.configureServer); await app.configure(auth_controllers.configureServer);
await app.configure(scheme_controllers.configureServer); await app.configure(scheme_controllers.configureServer);
var vDir = VirtualDirectory(app, fileSystem, source: fileSystem.directory('web'));
app.fallback(vDir.handleRequest);
// Throw a 404 if no route matched the request. // Throw a 404 if no route matched the request.
app.fallback((req, res) => throw AngelHttpException.notFound()); app.fallback((req, res) => throw AngelHttpException.notFound());

@ -12,6 +12,7 @@ dependencies:
angel3_orm: ^4.0.6 angel3_orm: ^4.0.6
angel3_orm_postgres: ^3.3.0 angel3_orm_postgres: ^3.3.0
angel3_serialize: ^4.1.0 angel3_serialize: ^4.1.0
angel3_static: ^4.1.0
angel3_production: ^3.1.2 angel3_production: ^3.1.2
belatuk_pretty_logging: ^4.0.0 belatuk_pretty_logging: ^4.0.0
optional: ^6.0.0 optional: ^6.0.0

@ -1,10 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8"/>
<title>{% block title %}{% endblock %}</title> <title>{% block title %}{% endblock %}</title>
</head> <link rel="shortcut icon" href="/images/favicon.png"/>
<body> <link rel="bookmark" href="/images/favicon.png"/>
{% block body %}{% endblock %} <link rel="stylesheet" type="text/css" href="/css/site.css"/>
</body> </head>
<body>
{% block body %}{% endblock %}
</body>
</html> </html>

@ -1,27 +1,9 @@
html, body { html, body {
height: 100%; height: 100%;
}
body {
margin: 0;
padding: 0; padding: 0;
width: 100%; margin: 0;
display: table;
font-weight: 100;
font-family: 'Lato', sans-serif;
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
} }
.title { body {
font-size: 96px; margin: .5em;
} }
Loading…
Cancel
Save