| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | const _ = require('lodash')const cluster = require('cluster')const Promise = require('bluebird')/* global WIKI */module.exports = {  numWorkers: 1,  workers: [],  init() {    if (cluster.isMaster) {      WIKI.logger.info('=======================================')      WIKI.logger.info('= Wiki.js =============================')      WIKI.logger.info('=======================================')      WIKI.redis = require('./redis').init()      WIKI.queue = require('./queue').init()      this.setWorkerLimit()      this.bootMaster()    } else {      this.bootWorker()    }  },  /**   * Pre-Master Boot Sequence   */  preBootMaster() {    return Promise.mapSeries([      () => { return WIKI.db.onReady },      () => { return WIKI.configSvc.loadFromDb() },      () => { return WIKI.queue.clean() }    ], fn => { return fn() })  },  /**   * Boot Master Process   */  bootMaster() {    this.preBootMaster().then(sequenceResults => {      if (_.every(sequenceResults, rs => rs === true) && WIKI.config.configMode !== 'setup') {        this.postBootMaster()      } else {        WIKI.logger.info('Starting configuration manager...')        require('../setup')()      }      return true    }).catch(err => {      WIKI.logger.error(err)      process.exit(1)    })  },  /**   * Post-Master Boot Sequence   */  async postBootMaster() {    await require('../master')()    WIKI.queue.start()    cluster.on('exit', (worker, code, signal) => {      if (!global.DEV) {        WIKI.logger.info(`Background Worker #${worker.id} was terminated.`)      }    })  },  /**   * Boot Worker Process   */  bootWorker() {    WIKI.logger.info(`Background Worker #${cluster.worker.id} is initializing...`)    require('../worker')  },  /**   * Spawn new Worker process   */  spawnWorker() {    this.workers.push(cluster.fork())  },  /**   * Set Worker count based on config + system capabilities   */  setWorkerLimit() {    const numCPUs = require('os').cpus().length    this.numWorkers = (WIKI.config.workers > 0) ? WIKI.config.workers : numCPUs    if (this.numWorkers > numCPUs) {      this.numWorkers = numCPUs    }  }}
 |