-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
64 lines (42 loc) · 1.35 KB
/
app.js
File metadata and controls
64 lines (42 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const logger = require('./logger')
const {connect, disconnect} = require('./persistence-layer/index')
/**
* @typedef {import('./domain/container')} Container
*/
/**
* @param {Container} container
* @returns {Promise<{shutdown: function}>}
*/
async function init(container) {
await connect(container.appConfig.dbConnectionString)
await container.configManager.init(container.appConfig.defaultNodes)
await container.nodeSettingsManager.init()
container.server.init(container.appConfig.port)
async function shutdown(code = 0) {
logger.info('Received kill signal, code = ' + code)
logger.info('Closing server.')
container.server.close()
logger.info('Server closed.')
logger.info('Disconnecting from database.')
await disconnect()
logger.info('Disconnected from database.')
process.exit(code)
}
container.app = {shutdown}
try {
process.on('unhandledRejection', (reason, p) => {
logger.error({err: reason}, 'Unhandled Rejection at: Promise')
})
process.on('SIGINT', async () => {
await shutdown()
})
process.on('SIGTERM', async () => {
await shutdown()
})
return container.server
} catch (e) {
logger.error(e)
await shutdown(13)
}
}
module.exports = init