monex
Version:
Execute one or multiple scripts, interactively or in daemon mode, and restart them whenever they crash or a watched file changes.
52 lines (51 loc) • 1.81 kB
JavaScript
/* IMPORT */
import process from 'node:process';
import { bin, color } from 'specialist';
import Daemon from '../daemon/index.js';
import Formatter from '../interactive/formatter.js';
/* MAIN */
//TODO: Add support for restarting clusters with zero downtime
bin('monexd', 'Execute one or multiple scripts, in daemon mode')
/* LOG */
.command('log', 'Dump logs from the processes')
.option('-n, --lines <number>', 'The number of lines to output per stdout/stderr section')
.action(async (options) => {
const lines = Number(options['lines']) || 100;
const log = await Daemon.log(lines);
console.log(log);
})
/* PING */
.command('ping', 'Ping the daemon')
.action(async () => {
const isOnline = await Daemon.ping();
const message = isOnline ? color.green('Online') : color.red('Offline');
const code = isOnline ? 0 : 1;
console.log(message);
process.exit(code);
})
/* START */
.command('start', 'Start the daemon')
.option('-c, --config <path>', 'Path to the configuration to load')
.action(async (options) => {
const config = options['config'];
const isSuccess = await Daemon.start(config);
const message = isSuccess ? color.green('Success') : color.red('Failure');
const code = isSuccess ? 0 : 1;
console.log(message);
process.exit(code);
})
/* STAT */
.command('stat', 'Dump stats about the processes')
.option('-p, --pretty', 'Output in a more human-readable format')
.action(async (options) => {
const pretty = !!options['pretty'];
const stats = await Daemon.stat();
const statsFormatted = Formatter.format(stats, pretty);
console.log(statsFormatted);
})
/* STOP */
.command('stop', 'Stop the daemon')
.action(Daemon.stop)
/* RUN */
.run();