mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.5 KiB
93 lines
2.5 KiB
#! /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);
|
|
|