mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { CommandModule } from 'yargs';
|
|
import inquirer from 'inquirer';
|
|
import find from 'find-process';
|
|
import pidusage from 'pidusage';
|
|
|
|
export const usageCommand: CommandModule = {
|
|
command: 'usage [pid]',
|
|
describe: 'View Tailchat process usage',
|
|
builder: (yargs) =>
|
|
yargs.positional('pid', {
|
|
demandOption: false,
|
|
description: 'process id',
|
|
type: 'number',
|
|
}),
|
|
async handler(args) {
|
|
let pidList: number[] = [];
|
|
|
|
if (!args.pid) {
|
|
const list = await find('name', 'tailchat');
|
|
|
|
const processList = list.filter((item) => item.pid !== process.pid);
|
|
|
|
const res = await inquirer.prompt([
|
|
{
|
|
type: 'checkbox',
|
|
name: 'process',
|
|
message: 'Select the process to view',
|
|
choices: processList.map((item) => ({
|
|
name: `(${item.pid})${item.cmd}`,
|
|
value: item.pid,
|
|
})),
|
|
},
|
|
]);
|
|
|
|
pidList = res.process;
|
|
} else {
|
|
if (Array.isArray(args.pid)) {
|
|
pidList = args.pid;
|
|
} else {
|
|
pidList = [args.pid as number];
|
|
}
|
|
}
|
|
|
|
const stats = await pidusage(pidList);
|
|
const res = Object.entries(stats).map(([pid, info]) => ({
|
|
pid,
|
|
cpu: info.cpu,
|
|
memory: `${info.memory / 1024 / 1024} MB`,
|
|
}));
|
|
console.table(res);
|
|
},
|
|
};
|