Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return new Promise(async (resolve, reject) => {
const clustered = process.env.NODE_ENV === 'production' && config.clustered
// If the clustering mode is enabled and we are in the master process, create one worker per CPU core
if (cluster.isMaster && clustered) {
const cpus = require('os').cpus().length
console.log(`[${new Date().toTimeString().split(' ')[0]}] Setting up clusters for ${cpus} cores`)
for (let i = 0; i < cpus; i += 1) {
cluster.fork()
}
// Notify if new worker is created
cluster.on('online', (worker) => {
console.log(`[${new Date().toTimeString().split(' ')[0]}] Worker ${worker.id} is online and listening on ${host}:${port}`)
})
// If a worker dies, create a new one to keep the performance steady
cluster.on('exit', (worker, code, signal) => {
console.log(`[${new Date().toTimeString().split(' ')[0]}] Worker ${worker.id} exited with code/signal ${code || signal}, respawning...`)
cluster.fork()
})
// If the clustering mode is disabled or we are in a worker process, setup the server
} else {
const app = express()
await applyApp(app)
app.listen(port, host, err => {
async _run() {
await this.whenInitialized();
cluster.setupMaster(this._masterOpts);
// TODO maybe run this after starting waitForAllWorkers
this.forEach(worker => worker.run());
await this.waitForAllWorkers('worker ready');
this.emit('running');
}
constructor() {
super();
this.addWidget('customvariables', 'widget-title-customvariables', 'fas fa-dollar-sign');
require('cluster').on('message', (worker, message) => {
if (message.type !== 'widget_custom_variables') {
return;
}
this.emit(message.emit); // send update to widget
});
}
constructor () {
global.panel.addWidget('customvariables', 'widget-title-customvariables', 'fas fa-dollar-sign')
this.sockets()
require('cluster').on('message', (worker, message) => {
if (message.type !== 'widget_custom_variables') return
global.panel.io.of('/widgets/customVariables').emit(message.emit) // send update to widget
})
}
this.run = async function() {
cluster.on('message', handleWorker);
const worker_count = this.workers.length;
for (let i = 0; i !== worker_count; i++) {
this.workers[i].send({
code: 'TASK',
data: this.image_list[this.pointer]
});
this.pointer++;
}
// Wait for all tasks to complete
return new Promise(resolve => cluster.once('complete', resolve));
}
captureReloadSignal() {
const signal = this.options.reloadSignal;
const reloadWorkers = () => {
util.getAliveWorkers().forEach(worker => worker.send(util.THINK_RELOAD_SIGNAL));
};
if (signal) process.on(signal, reloadWorkers);
// if receive message `think-cluster-reload-workers` from worker, restart all workers
cluster.on('message', (worker, message) => {
if (message !== 'think-cluster-reload-workers') return;
reloadWorkers();
});
}
/**
function initMaster() {
console.log('Master ' + process.pid + ' is running');
for (var i = 0; i < config.app.workers; i++) {
cluster.fork();
}
cluster.on('exit', function(worker) {
console.log('worker ' + worker.process.pid + ' died');
});
}
require('os').cpus().forEach(function() {
var worker = cluster.fork();
worker.on('online', function(msg) {
console.log('worker', worker.process.pid, 'online');
workers[worker.process.pid] = worker;
});
});
cluster.on('exit', function(worker, code, signal) {
require('os').cpus().forEach(function() {
var worker = cluster.fork();
worker.on('message', function(msg) {
console.log('worker', worker.pid, 'online');
workers[worker.pid] = worker;
});
});
function clusterApp(){
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', worker => console.error(`worker ${worker.process.pid} died`));
console.info("cors-container listening on port 3000 with " + numCPUs + " threads.")
}