[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/hlambda/hlambda-core/master/src/utils/reloadServer.js [Back]  [Original]

import path from 'path';
import fsPromise from 'fs/promises';

import { exec, execSync, spawn } from 'child_process';

export const executeShellCommand = async (command, args, inCwd) => {
  const cwd = typeof inCwd === 'undefined' ? path.resolve(process.cwd()) : path.resolve(inCwd);

  // This will work on any platform! As long as there is pm2
  const bat = spawn(command, args, {
    cwd,
    detached: true,
    stdio: ['ignore'],
  });

  bat.unref();

  // In PM2 process will hang because of monitoring, detach will not help you.
  // Node.js process in PM2 can't

  // // Hack to await stdout results or error
  // await new Promise((resolve) => {
  //   bat.stdout.on('data', (data) => {
  //     const result = data.toString();
  //     console.log(result);
  //     resolve(true);
  //   });

  //   bat.stderr.on('data', (data) => {
  //     const result = data.toString();
  //     console.error(result);
  //     resolve(true);
  //   });

  //   bat.on('exit', (/* code */) => {
  //     // console.info(`Child exited with code ${code}`);
  //     resolve(true);
  //   });

  //   bat.on('error', (error) => {
  //     console.error('Problem with spawning process, probably path is wrong.');
  //   });

  //   // It will resolve after 1.500 sec no mather what.
  //   setTimeout(() => {
  //     resolve(true);
  //   }, 30000);
  // });
};

export const reloadServer = async () => {
  // Write file in data
  await fsPromise
    .writeFile(path.resolve(process.cwd(), './data/metadata-history/last-restarted-timestamp'), `${Date.now()}`, 'utf8')
    .then((data) => {
      return data;
    })
    .catch((error) => {
      console.error("[restart-microservice] ERROR: can't write ./data/metadata-history/last-restarted-timestamp");
      console.error(error);
    });

  // Call nginx reload
  // Maybe in the future if we want to do this with nginx instead of pm2

  // Call pm2 reload
  // executeShellCommand('pm2', ['reload', 'all']);

  // You can't reload if reloading unless you force it. (In future maybe we should ask client for additional confirmation for force)
  executeShellCommand('pm2', ['reload', 'all', '--force']);

  // // Write file in watch trigger
  // await fsPromise
  //   .writeFile(path.resolve(process.cwd(), './watcher_trigger/restarted.txt'), `${Date.now()}`, 'utf8')
  //   .then((data) => {
  //     return data;
  //   })
  //   .catch((error) => {
  //     console.error("[restart-microservice] ERROR: can't write ./watcher_trigger/restarted.txt");
  //     console.error(error);
  //   });
};

export default reloadServer;

Web Proxy Viewer  |  New URL  |  Original Page