52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { spawn, type ChildProcess } from 'child_process';
|
|
import { existsSync } from 'fs';
|
|
|
|
export interface ManagedMonitorConfig {
|
|
managedMonitor?: string;
|
|
monitor_port?: number;
|
|
logLevel?: string;
|
|
}
|
|
|
|
let monitorProcess: ChildProcess | null = null;
|
|
|
|
export function startManagedMonitor(
|
|
logger: { info: (...args: any[]) => void; warn: (...args: any[]) => void; error: (...args: any[]) => void },
|
|
config: ManagedMonitorConfig,
|
|
): void {
|
|
if (!config.managedMonitor) return;
|
|
if (monitorProcess) {
|
|
logger.info('HarborForge managed monitor already running');
|
|
return;
|
|
}
|
|
if (!existsSync(config.managedMonitor)) {
|
|
logger.warn(`HarborForge managed monitor path not found: ${config.managedMonitor}`);
|
|
return;
|
|
}
|
|
|
|
const args: string[] = [];
|
|
if (config.monitor_port) args.push('--port', String(config.monitor_port));
|
|
if (config.logLevel) args.push('--log-level', String(config.logLevel));
|
|
|
|
monitorProcess = spawn(config.managedMonitor, args, {
|
|
stdio: 'inherit',
|
|
detached: false,
|
|
});
|
|
|
|
monitorProcess.on('exit', (code, signal) => {
|
|
logger.warn(`HarborForge managed monitor exited code=${code ?? 'null'} signal=${signal ?? 'null'}`);
|
|
monitorProcess = null;
|
|
});
|
|
|
|
logger.info(`HarborForge managed monitor started: ${config.managedMonitor}`);
|
|
}
|
|
|
|
export function stopManagedMonitor(
|
|
logger: { info: (...args: any[]) => void; warn: (...args: any[]) => void },
|
|
): void {
|
|
if (!monitorProcess) return;
|
|
const pid = monitorProcess.pid;
|
|
monitorProcess.kill('SIGTERM');
|
|
monitorProcess = null;
|
|
logger.info(`HarborForge managed monitor stopped pid=${pid ?? 'unknown'}`);
|
|
}
|