/** * Database Lock Monitor * SQLite 데이터베이스 락을 주기적으로 모니터링하고 자동으로 해결 * * 클린코드 원칙: * - 단일 책임 원칙: 데이터베이스 락 모니터링만 담당 * - 명확한 인터페이스: LockStatus와 DatabaseLockMonitorConfig로 명확한 타입 정의 */ /** * 락 상태 정보 */ export interface LockStatus { /** * 락 상태 여부 */ isLocked: boolean; /** * 락 지속 시간 (밀리초) */ lockDuration: number; /** * 락 감지 방법 * - immediate_transaction: IMMEDIATE 트랜잭션 시도로 감지 * - busy_timeout: busy_timeout 초과로 감지 */ detectionMethod: 'immediate_transaction' | 'busy_timeout'; /** * busy_timeout 초과 횟수 */ busyCount: number; } /** * 데이터베이스 락 모니터 설정 */ export interface DatabaseLockMonitorConfig { /** * 모니터링 주기 (밀리초) * 기본값: 1분 (60000ms) */ intervalMs: number; /** * 경고 임계값 (밀리초) * 기본값: 5초 (5000ms) */ warningThresholdMs: number; /** * 위험 임계값 (밀리초) * 기본값: 30초 (30000ms) */ dangerThresholdMs: number; /** * 치명적 임계값 (밀리초) * 기본값: 60초 (60000ms) */ criticalThresholdMs: number; } import Database from 'better-sqlite3'; import type { Logger, PerformanceMonitor } from './wal-checkpoint-scheduler.js'; import type { WalCheckpointScheduler } from './wal-checkpoint-scheduler.js'; import type { RuntimeDiagnosticsLogger } from '../../domains/monitoring/services/runtime-diagnostics-logger.js'; /** * 데이터베이스 락 모니터 클래스 * SQLite 데이터베이스 락을 주기적으로 모니터링하고 자동으로 해결 */ export declare class DatabaseLockMonitor { private db; private config; private logger?; private performanceMonitor?; private checkpointScheduler?; private diagnosticsLogger?; private intervalId; private isRunning; private lockStartTime; private busyCount; private busyEventTimes; private statsResetTime; constructor(db: Database.Database, config: DatabaseLockMonitorConfig, logger?: Logger | undefined, performanceMonitor?: PerformanceMonitor | undefined, checkpointScheduler?: WalCheckpointScheduler | undefined, diagnosticsLogger?: Pick | undefined); /** * 모니터 시작 (idempotent) */ start(): void; /** * 모니터 중지 (idempotent) */ stop(): void; /** * 주기적 모니터링 */ private monitor; /** * busy_timeout 통계 업데이트 * 시간당 발생 횟수 모니터링 */ private updateBusyStatistics; /** * 락 상태 확인 * IMMEDIATE 트랜잭션 시도와 단순 상태 확인 쿼리를 통해 락을 감지 */ private checkLockStatus; /** * 락 상태 처리 * 임계값 기반 경고 및 조치 로직 */ private handleLockStatus; private writeDiagnosticsEvent; } //# sourceMappingURL=database-lock-monitor.d.ts.map