|
|
|
#! /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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|