feat(cli,snmp): fix APC runtime unit defaults and add interactive action editing
This commit is contained in:
@@ -11,3 +11,4 @@ export { MigrationV3ToV4 } from './migration-v3-to-v4.ts';
|
||||
export { MigrationV4_0ToV4_1 } from './migration-v4.0-to-v4.1.ts';
|
||||
export { MigrationV4_1ToV4_2 } from './migration-v4.1-to-v4.2.ts';
|
||||
export { MigrationV4_2ToV4_3 } from './migration-v4.2-to-v4.3.ts';
|
||||
export { MigrationV4_3ToV4_4 } from './migration-v4.3-to-v4.4.ts';
|
||||
|
||||
@@ -4,6 +4,7 @@ import { MigrationV3ToV4 } from './migration-v3-to-v4.ts';
|
||||
import { MigrationV4_0ToV4_1 } from './migration-v4.0-to-v4.1.ts';
|
||||
import { MigrationV4_1ToV4_2 } from './migration-v4.1-to-v4.2.ts';
|
||||
import { MigrationV4_2ToV4_3 } from './migration-v4.2-to-v4.3.ts';
|
||||
import { MigrationV4_3ToV4_4 } from './migration-v4.3-to-v4.4.ts';
|
||||
import { logger } from '../logger.ts';
|
||||
|
||||
/**
|
||||
@@ -23,6 +24,7 @@ export class MigrationRunner {
|
||||
new MigrationV4_0ToV4_1(),
|
||||
new MigrationV4_1ToV4_2(),
|
||||
new MigrationV4_2ToV4_3(),
|
||||
new MigrationV4_3ToV4_4(),
|
||||
];
|
||||
|
||||
// Sort by version order to ensure they run in sequence
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { BaseMigration } from './base-migration.ts';
|
||||
import { logger } from '../logger.ts';
|
||||
import { getDefaultRuntimeUnitForUpsModel } from '../snmp/runtime-units.ts';
|
||||
|
||||
/**
|
||||
* Migration from v4.2 to v4.3
|
||||
@@ -23,14 +24,15 @@ export class MigrationV4_2ToV4_3 extends BaseMigration {
|
||||
const migratedDevices = devices.map((device) => {
|
||||
const snmp = device.snmp as Record<string, unknown> | undefined;
|
||||
if (snmp && !snmp.runtimeUnit) {
|
||||
const model = snmp.upsModel as string | undefined;
|
||||
if (model === 'cyberpower') {
|
||||
snmp.runtimeUnit = 'ticks';
|
||||
} else if (model === 'eaton') {
|
||||
snmp.runtimeUnit = 'seconds';
|
||||
} else {
|
||||
snmp.runtimeUnit = 'minutes';
|
||||
}
|
||||
const model = snmp.upsModel as
|
||||
| 'cyberpower'
|
||||
| 'apc'
|
||||
| 'eaton'
|
||||
| 'tripplite'
|
||||
| 'liebert'
|
||||
| 'custom'
|
||||
| undefined;
|
||||
snmp.runtimeUnit = getDefaultRuntimeUnitForUpsModel(model);
|
||||
logger.dim(` → ${device.name}: Set runtimeUnit to '${snmp.runtimeUnit}'`);
|
||||
}
|
||||
return device;
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
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<string, unknown>): boolean {
|
||||
return config.version === '4.3';
|
||||
}
|
||||
|
||||
migrate(config: Record<string, unknown>): Record<string, unknown> {
|
||||
logger.info(`${this.getName()}: Correcting APC runtimeUnit defaults...`);
|
||||
|
||||
let correctedDevices = 0;
|
||||
const devices = (config.upsDevices as Array<Record<string, unknown>>) || [];
|
||||
const migratedDevices = devices.map((device) => {
|
||||
const snmp = device.snmp as Record<string, unknown> | 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user