import { BaseMigration } from './base-migration.ts'; import { logger } from '../logger.ts'; /** * Migration from v4.3 to v4.4 * * Changes: * 1. Corrects APC runtimeUnit defaults from minutes to ticks * 2. Bumps version from '4.3' to '4.4' */ export class MigrationV4_3ToV4_4 extends BaseMigration { readonly fromVersion = '4.3'; readonly toVersion = '4.4'; shouldRun(config: Record): boolean { return config.version === '4.3'; } migrate(config: Record): Record { logger.info(`${this.getName()}: Correcting APC runtimeUnit defaults...`); let correctedDevices = 0; const devices = (config.upsDevices as Array>) || []; const migratedDevices = devices.map((device) => { const snmp = device.snmp as Record | undefined; if (!snmp || snmp.upsModel !== 'apc') { return device; } if (!snmp.runtimeUnit || snmp.runtimeUnit === 'minutes') { snmp.runtimeUnit = 'ticks'; correctedDevices += 1; logger.dim(` → ${device.name}: Set runtimeUnit to 'ticks'`); } return device; }); const result = { ...config, version: this.toVersion, upsDevices: migratedDevices, }; logger.success( `${this.getName()}: Migration complete (${correctedDevices} APC device(s) corrected)`, ); return result; } }