refactor: manage monitor via gateway hooks

This commit is contained in:
2026-04-04 00:44:33 +00:00
parent 3b0ea0ad12
commit 038862ef8c
36 changed files with 244 additions and 1932 deletions

View File

@@ -0,0 +1,51 @@
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'}`);
}