fix(tooling): better oids and more power metrics. Also new json httpServer feature support.
This commit is contained in:
55
ts/daemon.ts
55
ts/daemon.ts
@@ -10,6 +10,7 @@ import { MigrationRunner } from './migrations/index.ts';
|
||||
import { theme, symbols, getBatteryColor, getRuntimeColor, formatPowerStatus } from './colors.ts';
|
||||
import type { IActionConfig } from './actions/base-action.ts';
|
||||
import { ActionManager, type IActionContext, type TPowerStatus } from './actions/index.ts';
|
||||
import { NupstHttpServer } from './http-server.ts';
|
||||
|
||||
const execAsync = promisify(exec);
|
||||
const execFileAsync = promisify(execFile);
|
||||
@@ -46,6 +47,20 @@ export interface IGroupConfig {
|
||||
actions?: IActionConfig[];
|
||||
}
|
||||
|
||||
/**
|
||||
* HTTP Server configuration interface
|
||||
*/
|
||||
export interface IHttpServerConfig {
|
||||
/** Whether HTTP server is enabled */
|
||||
enabled: boolean;
|
||||
/** Port to listen on */
|
||||
port: number;
|
||||
/** URL path for the endpoint */
|
||||
path: string;
|
||||
/** Authentication token */
|
||||
authToken: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration interface for the daemon
|
||||
*/
|
||||
@@ -58,6 +73,8 @@ export interface INupstConfig {
|
||||
groups: IGroupConfig[];
|
||||
/** Check interval in milliseconds */
|
||||
checkInterval: number;
|
||||
/** HTTP Server configuration */
|
||||
httpServer?: IHttpServerConfig;
|
||||
|
||||
// Legacy fields for backward compatibility (will be migrated away)
|
||||
/** UPS list (v3 format - legacy) */
|
||||
@@ -82,6 +99,10 @@ export interface IUpsStatus {
|
||||
powerStatus: 'online' | 'onBattery' | 'unknown';
|
||||
batteryCapacity: number;
|
||||
batteryRuntime: number;
|
||||
outputLoad: number; // Load percentage (0-100%)
|
||||
outputPower: number; // Power in watts
|
||||
outputVoltage: number; // Voltage in volts
|
||||
outputCurrent: number; // Current in amps
|
||||
lastStatusChange: number;
|
||||
lastCheckTime: number;
|
||||
}
|
||||
@@ -139,6 +160,7 @@ export class NupstDaemon {
|
||||
private snmp: NupstSnmp;
|
||||
private isRunning: boolean = false;
|
||||
private upsStatus: Map<string, IUpsStatus> = new Map();
|
||||
private httpServer?: NupstHttpServer;
|
||||
|
||||
/**
|
||||
* Create a new daemon instance with the given SNMP manager
|
||||
@@ -278,6 +300,21 @@ export class NupstDaemon {
|
||||
// Initialize UPS status tracking
|
||||
this.initializeUpsStatus();
|
||||
|
||||
// Start HTTP server if configured
|
||||
if (this.config.httpServer?.enabled && this.config.httpServer.authToken) {
|
||||
try {
|
||||
this.httpServer = new NupstHttpServer(
|
||||
this.config.httpServer.port,
|
||||
this.config.httpServer.path,
|
||||
this.config.httpServer.authToken,
|
||||
() => this.upsStatus
|
||||
);
|
||||
this.httpServer.start();
|
||||
} catch (error) {
|
||||
logger.error(`Failed to start HTTP server: ${error instanceof Error ? error.message : String(error)}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Start UPS monitoring
|
||||
this.isRunning = true;
|
||||
await this.monitor();
|
||||
@@ -304,6 +341,10 @@ export class NupstDaemon {
|
||||
powerStatus: 'unknown',
|
||||
batteryCapacity: 100,
|
||||
batteryRuntime: 999, // High value as default
|
||||
outputLoad: 0,
|
||||
outputPower: 0,
|
||||
outputVoltage: 0,
|
||||
outputCurrent: 0,
|
||||
lastStatusChange: Date.now(),
|
||||
lastCheckTime: 0,
|
||||
});
|
||||
@@ -377,6 +418,12 @@ export class NupstDaemon {
|
||||
*/
|
||||
public stop(): void {
|
||||
logger.log('Stopping NUPST daemon...');
|
||||
|
||||
// Stop HTTP server if running
|
||||
if (this.httpServer) {
|
||||
this.httpServer.stop();
|
||||
}
|
||||
|
||||
this.isRunning = false;
|
||||
}
|
||||
|
||||
@@ -437,6 +484,10 @@ export class NupstDaemon {
|
||||
powerStatus: 'unknown',
|
||||
batteryCapacity: 100,
|
||||
batteryRuntime: 999,
|
||||
outputLoad: 0,
|
||||
outputPower: 0,
|
||||
outputVoltage: 0,
|
||||
outputCurrent: 0,
|
||||
lastStatusChange: Date.now(),
|
||||
lastCheckTime: 0,
|
||||
});
|
||||
@@ -456,6 +507,10 @@ export class NupstDaemon {
|
||||
powerStatus: status.powerStatus,
|
||||
batteryCapacity: status.batteryCapacity,
|
||||
batteryRuntime: status.batteryRuntime,
|
||||
outputLoad: status.outputLoad,
|
||||
outputPower: status.outputPower,
|
||||
outputVoltage: status.outputVoltage,
|
||||
outputCurrent: status.outputCurrent,
|
||||
lastCheckTime: currentTime,
|
||||
lastStatusChange: currentStatus?.lastStatusChange || currentTime,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user