53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { CONTROLPLANE_INTERNAL_DOMAIN } from '../src/config.js';
|
|
|
|
const API_PORT = parseInt(process.env.CONTROLPLANE_PORT ?? '3100', 10);
|
|
const API_HOST = process.env.CONTROLPLANE_BIND_HOST ?? '127.0.0.1';
|
|
|
|
async function apiGet(path: string): Promise<unknown> {
|
|
const res = await fetch(`http://${API_HOST}:${API_PORT}${path}`);
|
|
if (!res.ok) throw new Error(`API ${res.status}: ${await res.text()}`);
|
|
return res.json();
|
|
}
|
|
|
|
async function main(): Promise<void> {
|
|
try {
|
|
const data = (await apiGet('/api/controlplane/state')) as Record<
|
|
string,
|
|
unknown
|
|
>;
|
|
const agents =
|
|
((data as Record<string, unknown>).agents as Array<
|
|
Record<string, unknown>
|
|
>) ?? [];
|
|
|
|
if (agents.length === 0) {
|
|
console.log('No registered agents.');
|
|
return;
|
|
}
|
|
|
|
console.log('Agent ID\t\tProfile\t\tStatus');
|
|
console.log('-'.repeat(50));
|
|
for (const a of agents) {
|
|
console.log(
|
|
`${a.id ?? '?'}\t\t${a.profile ?? '?'}\t\t${a.status ?? '?'}`,
|
|
);
|
|
}
|
|
console.log(`\n${agents.length} agent(s)`);
|
|
} catch (err) {
|
|
const msg = err instanceof Error ? err.message : String(err);
|
|
if (msg.includes('ECONNREFUSED')) {
|
|
console.error(
|
|
`${CONTROLPLANE_INTERNAL_DOMAIN} controlplane API not reachable at`,
|
|
`${API_HOST}:${API_PORT}`,
|
|
);
|
|
console.error(
|
|
`Is the operator controlplane at ${CONTROLPLANE_INTERNAL_DOMAIN} running?`,
|
|
);
|
|
} else {
|
|
console.error('Error:', msg);
|
|
}
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|