Updated application.

This commit is contained in:
agolybev
2015-08-17 17:19:04 +03:00
parent cd34405d7e
commit a7b9b3a979
330 changed files with 81139 additions and 172701 deletions

View File

@@ -29,32 +29,102 @@
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
var config = require("./config.json");
var cluster = require("cluster");
var config = require("./config.json");
process.env.NODE_ENV = config["server"]["mode"];
var logger = require("./../../Common/sources/logger");
var express = require("express");
var http = require("http");
var https = require("https");
var fs = require("fs");
var app = express();
var server = {};
if (config["ssl"]) {
var privateKey = fs.readFileSync(config["ssl"]["key"]).toString();
var certificate = fs.readFileSync(config["ssl"]["cert"]).toString();
var options = {
key: privateKey,
cert: certificate
};
server = https.createServer(options, app);
} else {
server = http.createServer(app);
var spellCheck;
var idCheckInterval, c_nCheckHealth = 60000,
c_sCheckWord = "color",
c_sCheckLang = 1033;
var canStartCheck = true;
var statusCheckHealth = true;
function checkHealth(worker) {
if (!statusCheckHealth) {
logger.error("error check health, restart!");
worker.kill();
return;
}
worker.send({
type: "spell"
});
statusCheckHealth = false;
}
var spellCheck = require("./spellCheck");
spellCheck.install(server, function () {
server.listen(config["server"]["port"], function () {
logger.info("Express server listening on port %d in %s mode", config["server"]["port"], app.settings.env);
function endCheckHealth(msg) {
statusCheckHealth = true;
}
var workersCount = 1;
if (cluster.isMaster) {
logger.warn("start cluster with %s workers", workersCount);
cluster.on("listening", function (worker) {
if (canStartCheck) {
canStartCheck = false;
idCheckInterval = setInterval(function () {
checkHealth(worker);
},
c_nCheckHealth);
worker.on("message", function (msg) {
endCheckHealth(msg);
});
}
});
app.get("/index.html", function (req, res) {
res.send("Server is functioning normally");
for (var nIndexWorker = 0; nIndexWorker < workersCount; ++nIndexWorker) {
var worker = cluster.fork().process;
logger.warn("worker %s started.", worker.pid);
}
cluster.on("exit", function (worker) {
logger.warn("worker %s died. restart...", worker.process.pid);
clearInterval(idCheckInterval);
endCheckHealth();
canStartCheck = true;
cluster.fork();
});
});
} else {
var express = require("express"),
http = require("http"),
https = require("https"),
fs = require("fs"),
app = express(),
server = null;
spellCheck = require("./spellCheck");
logger.warn("Express server starting...");
if (config["ssl"]) {
var privateKey = fs.readFileSync(config["ssl"]["key"]).toString();
var certificateKey = fs.readFileSync(config["ssl"]["cert"]).toString();
var trustedCertificate = fs.readFileSync(config["ssl"]["ca"]).toString();
var options = {
key: privateKey,
cert: certificateKey,
ca: [trustedCertificate]
};
server = https.createServer(options, app);
} else {
server = http.createServer(app);
}
spellCheck.install(server, function () {
server.listen(config["server"]["port"], function () {
logger.warn("Express server listening on port %d in %s mode", config["server"]["port"], app.settings.env);
});
app.get("/index.html", function (req, res) {
res.send("Server is functioning normally");
});
});
process.on("message", function (msg) {
if (!spellCheck) {
return;
}
spellCheck.spellSuggest(msg.type, c_sCheckWord, c_sCheckLang, function (res) {
process.send({
type: msg.type,
res: res
});
});
});
process.on("uncaughtException", function (err) {
logger.error((new Date).toUTCString() + " uncaughtException:", err.message);
logger.error(err.stack);
logger.shutdown(function () {
process.exit(1);
});
});
}