homebridge-gira-client
Version:
Homebridge Plugin für Gira Homeserver 4 mit automatischer Geräteerkennung über IoT REST API
145 lines • 4.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Timer = exports.ExtendedLogger = void 0;
class ExtendedLogger {
constructor(homebridgeLogger, debugMode = false) {
this.homebridgeLogger = homebridgeLogger;
this.debugEnabled = false;
this.logBuffer = [];
this.maxBufferSize = 1000;
this.debugEnabled = debugMode;
}
info(message, ...args) {
this.homebridgeLogger.info(message, ...args);
this.addToBuffer('info', message, args);
}
warn(message, ...args) {
this.homebridgeLogger.warn(message, ...args);
this.addToBuffer('warn', message, args);
}
error(message, ...args) {
this.homebridgeLogger.error(message, ...args);
this.addToBuffer('error', message, args);
}
debug(message, ...args) {
if (this.debugEnabled) {
this.homebridgeLogger.debug(message, ...args);
}
this.addToBuffer('debug', message, args);
}
success(message, ...args) {
this.homebridgeLogger.info(`✓ ${message}`, ...args);
this.addToBuffer('success', message, args);
}
setDebugEnabled(enabled) {
this.debugEnabled = enabled;
this.debug(`Debug mode ${enabled ? 'enabled' : 'disabled'}`);
}
addToBuffer(level, message, args) {
const entry = {
timestamp: new Date(),
level,
message,
args,
};
this.logBuffer.push(entry);
if (this.logBuffer.length > this.maxBufferSize) {
this.logBuffer.shift();
}
}
getRecentLogs(count = 100) {
return this.logBuffer.slice(-count);
}
getLogsByLevel(level) {
return this.logBuffer.filter(entry => entry.level === level);
}
clearBuffer() {
this.logBuffer = [];
}
logDeviceOperation(deviceName, operation, success, details) {
const message = `Device ${deviceName}: ${operation}`;
if (success) {
this.success(message);
}
else {
this.error(message);
}
if (details && this.debugEnabled) {
this.debug(`Operation details: ${JSON.stringify(details, null, 2)}`);
}
}
logConnectionEvent(event, details) {
switch (event) {
case 'connecting':
this.info('Connecting to Gira Homeserver...');
break;
case 'connected':
this.success('Successfully connected to Gira Homeserver');
break;
case 'disconnected':
this.warn('Disconnected from Gira Homeserver');
break;
case 'reconnecting':
this.info('Attempting to reconnect...');
break;
case 'authenticated':
this.success('Successfully authenticated with Gira Homeserver');
break;
case 'auth_failed':
this.error('Authentication failed');
break;
}
if (details && this.debugEnabled) {
this.debug(`Connection event details: ${JSON.stringify(details, null, 2)}`);
}
}
logDiscoveryEvent(event, count, details) {
switch (event) {
case 'started':
this.info('Starting device discovery...');
break;
case 'completed':
this.success(`Device discovery completed. Found ${count || 0} devices`);
break;
case 'device_found':
this.info(`Found device: ${details?.name || 'Unknown'}`);
break;
case 'device_configured':
this.success(`Configured device: ${details?.name || 'Unknown'}`);
break;
case 'device_error':
this.error(`Error configuring device: ${details?.name || 'Unknown'}`);
break;
}
if (details && this.debugEnabled && !details.name) {
this.debug(`Discovery event details: ${JSON.stringify(details, null, 2)}`);
}
}
logPerformanceMetric(operation, duration, success) {
const message = `${operation} took ${duration}ms`;
if (success) {
this.debug(message);
}
else {
this.warn(`${message} (failed)`);
}
}
createTimer(operation) {
return new Timer(operation, this);
}
}
exports.ExtendedLogger = ExtendedLogger;
class Timer {
constructor(operation, logger) {
this.operation = operation;
this.logger = logger;
this.startTime = Date.now();
}
end(success = true) {
const duration = Date.now() - this.startTime;
this.logger.logPerformanceMetric(this.operation, duration, success);
return duration;
}
}
exports.Timer = Timer;
//# sourceMappingURL=logger.js.map