import { Logger } from '@nestjs/common';

const cluster = require('cluster');
const os = require('os');

const runChildProcesses = (cb: Function): void => {
  const numCpus: number = os.cpus().length;
  if (cluster.isMaster) {
    Logger.log(
      `Master process is running with process id: ${process.pid}`,
      'Cluster',
    );
    for (let i = 0; i < numCpus; i++) {
      cluster.fork();
    }

    cluster.on('exit', (worker: any) => {
      Logger.warn(
        `Worker ${worker.process.pid} died. Restarting...`,
        'Cluster',
      );
      cluster.fork();
    });
  } else {
    cb();
  }
};

export default runChildProcesses;
