refactor: manage monitor via gateway hooks
This commit is contained in:
51
plugin/core/managed-monitor.ts
Normal file
51
plugin/core/managed-monitor.ts
Normal 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'}`);
|
||||
}
|
||||
Reference in New Issue
Block a user