-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.js
87 lines (72 loc) · 2.17 KB
/
server.js
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';
require('@everymundo/global-root-dir').setGlobalRootDir(__dirname);
const bodyparser = require('body-parser');
const helmet = require('helmet');
const logr = require('em-logr').create({ name: 'WORKER'});
const { run } = require('@everymundo/runner');
const { setupSwagger } = require('./lib/setup-swagger');
const { loadConfig } = require('./lib/spring');
const { registerRoutes } = require('./routes/index');
const { listen, stopWorker, setProcessEvents } = require('./server-features');
/**
* Loads the middleware except request validator and its associated error handler
* @param {require('express').app} express
* @returns require('express').app
*/
const expressMiddleware = (express) => {
express.use(bodyparser.json({limit: '250mb'}));
express.use(helmet());
return express;
};
const dealWithErrors = (express, error) => {
if (error) {
logr.error(error);
stopWorker();
}
return express;
};
function loadServer() {
return new Promise(async (resolve, reject) => {
try {
const { express } = require('./lib/express-singleton');
await setProcessEvents(express);
await expressMiddleware(express);
const app = await registerRoutes(express);
await setupSwagger(express);
resolve(listen(app));
} catch (error) {
reject(error);
}
});
}
const init = () => {
logr.debug('initializing express');
const { express } = require('./lib/express-singleton');
// const heapdump = require('heapdump');
return loadConfig()
// .then(() => {
// setInterval(() => {heapdump.writeSnapshot('/home/vince/Desktop/heapdumps/heapdump-' + Date.now() + '.heapsnapshot')},
// 150000
// );
// })
.then(loadServer)
.then(enforceGarbageCollection)
.catch(dealWithErrors(express));
};
const enforceGarbageCollection = (express) => {
setInterval(() => {
logr.info('Garbage collecting');
global.gc();
}, 1800000);
return express;
};
module.exports = {
init,
loadServer,
dealWithErrors,
};
loadConfig()
.then(() => {
run(__filename, init);
})
.catch((error) => { throw error; });