export interface IWatchEventLike { kind: string; paths: string[]; } export type TConfigReloadTransition = 'monitoringWillStart' | 'deviceCountChanged' | 'reloaded'; export interface IConfigReloadSnapshot { transition: TConfigReloadTransition; message: string; shouldInitializeUpsStatus: boolean; shouldLogMonitoringStart: boolean; } export function shouldReloadConfig( event: IWatchEventLike, configFileName: string = 'config.json', ): boolean { return event.kind === 'modify' && event.paths.some((path) => path.includes(configFileName)); } export function shouldRefreshPauseState( event: IWatchEventLike, pauseFileName: string = 'pause', ): boolean { return ['create', 'modify', 'remove'].includes(event.kind) && event.paths.some((path) => path.includes(pauseFileName)); } export function analyzeConfigReload( oldDeviceCount: number, newDeviceCount: number, ): IConfigReloadSnapshot { if (newDeviceCount > 0 && oldDeviceCount === 0) { return { transition: 'monitoringWillStart', message: `Configuration reloaded! Found ${newDeviceCount} UPS device(s)`, shouldInitializeUpsStatus: false, shouldLogMonitoringStart: true, }; } if (newDeviceCount !== oldDeviceCount) { return { transition: 'deviceCountChanged', message: `Configuration reloaded! UPS devices: ${oldDeviceCount} -> ${newDeviceCount}`, shouldInitializeUpsStatus: true, shouldLogMonitoringStart: false, }; } return { transition: 'reloaded', message: 'Configuration reloaded successfully', shouldInitializeUpsStatus: false, shouldLogMonitoringStart: false, }; }