103 lines
4.3 KiB
TypeScript
103 lines
4.3 KiB
TypeScript
import * as plugins from '../../plugins.js';
|
|
import * as paths from '../../paths.js';
|
|
import { tspmIpcClient } from '../../client/tspm.ipcclient.js';
|
|
import { Logger } from '../../shared/common/utils.errorhandler.js';
|
|
import type { CliArguments } from '../types.js';
|
|
import { pad } from '../helpers/formatting.js';
|
|
import { formatMemory } from '../helpers/memory.js';
|
|
|
|
export function registerDefaultCommand(smartcli: plugins.smartcli.Smartcli) {
|
|
const cliLogger = new Logger('CLI');
|
|
const tspmProjectinfo = new plugins.projectinfo.ProjectInfo(paths.packageDir);
|
|
|
|
smartcli.standardCommand().subscribe({
|
|
next: async (argvArg: CliArguments) => {
|
|
console.log(
|
|
`TSPM - TypeScript Process Manager v${tspmProjectinfo.npm.version}`,
|
|
);
|
|
console.log('Usage: tspm [command] [options]');
|
|
console.log('\nService Management:');
|
|
console.log(
|
|
' enable Enable TSPM as system service (systemd)',
|
|
);
|
|
console.log(' disable Disable TSPM system service');
|
|
console.log('\nProcess Commands:');
|
|
console.log(' start <script> Start a process');
|
|
console.log(' list List all processes');
|
|
console.log(' stop <id> Stop a process');
|
|
console.log(' restart <id> Restart a process');
|
|
console.log(' delete <id> Delete a process');
|
|
console.log(' describe <id> Show details for a process');
|
|
console.log(' logs <id> Show logs for a process');
|
|
console.log(' start-all Start all saved processes');
|
|
console.log(' stop-all Stop all processes');
|
|
console.log(' restart-all Restart all processes');
|
|
console.log('\nDaemon Commands:');
|
|
console.log(
|
|
' daemon start Start daemon manually (current session)',
|
|
);
|
|
console.log(' daemon stop Stop the daemon');
|
|
console.log(' daemon status Show daemon status');
|
|
console.log(
|
|
'\nUse tspm [command] --help for more information about a command.',
|
|
);
|
|
|
|
// Show current process list
|
|
console.log('\nProcess List:');
|
|
|
|
try {
|
|
const response = await tspmIpcClient.request('list', {});
|
|
const processes = response.processes;
|
|
|
|
if (processes.length === 0) {
|
|
console.log(
|
|
' No processes running. Use "tspm start" to start a process.',
|
|
);
|
|
} else {
|
|
console.log(
|
|
'┌─────────┬─────────────┬───────────┬───────────┬──────────┐',
|
|
);
|
|
console.log(
|
|
'│ ID │ Name │ Status │ Memory │ Restarts │',
|
|
);
|
|
console.log(
|
|
'├─────────┼─────────────┼───────────┼───────────┼──────────┤',
|
|
);
|
|
|
|
for (const proc of processes) {
|
|
const statusColor =
|
|
proc.status === 'online'
|
|
? '\x1b[32m'
|
|
: proc.status === 'errored'
|
|
? '\x1b[31m'
|
|
: '\x1b[33m';
|
|
const resetColor = '\x1b[0m';
|
|
|
|
console.log(
|
|
`│ ${pad(proc.id, 7)} │ ${pad(proc.id, 11)} │ ${statusColor}${pad(proc.status, 9)}${resetColor} │ ${pad(formatMemory(proc.memory), 9)} │ ${pad(proc.restarts.toString(), 8)} │`,
|
|
);
|
|
}
|
|
|
|
console.log(
|
|
'└─────────┴─────────────┴───────────┴───────────┴──────────┘',
|
|
);
|
|
}
|
|
|
|
// Disconnect from daemon after getting list
|
|
await tspmIpcClient.disconnect();
|
|
} catch (error) {
|
|
console.error('Error: TSPM daemon is not running.');
|
|
console.log('\nTo start the daemon, run one of:');
|
|
console.log(' tspm daemon start - Start for this session only');
|
|
console.log(
|
|
' tspm enable - Enable as system service (recommended)',
|
|
);
|
|
}
|
|
},
|
|
error: (err) => {
|
|
cliLogger.error(err);
|
|
},
|
|
complete: () => {},
|
|
});
|
|
}
|