traffic-monitor-mqtt
Version:
Zentrales Traffic Monitoring via MQTT für Node.js Anwendungen
74 lines (73 loc) • 2.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomEventMonitor = void 0;
const debug_1 = __importDefault(require("debug"));
const log = (0, debug_1.default)('traffic-monitor:custom-event');
class CustomEventMonitor {
constructor(eventBatcher, clientConfig) {
this.eventBatcher = eventBatcher;
this.clientConfig = clientConfig;
this.events = new Map();
}
/**
* Registriert ein neues Custom Event
*/
registerEvent(config) {
if (this.events.has(config.name)) {
throw new Error(`Event mit dem Namen ${config.name} existiert bereits`);
}
this.events.set(config.name, config);
log(`Neues Custom Event registriert: ${config.name}`);
}
/**
* Löst ein registriertes Event aus
*/
async triggerEvent(eventName, data, durationMs) {
const eventConfig = this.events.get(eventName);
if (!eventConfig) {
throw new Error(`Event ${eventName} wurde nicht gefunden`);
}
const event = {
timestamp: new Date().toISOString(),
clientInfo: {
name: this.clientConfig.name,
environment: this.clientConfig.environment,
hostname: this.clientConfig.hostname
},
operationType: `custom:${eventConfig.category}`,
targetSystem: eventConfig.targetSystem || 'custom',
performance: {
executionTimeMs: durationMs || 0,
payloadSizeBytes: data ? JSON.stringify(data).length : 0
},
details: {
eventName: eventConfig.name,
description: eventConfig.description,
tags: eventConfig.tags,
data
}
};
await this.eventBatcher.addEvent(event);
log(`Event ausgelöst: ${eventName}`);
}
/**
* Entfernt ein registriertes Event
*/
unregisterEvent(eventName) {
if (!this.events.has(eventName)) {
throw new Error(`Event ${eventName} wurde nicht gefunden`);
}
this.events.delete(eventName);
log(`Event entfernt: ${eventName}`);
}
/**
* Gibt alle registrierten Events zurück
*/
getRegisteredEvents() {
return Array.from(this.events.values());
}
}
exports.CustomEventMonitor = CustomEventMonitor;