Resolve #3132
This commit is contained in:
		
							parent
							
								
									6c5a78aeb2
								
							
						
					
					
						commit
						e9a3495225
					
				
							
								
								
									
										24
									
								
								src/index.ts
								
								
								
								
							
							
						
						
									
										24
									
								
								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(); | ||||
| 		}); | ||||
| 	}); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue