56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
|
import { BaseMigration } from './base-migration.ts';
|
||
|
import { logger } from '../logger.ts';
|
||
|
|
||
|
/**
|
||
|
* Migration from v1 (single SNMP config) to v2 (upsDevices array)
|
||
|
*
|
||
|
* Detects old format:
|
||
|
* {
|
||
|
* snmp: { ... },
|
||
|
* thresholds: { ... },
|
||
|
* checkInterval: 30000
|
||
|
* }
|
||
|
*
|
||
|
* Converts to:
|
||
|
* {
|
||
|
* version: "2.0",
|
||
|
* upsDevices: [{ id: "default", name: "Default UPS", snmp: ..., thresholds: ... }],
|
||
|
* groups: [],
|
||
|
* checkInterval: 30000
|
||
|
* }
|
||
|
*/
|
||
|
export class MigrationV1ToV2 extends BaseMigration {
|
||
|
readonly fromVersion = '1.x';
|
||
|
readonly toVersion = '2.0';
|
||
|
|
||
|
async shouldRun(config: any): Promise<boolean> {
|
||
|
// V1 format has snmp field directly at root, no upsDevices or upsList
|
||
|
return !!config.snmp && !config.upsDevices && !config.upsList;
|
||
|
}
|
||
|
|
||
|
async migrate(config: any): Promise<any> {
|
||
|
logger.info(`${this.getName()}: Converting single SNMP config to multi-UPS format...`);
|
||
|
|
||
|
const migrated = {
|
||
|
version: this.toVersion,
|
||
|
upsDevices: [
|
||
|
{
|
||
|
id: 'default',
|
||
|
name: 'Default UPS',
|
||
|
snmp: config.snmp,
|
||
|
thresholds: config.thresholds || {
|
||
|
battery: 60,
|
||
|
runtime: 20,
|
||
|
},
|
||
|
groups: [],
|
||
|
},
|
||
|
],
|
||
|
groups: [],
|
||
|
checkInterval: config.checkInterval || 30000,
|
||
|
};
|
||
|
|
||
|
logger.success(`${this.getName()}: Migration complete`);
|
||
|
return migrated;
|
||
|
}
|
||
|
}
|