|
|
|
#! /usr/bin/env node
|
|
|
|
|
|
|
|
const morgan = require("morgan");
|
|
|
|
const bodyParser = require("body-parser");
|
|
|
|
const express = require("express");
|
|
|
|
const sqlConfig = require("commander");
|
|
|
|
const mysql = require("mysql");
|
|
|
|
const cors = require("cors");
|
|
|
|
const dataHelp = require("../lib/util/data.helper.js");
|
|
|
|
const Xapi = require("../lib/xapi.js");
|
|
|
|
const cmdargs = require("../lib/util/cmd.helper.js");
|
|
|
|
const cluster = require("cluster");
|
|
|
|
const numCPUs = require("os").cpus().length;
|
|
|
|
|
|
|
|
function startXmysql(sqlConfig) {
|
|
|
|
/**************** START : setup express ****************/
|
|
|
|
let app = express();
|
|
|
|
app.use(morgan("tiny"));
|
|
|
|
app.use(cors());
|
|
|
|
app.use(bodyParser.json());
|
|
|
|
app.use(
|
|
|
|
bodyParser.urlencoded({
|
|
|
|
extended: true
|
|
|
|
})
|
|
|
|
);
|
|
|
|
/**************** END : setup express ****************/
|
|
|
|
|
|
|
|
/**************** START : setup mysql ****************/
|
|
|
|
let mysqlPool = mysql.createPool(sqlConfig);
|
|
|
|
/**************** END : setup mysql ****************/
|
|
|
|
|
|
|
|
/**************** START : setup Xapi ****************/
|
|
|
|
console.log("");
|
|
|
|
console.log("");
|
|
|
|
console.log("");
|
|
|
|
console.log(" Generating REST APIs at the speed of your thought.. ");
|
|
|
|
console.log("");
|
|
|
|
|
|
|
|
let t = process.hrtime();
|
|
|
|
let moreApis = new Xapi(sqlConfig, mysqlPool, app);
|
|
|
|
|
|
|
|
moreApis.init((err, results) => {
|
|
|
|
app.listen(sqlConfig.portNumber, sqlConfig.ipAddress);
|
|
|
|
var t1 = process.hrtime(t);
|
|
|
|
var t2 = t1[0] + t1[1] / 1000000000;
|
|
|
|
|
|
|
|
console.log(
|
|
|
|
" Xmysql took : %d seconds",
|
|
|
|
dataHelp.round(t2, 1)
|
|
|
|
);
|
|
|
|
console.log(
|
|
|
|
" API's base URL : " +
|
|
|
|
"localhost:" +
|
|
|
|
sqlConfig.portNumber
|
|
|
|
);
|
|
|
|
console.log(" ");
|
|
|
|
console.log(
|
|
|
|
" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
|
|
|
|
);
|
|
|
|
});
|
|
|
|
/**************** END : setup Xapi ****************/
|
|
|
|
}
|
|
|
|
|
|
|
|
function start(sqlConfig) {
|
|
|
|
//handle cmd line arguments
|
|
|
|
cmdargs.handle(sqlConfig);
|
|
|
|
|
|
|
|
if (cluster.isMaster && sqlConfig.useCpuCores > 1) {
|
|
|
|
console.log(`Master ${process.pid} is running`);
|
|
|
|
|
|
|
|
for (let i = 0; i < numCPUs && i < sqlConfig.useCpuCores; i++) {
|
|
|
|
console.log(`Forking process number ${i}...`);
|
|
|
|
cluster.fork();
|
|
|
|
}
|
|
|
|
|
|
|
|
cluster.on("exit", function(worker, code, signal) {
|
|
|
|
console.log(
|
|
|
|
"Worker " +
|
|
|
|
worker.process.pid +
|
|
|
|
" died with code: " +
|
|
|
|
code +
|
|
|
|
", and signal: " +
|
|
|
|
signal
|
|
|
|
);
|
|
|
|
console.log("Starting a new worker");
|
|
|
|
cluster.fork();
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
startXmysql(sqlConfig);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
start(sqlConfig);
|