-
David Sehnal authoredDavid Sehnal authored
server.ts 2.67 KiB
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import * as express from 'express'
import * as compression from 'compression'
import ServerConfig from './config'
import { ConsoleLogger } from 'mol-util/console-logger';
import { PerformanceMonitor } from 'mol-util/performance-monitor';
import { initWebApi } from './server/api-web';
import Version from './version'
function setupShutdown() {
if (ServerConfig.shutdownParams.timeoutVarianceMinutes > ServerConfig.shutdownParams.timeoutMinutes) {
ConsoleLogger.log('Server', 'Shutdown timeout variance is greater than the timer itself, ignoring.');
} else {
let tVar = 0;
if (ServerConfig.shutdownParams.timeoutVarianceMinutes > 0) {
tVar = 2 * (Math.random() - 0.5) * ServerConfig.shutdownParams.timeoutVarianceMinutes;
}
let tMs = (ServerConfig.shutdownParams.timeoutMinutes + tVar) * 60 * 1000;
console.log(`----------------------------------------------------------------------------`);
console.log(` The server will shut down in ${PerformanceMonitor.format(tMs)} to prevent slow performance.`);
console.log(` Please make sure a daemon is running that will automatically restart it.`);
console.log(`----------------------------------------------------------------------------`);
console.log();
setTimeout(() => {
/*if (WebApi.ApiState.pendingQueries > 0) {
WebApi.ApiState.shutdownOnZeroPending = true;
} else*/ {
ConsoleLogger.log('Server', `Shut down due to timeout.`);
process.exit(0);
}
}, tMs);
}
}
const port = process.env.port || ServerConfig.defaultPort;
function startServer() {
let app = express();
app.use(compression(<any>{ level: 6, memLevel: 9, chunkSize: 16 * 16384, filter: () => true }));
// app.get(ServerConfig.appPrefix + '/documentation', (req, res) => {
// res.writeHead(200, { 'Content-Type': 'text/html' });
// res.write(Documentation.getHTMLDocs(ServerConfig.appPrefix));
// res.end();
// });
initWebApi(app);
// app.get('*', (req, res) => {
// res.writeHead(200, { 'Content-Type': 'text/html' });
// res.write(Documentation.getHTMLDocs(ServerConfig.appPrefix));
// res.end();
// });
app.listen(port);
}
startServer();
console.log(`Mol* ModelServer ${Version}`);
console.log(``);
console.log(`The server is running on port ${port}.`);
console.log(``);
if (ServerConfig.shutdownParams && ServerConfig.shutdownParams.timeoutMinutes > 0) {
setupShutdown();
}