/** * 워커 매니저 * 워커 생성, 관리, 스케일링 담당 */ import { EventEmitter } from "eventemitter3"; import { IWorker, WorkerStatus, WorkerType } from "../types/index.js"; /** * 워커 매니저 설정 인터페이스 */ export interface WorkerManagerConfig { /** 최소 워커 수 */ minWorkers: number; /** 최대 워커 수 */ maxWorkers: number; /** 워커 유휴 타임아웃 (밀리초) */ idleTimeout: number; /** 워커 URL (웹 환경) */ workerUrl?: string | ((type: string) => string); /** 워커 파일 경로 (Node.js 환경) */ workerFile?: string | ((type: string) => string); /** 워커 유형 */ workerType: WorkerType | string; /** 리소스 정리 주기 (밀리초) */ cleanupInterval?: number; /** 메모리 임계치 (바이트) */ memoryThreshold?: number; /** CPU 임계치 (퍼센트) */ cpuThreshold?: number; } /** * 워커 통계 인터페이스 */ export interface WorkerManagerStats { /** 총 워커 수 */ totalWorkers: number; /** 활성 워커 수 */ activeWorkers: number; /** 유휴 워커 수 */ idleWorkers: number; /** 메모리 사용량 */ memoryUsage: number; /** CPU 사용량 */ cpuUsage: number; } /** * 워커 매니저 인터페이스 */ export interface IWorkerManager { /** 워커 생성 */ createWorker(): string; /** 워커 해제 */ releaseWorker(workerId: string): Promise; /** 유휴 워커 가져오기 */ getIdleWorker(): IWorker | undefined; /** 워커 상태 가져오기 */ getWorkerStatus(workerId: string): WorkerStatus; /** 워커 가져오기 */ getWorker(workerId: string): IWorker | undefined; /** 모든 워커 가져오기 */ getAllWorkers(): IWorker[]; /** 워커 매니저 통계 가져오기 */ getStats(): WorkerManagerStats; /** 최소 워커 수 유지 */ ensureMinWorkers(): void; /** 모든 워커 종료 */ closeAll(force?: boolean): Promise; } /** * 워커 매니저 이벤트 인터페이스 */ export interface WorkerManagerEvents { /** 워커 생성 이벤트 */ workerCreated: [{ workerId: string; }]; /** 워커 에러 이벤트 */ workerError: [{ workerId: string; error: Error; }]; /** 워커 종료 이벤트 */ workerExit: [{ workerId: string; exitCode: number; }]; /** 워커 메시지 이벤트 */ workerMessage: [{ workerId: string; message: any; }]; /** 리소스 경고 이벤트 */ resourceWarning: [{ type: 'memory' | 'cpu'; usage: number; threshold: number; }]; } /** * 워커 매니저 클래스 */ export declare class WorkerManager extends EventEmitter implements IWorkerManager { /** 워커 맵 */ private workers; /** 워커 상태 맵 */ private workerStatus; /** 유휴 타이머 맵 */ private idleTimers; /** 종료 중 여부 */ private isClosing; /** 설정 */ private config; /** 리소스 정리 인터벌 */ private cleanupInterval?; /** 리소스 모니터링 인터벌 */ private monitorInterval?; private resourceMonitorTimer?; private resourceStats; /** * 워커 매니저 생성자 * @param config 설정 */ constructor(config: WorkerManagerConfig); /** * 리소스 정리 설정 */ private setupResourceCleanup; /** * 리소스 모니터링 설정 */ private startResourceMonitoring; /** * 리소스 정리 */ private cleanupResources; /** * 리소스 모니터링 */ private monitorResources; private getResourceUsage; private checkResourceThresholds; /** * 강제 리소스 정리 */ private forceCleanup; /** * 워커 생성 * @returns 워커 ID */ createWorker(): string; /** * 워커 해제 * @param workerId 워커 ID */ releaseWorker(workerId: string): Promise; /** * 유휴 워커 가져오기 * @returns 유휴 워커 또는 undefined */ getIdleWorker(): IWorker | undefined; /** * 워커 상태 가져오기 * @param workerId 워커 ID * @returns 워커 상태 */ getWorkerStatus(workerId: string): WorkerStatus; /** * 워커 가져오기 * @param workerId 워커 ID * @returns 워커 또는 undefined */ getWorker(workerId: string): IWorker | undefined; /** * 모든 워커 가져오기 * @returns 모든 워커 배열 */ getAllWorkers(): IWorker[]; /** * 워커 상태 설정 * @param workerId 워커 ID * @param status 워커 상태 */ setWorkerStatus(workerId: string, status: WorkerStatus): void; /** * 워커 매니저 통계 가져오기 * @returns 워커 매니저 통계 */ getStats(): WorkerManagerStats; /** * 최소 워커 수 유지 */ ensureMinWorkers(): void; /** * 모든 워커 종료 * @param force 강제 종료 여부 * @returns 프로미스 */ closeAll(force?: boolean): Promise; /** * 유휴 타이머 설정 * @param workerId 워커 ID */ private setIdleTimer; /** * 유휴 타이머 제거 * @param workerId 워커 ID */ private clearIdleTimer; getWorkers(): IWorker[]; addWorker(): void; removeIdleWorker(): void; }