59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
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,
|
|
};
|
|
}
|