feat(cli/daemon/processmonitor): Add flexible target resolution and search command; improve restart/backoff and error handling
This commit is contained in:
62
ts/cli/commands/process/search.ts
Normal file
62
ts/cli/commands/process/search.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import * as plugins from '../../plugins.js';
|
||||
import { tspmIpcClient } from '../../../client/tspm.ipcclient.js';
|
||||
import type { CliArguments } from '../../types.js';
|
||||
import { registerIpcCommand } from '../../registration/index.js';
|
||||
|
||||
export function registerSearchCommand(smartcli: plugins.smartcli.Smartcli) {
|
||||
registerIpcCommand(
|
||||
smartcli,
|
||||
'search',
|
||||
async (argvArg: CliArguments) => {
|
||||
const query = String(argvArg._[1] || '').trim();
|
||||
if (!query) {
|
||||
console.error('Error: Please provide a search query');
|
||||
console.log('Usage: tspm search <name-fragment | id-fragment>');
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch list of processes, then enrich with names via describe
|
||||
const listRes = await tspmIpcClient.request('list', {});
|
||||
const processes = listRes.processes;
|
||||
|
||||
// If there are no processes, short-circuit
|
||||
if (processes.length === 0) {
|
||||
console.log('No processes found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const lowerQ = query.toLowerCase();
|
||||
const matches: Array<{ id: number; name?: string }> = [];
|
||||
|
||||
// Collect describe calls to obtain names
|
||||
for (const proc of processes) {
|
||||
try {
|
||||
const desc = await tspmIpcClient.request('describe', { id: proc.id });
|
||||
const name = desc.config.name || '';
|
||||
const idStr = String(proc.id);
|
||||
if (name.toLowerCase().includes(lowerQ) || idStr.includes(query)) {
|
||||
matches.push({ id: proc.id, name });
|
||||
}
|
||||
} catch {
|
||||
// Ignore describe errors for individual processes
|
||||
}
|
||||
}
|
||||
|
||||
if (matches.length === 0) {
|
||||
console.log(`No matches for "${query}"`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Matches for "${query}":`);
|
||||
for (const m of matches) {
|
||||
if (m.name) {
|
||||
console.log(`- id:${m.id}\tname:${m.name}`);
|
||||
} else {
|
||||
console.log(`- id:${m.id}`);
|
||||
}
|
||||
}
|
||||
},
|
||||
{ actionLabel: 'search processes' },
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user