diff --git a/changelog.md b/changelog.md index 1be9b4b..6ea29f9 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2025-03-26 - 2.6.16 - fix(cli) +Improve CLI logging consistency by replacing direct console output with unified logger calls. + +- Replaced console.log and console.error with logger.log and logger.error in CLI commands +- Standardized debug, error, and status messages using logger's logbox utilities +- Enhanced consistency of log output throughout the ts/cli.ts file + ## 2025-03-26 - 2.6.15 - fix(logger) Replace direct console logging with unified logger interface for consistent formatting diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index d54cffb..50c05ac 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/nupst', - version: '2.6.15', + version: '2.6.16', description: 'Node.js UPS Shutdown Tool for SNMP-enabled UPS devices' } diff --git a/ts/cli.ts b/ts/cli.ts index 297d65c..d331ecd 100644 --- a/ts/cli.ts +++ b/ts/cli.ts @@ -27,7 +27,7 @@ export class NupstCli { // Extract debug flag from any position const debugOptions = this.extractDebugOptions(args); if (debugOptions.debugMode) { - console.log('Debug mode enabled'); + logger.log('Debug mode enabled'); // Enable debug mode in the SNMP client this.nupst.getSnmp().enableDebug(); } @@ -120,7 +120,7 @@ export class NupstCli { private async enable(): Promise { this.checkRootAccess('This command must be run as root.'); await this.nupst.getSystemd().install(); - console.log('NUPST service has been installed. Use "nupst start" to start the service.'); + logger.log('NUPST service has been installed. Use "nupst start" to start the service.'); } /** @@ -128,12 +128,12 @@ export class NupstCli { * @param debugMode Whether to enable debug mode */ private async daemonStart(debugMode: boolean = false): Promise { - console.log('Starting NUPST daemon...'); + logger.log('Starting NUPST daemon...'); try { // Enable debug mode for SNMP if requested if (debugMode) { this.nupst.getSnmp().enableDebug(); - console.log('SNMP debug mode enabled'); + logger.log('SNMP debug mode enabled'); } await this.nupst.getDaemon().start(); } catch (error) { @@ -149,7 +149,7 @@ export class NupstCli { try { // Use exec with spawn to properly follow logs in real-time const { spawn } = await import('child_process'); - console.log('Tailing nupst service logs (Ctrl+C to exit)...\n'); + logger.log('Tailing nupst service logs (Ctrl+C to exit)...\n'); const journalctl = spawn('journalctl', ['-u', 'nupst.service', '-n', '50', '-f'], { stdio: ['ignore', 'inherit', 'inherit'], @@ -166,7 +166,7 @@ export class NupstCli { journalctl.on('exit', () => resolve()); }); } catch (error) { - console.error('Failed to retrieve logs:', error); + logger.error(`Failed to retrieve logs: ${error}`); process.exit(1); } } @@ -213,7 +213,7 @@ export class NupstCli { */ private checkRootAccess(errorMessage: string): void { if (process.getuid && process.getuid() !== 0) { - console.error(errorMessage); + logger.error(errorMessage); process.exit(1); } } @@ -226,19 +226,21 @@ export class NupstCli { try { // Debug mode is now handled in parseAndExecute if (debugMode) { - console.log('┌─ Debug Mode ─────────────────────────────┐'); - console.log('│ SNMP debugging enabled - detailed logs will be shown'); - console.log('└──────────────────────────────────────────┘'); + const boxWidth = 45; + logger.logBoxTitle('Debug Mode', boxWidth); + logger.logBoxLine('SNMP debugging enabled - detailed logs will be shown'); + logger.logBoxEnd(); } // Try to load the configuration try { await this.nupst.getDaemon().loadConfig(); } catch (error) { - console.error('┌─ Configuration Error ─────────────────────┐'); - console.error('│ No configuration found.'); - console.error("│ Please run 'nupst setup' first to create a configuration."); - console.error('└──────────────────────────────────────────┘'); + 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.logBoxEnd(); return; } @@ -248,7 +250,7 @@ export class NupstCli { this.displayTestConfig(config); await this.testConnection(config); } catch (error) { - console.error(`Test failed: ${error.message}`); + logger.error(`Test failed: ${error.message}`); } } @@ -257,44 +259,45 @@ export class NupstCli { * @param config Current configuration */ private displayTestConfig(config: any): void { - console.log('┌─ Testing Configuration ─────────────────────┐'); - console.log('│ SNMP Settings:'); - console.log(`│ Host: ${config.snmp.host}`); - console.log(`│ Port: ${config.snmp.port}`); - console.log(`│ Version: ${config.snmp.version}`); - console.log(`│ UPS Model: ${config.snmp.upsModel || 'cyberpower'}`); + const boxWidth = 45; + logger.logBoxTitle('Testing Configuration', boxWidth); + logger.logBoxLine('SNMP Settings:'); + logger.logBoxLine(` Host: ${config.snmp.host}`); + logger.logBoxLine(` Port: ${config.snmp.port}`); + logger.logBoxLine(` Version: ${config.snmp.version}`); + logger.logBoxLine(` UPS Model: ${config.snmp.upsModel || 'cyberpower'}`); if (config.snmp.version === 1 || config.snmp.version === 2) { - console.log(`│ Community: ${config.snmp.community}`); + logger.logBoxLine(` Community: ${config.snmp.community}`); } else if (config.snmp.version === 3) { - console.log(`│ Security Level: ${config.snmp.securityLevel}`); - console.log(`│ Username: ${config.snmp.username}`); + logger.logBoxLine(` Security Level: ${config.snmp.securityLevel}`); + logger.logBoxLine(` Username: ${config.snmp.username}`); // Show auth and privacy details based on security level if (config.snmp.securityLevel === 'authNoPriv' || config.snmp.securityLevel === 'authPriv') { - console.log(`│ Auth Protocol: ${config.snmp.authProtocol || 'None'}`); + logger.logBoxLine(` Auth Protocol: ${config.snmp.authProtocol || 'None'}`); } if (config.snmp.securityLevel === 'authPriv') { - console.log(`│ Privacy Protocol: ${config.snmp.privProtocol || 'None'}`); + logger.logBoxLine(` Privacy Protocol: ${config.snmp.privProtocol || 'None'}`); } // Show timeout value - console.log(`│ Timeout: ${config.snmp.timeout / 1000} seconds`); + logger.logBoxLine(` Timeout: ${config.snmp.timeout / 1000} seconds`); } // Show OIDs if custom model is selected if (config.snmp.upsModel === 'custom' && config.snmp.customOIDs) { - console.log('│ Custom OIDs:'); - console.log(`│ Power Status: ${config.snmp.customOIDs.POWER_STATUS || 'Not set'}`); - console.log(`│ Battery Capacity: ${config.snmp.customOIDs.BATTERY_CAPACITY || 'Not set'}`); - console.log(`│ Battery Runtime: ${config.snmp.customOIDs.BATTERY_RUNTIME || 'Not set'}`); + logger.logBoxLine('Custom OIDs:'); + logger.logBoxLine(` Power Status: ${config.snmp.customOIDs.POWER_STATUS || 'Not set'}`); + logger.logBoxLine(` Battery Capacity: ${config.snmp.customOIDs.BATTERY_CAPACITY || 'Not set'}`); + logger.logBoxLine(` Battery Runtime: ${config.snmp.customOIDs.BATTERY_RUNTIME || 'Not set'}`); } - console.log('│ Thresholds:'); - console.log(`│ Battery: ${config.thresholds.battery}%`); - console.log(`│ Runtime: ${config.thresholds.runtime} minutes`); - console.log(`│ Check Interval: ${config.checkInterval / 1000} seconds`); - console.log('└──────────────────────────────────────────┘'); + logger.logBoxLine('Thresholds:'); + logger.logBoxLine(` Battery: ${config.thresholds.battery}%`); + logger.logBoxLine(` Runtime: ${config.thresholds.runtime} minutes`); + logger.logBoxLine(`Check Interval: ${config.checkInterval / 1000} seconds`); + logger.logBoxEnd(); } /** @@ -302,7 +305,7 @@ export class NupstCli { * @param config Current configuration */ private async testConnection(config: any): Promise { - console.log('\nTesting connection to UPS...'); + logger.log('\nTesting connection to UPS...'); try { // Create a test config with a short timeout const testConfig = { @@ -312,22 +315,24 @@ export class NupstCli { const status = await this.nupst.getSnmp().getUpsStatus(testConfig); - console.log('┌─ Connection Successful! ─────────────────┐'); - console.log('│ UPS Status:'); - console.log(`│ Power Status: ${status.powerStatus}`); - console.log(`│ Battery Capacity: ${status.batteryCapacity}%`); - console.log(`│ Runtime Remaining: ${status.batteryRuntime} minutes`); - console.log('└──────────────────────────────────────────┘'); + const boxWidth = 45; + logger.logBoxTitle('Connection Successful!', boxWidth); + logger.logBoxLine('UPS Status:'); + logger.logBoxLine(` Power Status: ${status.powerStatus}`); + logger.logBoxLine(` Battery Capacity: ${status.batteryCapacity}%`); + logger.logBoxLine(` Runtime Remaining: ${status.batteryRuntime} minutes`); + logger.logBoxEnd(); // Check status against thresholds if on battery if (status.powerStatus === 'onBattery') { this.analyzeThresholds(status, config); } } catch (error) { - console.error('┌─ Connection Failed! ───────────────────────┐'); - console.error(`│ Error: ${error.message}`); - console.error('└──────────────────────────────────────────┘'); - console.log("\nPlease check your settings and run 'nupst setup' to reconfigure."); + const errorBoxWidth = 45; + logger.logBoxTitle('Connection Failed!', errorBoxWidth); + logger.logBoxLine(`Error: ${error.message}`); + logger.logBoxEnd(); + logger.log("\nPlease check your settings and run 'nupst setup' to reconfigure."); } } @@ -337,42 +342,43 @@ export class NupstCli { * @param config Current configuration */ private analyzeThresholds(status: any, config: any): void { - console.log('┌─ Threshold Analysis ───────────────────────┐'); + const boxWidth = 45; + logger.logBoxTitle('Threshold Analysis', boxWidth); if (status.batteryCapacity < config.thresholds.battery) { - console.log('│ ⚠️ WARNING: Battery capacity below threshold'); - console.log( - `│ Current: ${status.batteryCapacity}% | Threshold: ${config.thresholds.battery}%` + logger.logBoxLine('⚠️ WARNING: Battery capacity below threshold'); + logger.logBoxLine( + ` Current: ${status.batteryCapacity}% | Threshold: ${config.thresholds.battery}%` ); - console.log('│ System would initiate shutdown'); + logger.logBoxLine(' System would initiate shutdown'); } else { - console.log('│ ✓ Battery capacity above threshold'); - console.log( - `│ Current: ${status.batteryCapacity}% | Threshold: ${config.thresholds.battery}%` + logger.logBoxLine('✓ Battery capacity above threshold'); + logger.logBoxLine( + ` Current: ${status.batteryCapacity}% | Threshold: ${config.thresholds.battery}%` ); } if (status.batteryRuntime < config.thresholds.runtime) { - console.log('│ ⚠️ WARNING: Runtime below threshold'); - console.log( - `│ Current: ${status.batteryRuntime} min | Threshold: ${config.thresholds.runtime} min` + logger.logBoxLine('⚠️ WARNING: Runtime below threshold'); + logger.logBoxLine( + ` Current: ${status.batteryRuntime} min | Threshold: ${config.thresholds.runtime} min` ); - console.log('│ System would initiate shutdown'); + logger.logBoxLine(' System would initiate shutdown'); } else { - console.log('│ ✓ Runtime above threshold'); - console.log( - `│ Current: ${status.batteryRuntime} min | Threshold: ${config.thresholds.runtime} min` + logger.logBoxLine('✓ Runtime above threshold'); + logger.logBoxLine( + ` Current: ${status.batteryRuntime} min | Threshold: ${config.thresholds.runtime} min` ); } - console.log('└──────────────────────────────────────────┘'); + logger.logBoxEnd(); } /** * Display help message */ private showHelp(): void { - console.log(` + logger.log(` NUPST - Node.js UPS Shutdown Tool Usage: @@ -406,8 +412,9 @@ Options: 'This command must be run as root to update NUPST and refresh the systemd service.' ); - console.log('┌─ NUPST Update Process ──────────────────┐'); - console.log('│ Updating NUPST from repository...'); + const boxWidth = 45; + logger.logBoxTitle('NUPST Update Process', boxWidth); + logger.logBoxLine('Updating NUPST from repository...'); // Determine the installation directory (assuming it's either /opt/nupst or the current directory) const { existsSync } = await import('fs'); @@ -417,26 +424,26 @@ Options: // If not installed in /opt/nupst, use the current directory const { dirname } = await import('path'); installDir = dirname(dirname(process.argv[1])); // Go up two levels from the executable - console.log(`│ Using local installation directory: ${installDir}`); + logger.logBoxLine(`Using local installation directory: ${installDir}`); } try { // 1. Update the repository - console.log('│ Pulling latest changes from git repository...'); + logger.logBoxLine('Pulling latest changes from git repository...'); execSync(`cd ${installDir} && git fetch origin && git reset --hard origin/main`, { stdio: 'pipe', }); // 2. Run the install.sh script - console.log('│ Running install.sh to update NUPST...'); + logger.logBoxLine('Running install.sh to update NUPST...'); execSync(`cd ${installDir} && bash ./install.sh`, { stdio: 'pipe' }); // 3. Run the setup.sh script with force flag to update Node.js and dependencies - console.log('│ Running setup.sh to update Node.js and dependencies...'); + logger.logBoxLine('Running setup.sh to update Node.js and dependencies...'); execSync(`cd ${installDir} && bash ./setup.sh --force`, { stdio: 'pipe' }); // 4. Refresh the systemd service - console.log('│ Refreshing systemd service...'); + logger.logBoxLine('Refreshing systemd service...'); // First check if service exists let serviceExists = false; @@ -453,34 +460,34 @@ Options: const isRunning = execSync('systemctl is-active nupst.service || true').toString().trim() === 'active'; if (isRunning) { - console.log('│ Stopping nupst service...'); + logger.logBoxLine('Stopping nupst service...'); execSync('systemctl stop nupst.service'); } // Reinstall the service - console.log('│ Reinstalling systemd service...'); + logger.logBoxLine('Reinstalling systemd service...'); await this.nupst.getSystemd().install(); // Restart the service if it was running if (isRunning) { - console.log('│ Restarting nupst service...'); + logger.logBoxLine('Restarting nupst service...'); execSync('systemctl start nupst.service'); } } else { - console.log('│ Systemd service not installed, skipping service refresh.'); - console.log('│ Run "nupst enable" to install the service.'); + logger.logBoxLine('Systemd service not installed, skipping service refresh.'); + logger.logBoxLine('Run "nupst enable" to install the service.'); } - console.log('│ Update completed successfully!'); - console.log('└─────────────────────────────────────────────┘'); + logger.logBoxLine('Update completed successfully!'); + logger.logBoxEnd(); } catch (error) { - console.error('│ Error during update process:'); - console.error(`│ ${error.message}`); - console.error('└─────────────────────────────────────────────┘'); + logger.logBoxLine('Error during update process:'); + logger.logBoxLine(`${error.message}`); + logger.logBoxEnd(); process.exit(1); } } catch (error) { - console.error(`Update failed: ${error.message}`); + logger.error(`Update failed: ${error.message}`); process.exit(1); } } @@ -513,7 +520,7 @@ Options: rl.close(); } } catch (error) { - console.error('Setup error:', error.message); + logger.error(`Setup error: ${error.message}`); } } @@ -522,9 +529,9 @@ Options: * @param prompt Function to prompt for user input */ private async runSetupProcess(prompt: (question: string) => Promise): Promise { - console.log('\nNUPST Interactive Setup'); - console.log('======================\n'); - console.log('This will guide you through configuring your UPS SNMP settings.\n'); + logger.log('\nNUPST Interactive Setup'); + logger.log('======================\n'); + logger.log('This will guide you through configuring your UPS SNMP settings.\n'); // Try to load existing config if available let config; @@ -534,7 +541,7 @@ Options: } catch (error) { // If config doesn't exist, use default config config = this.nupst.getDaemon().getConfig(); - console.log('No existing configuration found. Creating a new configuration.'); + logger.log('No existing configuration found. Creating a new configuration.'); } // Gather SNMP settings @@ -557,7 +564,7 @@ Options: // Check if service is running and restart it if needed await this.restartServiceIfRunning(); - console.log('\nSetup complete!'); + logger.log('\nSetup complete!'); await this.optionallyEnableService(prompt); } @@ -860,15 +867,18 @@ Options: * @param config Current configuration */ private displayConfigSummary(config: any): void { - console.log('\n┌─ Configuration Summary ─────────────────┐'); - console.log(`│ SNMP Host: ${config.snmp.host}:${config.snmp.port}`); - console.log(`│ SNMP Version: ${config.snmp.version}`); - console.log(`│ UPS Model: ${config.snmp.upsModel}`); - console.log( - `│ Thresholds: ${config.thresholds.battery}% battery, ${config.thresholds.runtime} min runtime` + const boxWidth = 45; + logger.log(''); + logger.logBoxTitle('Configuration Summary', boxWidth); + logger.logBoxLine(`SNMP Host: ${config.snmp.host}:${config.snmp.port}`); + logger.logBoxLine(`SNMP Version: ${config.snmp.version}`); + logger.logBoxLine(`UPS Model: ${config.snmp.upsModel}`); + logger.logBoxLine( + `Thresholds: ${config.thresholds.battery}% battery, ${config.thresholds.runtime} min runtime` ); - console.log(`│ Check Interval: ${config.checkInterval / 1000} seconds`); - console.log('└──────────────────────────────────────────┘\n'); + logger.logBoxLine(`Check Interval: ${config.checkInterval / 1000} seconds`); + logger.logBoxEnd(); + logger.log(''); } /** @@ -884,7 +894,7 @@ Options: 'Would you like to test the connection to your UPS? (y/N): ' ); if (testConnection.toLowerCase() === 'y') { - console.log('\nTesting connection to UPS...'); + logger.log('\nTesting connection to UPS...'); try { // Create a test config with a short timeout const testConfig = { @@ -893,17 +903,21 @@ Options: }; const status = await this.nupst.getSnmp().getUpsStatus(testConfig); - console.log('\n┌─ Connection Successful! ─────────────────┐'); - console.log('│ UPS Status:'); - console.log(`│ ✓ Power Status: ${status.powerStatus}`); - console.log(`│ ✓ Battery Capacity: ${status.batteryCapacity}%`); - console.log(`│ ✓ Runtime Remaining: ${status.batteryRuntime} minutes`); - console.log('└──────────────────────────────────────────┘'); + const boxWidth = 45; + logger.log(''); + logger.logBoxTitle('Connection Successful!', boxWidth); + logger.logBoxLine('UPS Status:'); + logger.logBoxLine(`✓ Power Status: ${status.powerStatus}`); + logger.logBoxLine(`✓ Battery Capacity: ${status.batteryCapacity}%`); + logger.logBoxLine(`✓ Runtime Remaining: ${status.batteryRuntime} minutes`); + logger.logBoxEnd(); } catch (error) { - console.error('\n┌─ Connection Failed! ───────────────────────┐'); - console.error('│ Error: ' + error.message); - console.error('└──────────────────────────────────────────┘'); - console.log('\nPlease check your settings and try again.'); + const errorBoxWidth = 45; + logger.log(''); + logger.logBoxTitle('Connection Failed!', errorBoxWidth); + logger.logBoxLine(`Error: ${error.message}`); + logger.logBoxEnd(); + logger.log('\nPlease check your settings and try again.'); } } } @@ -920,27 +934,28 @@ Options: if (isActive) { // Service is running, restart it - console.log('┌─ Service Update ──────────────────────────┐'); - console.log('│ Configuration has changed.'); - console.log('│ Restarting NUPST service to apply changes...'); + const boxWidth = 45; + logger.logBoxTitle('Service Update', boxWidth); + logger.logBoxLine('Configuration has changed.'); + logger.logBoxLine('Restarting NUPST service to apply changes...'); try { if (process.getuid && process.getuid() === 0) { // We have root access, restart directly execSync('systemctl restart nupst.service'); - console.log('│ Service restarted successfully.'); + logger.logBoxLine('Service restarted successfully.'); } else { // No root access, show instructions - console.log('│ Please restart the service with:'); - console.log('│ sudo systemctl restart nupst.service'); + logger.logBoxLine('Please restart the service with:'); + logger.logBoxLine(' sudo systemctl restart nupst.service'); } } catch (error) { - console.log(`│ Error restarting service: ${error.message}`); - console.log('│ You may need to restart the service manually:'); - console.log('│ sudo systemctl restart nupst.service'); + logger.logBoxLine(`Error restarting service: ${error.message}`); + logger.logBoxLine('You may need to restart the service manually:'); + logger.logBoxLine(' sudo systemctl restart nupst.service'); } - console.log('└───────────────────────────────────────────┘'); + logger.logBoxEnd(); } } catch (error) { // Ignore errors checking service status @@ -991,69 +1006,71 @@ Options: try { await this.nupst.getDaemon().loadConfig(); } catch (error) { - console.error('┌─ Configuration Error ─────────────────────┐'); - console.error('│ No configuration found.'); - console.error("│ Please run 'nupst setup' first to create a configuration."); - console.error('└──────────────────────────────────────────┘'); + 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.logBoxEnd(); return; } // Get current configuration const config = this.nupst.getDaemon().getConfig(); - console.log('┌─ NUPST Configuration ──────────────────────┐'); + const boxWidth = 50; + logger.logBoxTitle('NUPST Configuration', boxWidth); // SNMP Settings - console.log('│ SNMP Settings:'); - console.log(`│ Host: ${config.snmp.host}`); - console.log(`│ Port: ${config.snmp.port}`); - console.log(`│ Version: ${config.snmp.version}`); - console.log(`│ UPS Model: ${config.snmp.upsModel || 'cyberpower'}`); + logger.logBoxLine('SNMP Settings:'); + logger.logBoxLine(` Host: ${config.snmp.host}`); + logger.logBoxLine(` Port: ${config.snmp.port}`); + logger.logBoxLine(` Version: ${config.snmp.version}`); + logger.logBoxLine(` UPS Model: ${config.snmp.upsModel || 'cyberpower'}`); if (config.snmp.version === 1 || config.snmp.version === 2) { - console.log(`│ Community: ${config.snmp.community}`); + logger.logBoxLine(` Community: ${config.snmp.community}`); } else if (config.snmp.version === 3) { - console.log(`│ Security Level: ${config.snmp.securityLevel}`); - console.log(`│ Username: ${config.snmp.username}`); + logger.logBoxLine(` Security Level: ${config.snmp.securityLevel}`); + logger.logBoxLine(` Username: ${config.snmp.username}`); // Show auth and privacy details based on security level if ( config.snmp.securityLevel === 'authNoPriv' || config.snmp.securityLevel === 'authPriv' ) { - console.log(`│ Auth Protocol: ${config.snmp.authProtocol || 'None'}`); + logger.logBoxLine(` Auth Protocol: ${config.snmp.authProtocol || 'None'}`); } if (config.snmp.securityLevel === 'authPriv') { - console.log(`│ Privacy Protocol: ${config.snmp.privProtocol || 'None'}`); + logger.logBoxLine(` Privacy Protocol: ${config.snmp.privProtocol || 'None'}`); } // Show timeout value - console.log(`│ Timeout: ${config.snmp.timeout / 1000} seconds`); + logger.logBoxLine(` Timeout: ${config.snmp.timeout / 1000} seconds`); } // Show OIDs if custom model is selected if (config.snmp.upsModel === 'custom' && config.snmp.customOIDs) { - console.log('│ Custom OIDs:'); - console.log(`│ Power Status: ${config.snmp.customOIDs.POWER_STATUS || 'Not set'}`); - console.log( - `│ Battery Capacity: ${config.snmp.customOIDs.BATTERY_CAPACITY || 'Not set'}` + logger.logBoxLine('Custom OIDs:'); + logger.logBoxLine(` Power Status: ${config.snmp.customOIDs.POWER_STATUS || 'Not set'}`); + logger.logBoxLine( + ` Battery Capacity: ${config.snmp.customOIDs.BATTERY_CAPACITY || 'Not set'}` ); - console.log(`│ Battery Runtime: ${config.snmp.customOIDs.BATTERY_RUNTIME || 'Not set'}`); + logger.logBoxLine(` Battery Runtime: ${config.snmp.customOIDs.BATTERY_RUNTIME || 'Not set'}`); } // Thresholds - console.log('│ Thresholds:'); - console.log(`│ Battery: ${config.thresholds.battery}%`); - console.log(`│ Runtime: ${config.thresholds.runtime} minutes`); - console.log(`│ Check Interval: ${config.checkInterval / 1000} seconds`); + logger.logBoxLine('Thresholds:'); + logger.logBoxLine(` Battery: ${config.thresholds.battery}%`); + logger.logBoxLine(` Runtime: ${config.thresholds.runtime} minutes`); + logger.logBoxLine(`Check Interval: ${config.checkInterval / 1000} seconds`); // Configuration file location - console.log('│'); - console.log('│ Configuration File Location:'); - console.log('│ /etc/nupst/config.json'); + logger.logBoxLine(''); + logger.logBoxLine('Configuration File Location:'); + logger.logBoxLine(' /etc/nupst/config.json'); - console.log('└──────────────────────────────────────────┘'); + logger.logBoxEnd(); // Show service status try { @@ -1062,15 +1079,16 @@ Options: const isEnabled = execSync('systemctl is-enabled nupst.service || true').toString().trim() === 'enabled'; - console.log('┌─ Service Status ─────────────────────────┐'); - console.log(`│ Service Active: ${isActive ? 'Yes' : 'No'}`); - console.log(`│ Service Enabled: ${isEnabled ? 'Yes' : 'No'}`); - console.log('└──────────────────────────────────────────┘'); + const statusBoxWidth = 45; + logger.logBoxTitle('Service Status', statusBoxWidth); + logger.logBoxLine(`Service Active: ${isActive ? 'Yes' : 'No'}`); + logger.logBoxLine(`Service Enabled: ${isEnabled ? 'Yes' : 'No'}`); + logger.logBoxEnd(); } catch (error) { // Ignore errors checking service status } } catch (error) { - console.error(`Failed to display configuration: ${error.message}`); + logger.error(`Failed to display configuration: ${error.message}`); } }