From e9a349522594936a6df015694be9a5d4c6d56cad Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 6 Nov 2018 03:48:23 +0900 Subject: [PATCH] Resolve #3132 --- src/index.ts | 24 +++++------ src/misc/cli/progressbar.ts | 85 ------------------------------------- 2 files changed, 12 insertions(+), 97 deletions(-) delete mode 100644 src/misc/cli/progressbar.ts diff --git a/src/index.ts b/src/index.ts index ae358105f..c68f617c0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,6 @@ import * as program from 'commander'; import mongo from './db/mongodb'; import Logger from './misc/logger'; -import ProgressBar from './misc/cli/progressbar'; import EnvironmentInfo from './misc/environmentInfo'; import MachineInfo from './misc/machineInfo'; import serverStats from './daemons/server-stats'; @@ -87,10 +86,9 @@ async function masterMain() { if (!program.disableClustering) { await spawnWorkers(config.clusterLimit); - Logger.succ('All workers started'); } - Logger.info(`Now listening on port ${config.port} on ${config.url}`); + Logger.succ(`Now listening on port ${config.port} on ${config.url}`); } /** @@ -168,28 +166,30 @@ function checkMongoDb(config: Config) { } function spawnWorkers(limit: number) { + Logger.info('Starting workers...'); + return new Promise(res => { // Count the machine's CPUs const cpuCount = os.cpus().length; const count = limit || cpuCount; - - const progress = new ProgressBar(count, 'Starting workers'); + let started = 0; // Create a worker for each CPU for (let i = 0; i < count; i++) { const worker = cluster.fork(); + worker.on('message', message => { - if (message === 'ready') { - progress.increment(); + if (message !== 'ready') return; + started++; + + // When all workers started + if (started == count) { + Logger.succ('All workers started'); + res(); } }); } - - // On all workers started - progress.on('complete', () => { - res(); - }); }); } diff --git a/src/misc/cli/progressbar.ts b/src/misc/cli/progressbar.ts deleted file mode 100644 index 72496fded..000000000 --- a/src/misc/cli/progressbar.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { EventEmitter } from 'events'; -import * as readline from 'readline'; -import chalk from 'chalk'; - -/** - * Progress bar - */ -export default class extends EventEmitter { - public max: number; - public value: number; - public text: string; - private indicator: number; - - constructor(max: number, text: string = null) { - super(); - this.max = max; - this.value = 0; - this.text = text; - this.indicator = 0; - this.draw(); - - const iclock = setInterval(() => { - this.indicator = (this.indicator + 1) % 4; - this.draw(); - }, 200); - - this.on('complete', () => { - clearInterval(iclock); - }); - } - - public increment(): void { - this.value++; - this.draw(); - - // Check if it is fulfilled - if (this.value === this.max) { - this.indicator = null; - - cll(); - process.stdout.write(`${this.render()} -> ${chalk.bold('Complete')}\n`); - - this.emit('complete'); - } - } - - public draw(): void { - const str = this.render(); - cll(); - process.stdout.write(str); - } - - private render(): string { - const width = 30; - const t = this.text ? `${this.text} ` : ''; - - const v = Math.floor((this.value / this.max) * width); - const vs = new Array(v + 1).join('*'); - - const p = width - v; - const ps = new Array(p + 1).join(' '); - - const percentage = Math.floor((this.value / this.max) * 100); - const percentages = chalk.gray(`(${percentage} %)`); - - let i: string; - switch (this.indicator) { - case 0: i = '-'; break; - case 1: i = '\\'; break; - case 2: i = '|'; break; - case 3: i = '/'; break; - case null: i = '+'; break; - } - - return `${i} ${t}[${vs}${ps}] ${this.value} / ${this.max} ${percentages}`; - } -} - -/** - * Clear current line - */ -function cll(): void { - readline.clearLine(process.stdout, 0); // Clear current text - readline.cursorTo(process.stdout, 0, null); // Move cursor to the head of line -}