Skip to content
Snippets Groups Projects
server.js 1.51 KiB
Newer Older
Vytor Calixto's avatar
Vytor Calixto committed
const debug = require('debug')('simcaq-api');
const libs = `${process.cwd()}/libs`;
const config = require(`${libs}/config`);
const log = require(`${libs}/log`)(module);
const app = require(`${libs}/app`);
const compatVersion = require(`${libs}/middlewares/checkVersion`);
Vytor Calixto's avatar
Vytor Calixto committed
const cluster = require('cluster');

// Check if Node version is compatible
if (!compatVersion()) {
    process.exit(1);
}

Vytor Calixto's avatar
Vytor Calixto committed
if(cluster.isMaster) {
    log.info(`Master ${process.pid} is running`);

    const numCPUs = (process.env.NODE_ENV != 'development') ? require('os').cpus().length : 1;
Vytor Calixto's avatar
Vytor Calixto committed
    log.info(`Master will create ${numCPUs} workers`);
Vytor Calixto's avatar
Vytor Calixto committed
    for(let i=0; i < numCPUs; ++i) {
        cluster.fork();
    }

    // Caso uma instâcia morra
    cluster.on('exit',  (worker, code, signal) => {
        log.info(`Worker ${worker.process.pid} died`);
        // Revive a instância
        cluster.fork();
    });
} else {
    // Set default port: first environment variable PORT, then configuration and last 3000
    app.set('port', process.env.PORT || config.port || 3000);
    process.env.NODE_ENV = process.env.NODE_ENV || 'development';
    // Set default ip: first environment variable IOP, then configuration and last '127.0.0.1'
    app.set('ip', process.env.IP || config.ip || '127.0.0.1');

    const server = app.listen(app.get('port'), () => {
        log.info(`Express server listening on port ${server.address().port}`);
    });
Vytor Calixto's avatar
Vytor Calixto committed

    log.info(`Worker ${cluster.worker.id} is running (${process.pid})`);
Vytor Calixto's avatar
Vytor Calixto committed

    // For testing
    module.exports = server;
}