fix(cli,daemon,snmp): normalize CLI argument parsing and extract daemon monitoring helpers with stronger SNMP typing
This commit is contained in:
+29
-12
@@ -103,7 +103,15 @@ export class UpsHandler {
|
||||
const protocol: TProtocol = protocolChoice === 2 ? 'upsd' : 'snmp';
|
||||
|
||||
// Create a new UPS configuration object with defaults
|
||||
const newUps: Record<string, unknown> & { id: string; name: string; groups: string[]; actions: IActionConfig[]; protocol: TProtocol; snmp?: ISnmpConfig; upsd?: IUpsdConfig } = {
|
||||
const newUps: Record<string, unknown> & {
|
||||
id: string;
|
||||
name: string;
|
||||
groups: string[];
|
||||
actions: IActionConfig[];
|
||||
protocol: TProtocol;
|
||||
snmp?: ISnmpConfig;
|
||||
upsd?: IUpsdConfig;
|
||||
} = {
|
||||
id: upsId,
|
||||
name: name || `UPS-${upsId}`,
|
||||
protocol,
|
||||
@@ -203,7 +211,7 @@ export class UpsHandler {
|
||||
return;
|
||||
} else {
|
||||
// For specific UPS ID, error if config doesn't exist
|
||||
logger.error('No configuration found. Please run "nupst setup" first.');
|
||||
logger.error('No configuration found. Please run "nupst ups add" first.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -242,7 +250,7 @@ export class UpsHandler {
|
||||
} else {
|
||||
// For backward compatibility, edit the first UPS if no ID specified
|
||||
if (config.upsDevices.length === 0) {
|
||||
logger.error('No UPS devices configured. Please run "nupst add" to add a UPS.');
|
||||
logger.error('No UPS devices configured. Please run "nupst ups add" to add a UPS.');
|
||||
return;
|
||||
}
|
||||
upsToEdit = config.upsDevices[0];
|
||||
@@ -261,7 +269,9 @@ export class UpsHandler {
|
||||
logger.info(`Current Protocol: ${currentProtocol.toUpperCase()}`);
|
||||
logger.dim(' 1) SNMP (network UPS with SNMP agent)');
|
||||
logger.dim(' 2) UPSD/NIS (local NUT server, e.g. USB-connected UPS)');
|
||||
const protocolInput = await prompt(`Select protocol [${currentProtocol === 'upsd' ? '2' : '1'}]: `);
|
||||
const protocolInput = await prompt(
|
||||
`Select protocol [${currentProtocol === 'upsd' ? '2' : '1'}]: `,
|
||||
);
|
||||
const protocolChoice = parseInt(protocolInput, 10);
|
||||
if (protocolChoice === 2) {
|
||||
upsToEdit.protocol = 'upsd';
|
||||
@@ -348,7 +358,7 @@ export class UpsHandler {
|
||||
const errorBoxWidth = 45;
|
||||
logger.logBoxTitle('Configuration Error', errorBoxWidth);
|
||||
logger.logBoxLine('No configuration found.');
|
||||
logger.logBoxLine("Please run 'nupst setup' first to create a configuration.");
|
||||
logger.logBoxLine("Please run 'nupst ups add' first to create a configuration.");
|
||||
logger.logBoxEnd();
|
||||
return;
|
||||
}
|
||||
@@ -359,7 +369,7 @@ export class UpsHandler {
|
||||
// Check if multi-UPS config
|
||||
if (!config.upsDevices || !Array.isArray(config.upsDevices)) {
|
||||
logger.error('Legacy single-UPS configuration detected. Cannot delete UPS.');
|
||||
logger.log('Use "nupst add" to migrate to multi-UPS configuration format first.');
|
||||
logger.log('Use "nupst ups add" to migrate to multi-UPS configuration format first.');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -527,7 +537,7 @@ export class UpsHandler {
|
||||
const errorBoxWidth = 45;
|
||||
logger.logBoxTitle('Configuration Error', errorBoxWidth);
|
||||
logger.logBoxLine('No configuration found.');
|
||||
logger.logBoxLine("Please run 'nupst setup' first to create a configuration.");
|
||||
logger.logBoxLine("Please run 'nupst ups add' first to create a configuration.");
|
||||
logger.logBoxEnd();
|
||||
return;
|
||||
}
|
||||
@@ -624,7 +634,9 @@ export class UpsHandler {
|
||||
logger.logBoxLine(
|
||||
` Battery Capacity: ${snmpConfig.customOIDs.BATTERY_CAPACITY || 'Not set'}`,
|
||||
);
|
||||
logger.logBoxLine(` Battery Runtime: ${snmpConfig.customOIDs.BATTERY_RUNTIME || 'Not set'}`);
|
||||
logger.logBoxLine(
|
||||
` Battery Runtime: ${snmpConfig.customOIDs.BATTERY_RUNTIME || 'Not set'}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -650,7 +662,9 @@ export class UpsHandler {
|
||||
const upsId = isUpsConfig ? (config as IUpsConfig).id : 'default';
|
||||
const upsName = isUpsConfig ? (config as IUpsConfig).name : 'Default UPS';
|
||||
const protocol = isUpsConfig ? ((config as IUpsConfig).protocol || 'snmp') : 'snmp';
|
||||
logger.log(`\nTesting connection to UPS: ${upsName} (${upsId}) via ${protocol.toUpperCase()}...`);
|
||||
logger.log(
|
||||
`\nTesting connection to UPS: ${upsName} (${upsId}) via ${protocol.toUpperCase()}...`,
|
||||
);
|
||||
|
||||
try {
|
||||
let status: ISnmpUpsStatus;
|
||||
@@ -691,7 +705,9 @@ export class UpsHandler {
|
||||
logger.logBoxTitle(`Connection Failed: ${upsName}`, errorBoxWidth);
|
||||
logger.logBoxLine(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
||||
logger.logBoxEnd();
|
||||
logger.log("\nPlease check your settings and run 'nupst edit' to reconfigure this UPS.");
|
||||
logger.log(
|
||||
`\nPlease check your settings and run 'nupst ups edit ${upsId}' to reconfigure this UPS.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1239,7 +1255,8 @@ export class UpsHandler {
|
||||
// Common Proxmox settings (both modes)
|
||||
const excludeInput = await prompt('VM/CT IDs to exclude (comma-separated, or empty): ');
|
||||
if (excludeInput.trim()) {
|
||||
action.proxmoxExcludeIds = excludeInput.split(',').map((s) => parseInt(s.trim(), 10)).filter((n) => !isNaN(n));
|
||||
action.proxmoxExcludeIds = excludeInput.split(',').map((s) => parseInt(s.trim(), 10))
|
||||
.filter((n) => !isNaN(n));
|
||||
}
|
||||
|
||||
const timeoutInput = await prompt('VM shutdown timeout in seconds [120]: ');
|
||||
@@ -1248,7 +1265,7 @@ export class UpsHandler {
|
||||
action.proxmoxStopTimeout = stopTimeout;
|
||||
}
|
||||
|
||||
const forceInput = await prompt('Force-stop VMs that don\'t shut down in time? (Y/n): ');
|
||||
const forceInput = await prompt("Force-stop VMs that don't shut down in time? (Y/n): ");
|
||||
action.proxmoxForceStop = forceInput.toLowerCase() !== 'n';
|
||||
|
||||
logger.log('');
|
||||
|
||||
Reference in New Issue
Block a user