omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
129 lines • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MasterServer = void 0;
const starter = require("./starter");
const omelop_logger_1 = require("omelop-logger");
const path = require("path");
let logger = (0, omelop_logger_1.getLogger)('omelop', path.basename(__filename));
let crashLogger = (0, omelop_logger_1.getLogger)('crash-log', path.basename(__filename));
let adminLogger = (0, omelop_logger_1.getLogger)('admin-log', path.basename(__filename));
const admin = require("omelop-admin");
const util = require("util");
const utils = require("../util/utils");
const moduleUtil = require("../util/moduleUtil");
const Constants = require("../util/constants");
class MasterServer {
constructor(app, opts) {
this.registered = {};
this.modules = [];
this.app = app;
this.masterInfo = app.getMaster();
opts = opts || {};
opts.port = this.masterInfo.port;
opts.env = this.app.get(Constants.RESERVED.ENV);
this.closeWatcher = opts.closeWatcher || false;
this.masterConsole = admin.createMasterConsole(opts);
}
start(cb) {
moduleUtil.registerDefaultModules(true, this.app, this.closeWatcher);
moduleUtil.loadModules(this, this.masterConsole);
let self = this;
// start master console
this.masterConsole.start(function (err) {
if (err) {
process.exit(0);
}
moduleUtil.startModules(self.modules, function (err) {
if (err) {
utils.invokeCallback(cb, err);
return;
}
if (self.app.get(Constants.RESERVED.MODE) !== Constants.RESERVED.STAND_ALONE) {
starter.runServers(self.app);
}
utils.invokeCallback(cb);
});
});
this.masterConsole.on('error', function (err) {
if (!!err) {
logger.error('masterConsole encounters with error: ' + err.stack);
return;
}
});
this.masterConsole.on('reconnect', function (info) {
self.app.addServers([info]);
});
// monitor servers disconnect event
this.masterConsole.on('disconnect', function (id, type, info, reason) {
crashLogger.info(util.format('[%s],[%s],[%s],[%s]', type, id, Date.now(), reason || 'disconnect'));
let count = 0;
let time = 0;
let pingTimer = null;
let server = self.app.getServerById(id);
let stopFlags = self.app.get(Constants.RESERVED.STOP_SERVERS) || [];
let autoRestart = server && server[Constants.RESERVED.AUTO_RESTART] || '';
let restartForce = server && server[Constants.RESERVED.RESTART_FORCE] || '';
if ((autoRestart.toString() === 'true' || restartForce.toString() === 'true') && stopFlags.indexOf(id) < 0) {
let handle = function () {
clearTimeout(pingTimer);
utils.checkPort(server, function (status) {
if (status === 'error') {
utils.invokeCallback(cb, new Error('Check port command executed with error.'));
return;
}
else if (status === 'busy') {
if (!!server[Constants.RESERVED.RESTART_FORCE]) {
starter.kill([info.pid], [server]);
}
else {
utils.invokeCallback(cb, new Error('Port occupied already, check your server to add.'));
return;
}
}
setTimeout(function () {
starter.run(self.app, server, null);
}, Constants.TIME.TIME_WAIT_STOP);
});
};
let setTimer = function (time) {
pingTimer = setTimeout(function () {
utils.ping(server.host, function (flag) {
if (flag) {
handle();
}
else {
count++;
if (count > 3) {
time = Constants.TIME.TIME_WAIT_MAX_PING;
}
else {
time = Constants.TIME.TIME_WAIT_PING * count;
}
setTimer(time);
}
});
}, time);
};
setTimer(time);
}
});
// monitor servers register event
this.masterConsole.on('register', function (record) {
starter.bindCpu(record.id, record.pid, record.host);
});
this.masterConsole.on('admin-log', function (log, error) {
if (error) {
adminLogger.error(JSON.stringify(log));
}
else {
adminLogger.info(JSON.stringify(log));
}
});
}
stop(cb) {
this.masterConsole.stop();
process.nextTick(cb);
}
}
exports.MasterServer = MasterServer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21hc3Rlci9tYXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXFDO0FBQ3JDLGlEQUEwQztBQUMxQyw2QkFBNkI7QUFFN0IsSUFBSSxNQUFNLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsSUFBSSxXQUFXLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsSUFBSSxXQUFXLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsc0NBQXNDO0FBQ3RDLDZCQUE2QjtBQUM3Qix1Q0FBdUM7QUFDdkMsaURBQWlEO0FBQ2pELCtDQUErQztBQWEvQyxNQUFhLFlBQVk7SUFRckIsWUFBWSxHQUFnQixFQUFFLElBQTBCO1FBTHhELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQUtwQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENB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