MqttDispatcher/dist/missingeventdetector.js

65 lines
2.7 KiB
JavaScript
Raw Normal View History

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const log = require("./log");
const CallChain = require("./callchain");
const Processor = require("./processor");
2017-08-25 18:13:10 +02:00
const CHECK_PERIOD = 60; // seconds
class ClientEntry {
}
class MissingEventProcessor extends Processor.AProcessor {
constructor() {
super("MissingEventProcessor");
this.clientMap = new Map();
this.timer = setInterval(() => {
this.clientMap.forEach((value, key) => {
let currentTime = new Date().getTime();
let elapsedTime = currentTime - value.lastEvent;
2017-08-28 12:39:53 +02:00
log.info(`MissingEventProcessor: Checking ${key}, elapsed: ${elapsedTime / 1000}, avg. delay: ${value.avgDelay / 1000}`);
2017-08-26 18:56:58 +02:00
if ((value.avgDelay != 0) && (elapsedTime > (value.avgDelay * 3))) {
2017-08-28 12:39:53 +02:00
log.sendAlarmMail(`Missing Event Detected: ${key}, elapsed: ${elapsedTime / 1000}, avg. delay: ${value.avgDelay / 1000}`);
2017-08-26 18:56:58 +02:00
}
});
}, CHECK_PERIOD * 1000);
}
process(message) {
let client = message.metadata.client;
2017-08-28 12:39:53 +02:00
log.info(`MissingEventProcessor: Event for client ${client}`);
let currentTime = new Date().getTime();
if (this.clientMap.has(client)) {
let clientEntry = this.clientMap.get(client);
clientEntry.client = client;
clientEntry.delay = currentTime - clientEntry.lastEvent;
clientEntry.lastEvent = currentTime;
clientEntry.count += 1;
2017-08-25 18:13:10 +02:00
if (clientEntry.count >= 1) {
clientEntry.delaySum += clientEntry.delay;
2017-08-26 18:56:58 +02:00
clientEntry.avgDelay = clientEntry.delaySum / clientEntry.count;
2017-08-25 18:13:10 +02:00
}
this.clientMap.set(client, clientEntry);
2017-08-28 12:39:53 +02:00
log.info(`MissingEventProcessor: Entry for ${client} updated`);
}
else {
let clientEntry = new ClientEntry();
clientEntry.client = client;
clientEntry.lastEvent = currentTime;
clientEntry.delay = 0;
2017-08-25 18:13:10 +02:00
clientEntry.count = -1;
clientEntry.delaySum = 0;
clientEntry.avgDelay = 0;
this.clientMap.set(client, clientEntry);
2017-08-28 12:39:53 +02:00
log.info(`MissingEventProcessor: Entry for ${client} inserted`);
}
}
}
class MissingEventDetector extends CallChain.ABaseChainItem {
constructor() {
super("MissingEventDetector");
this.missingEventProcessor = new MissingEventProcessor();
}
func(message) {
this.missingEventProcessor.in(message);
return message;
}
}
exports.MissingEventDetector = MissingEventDetector;
//# sourceMappingURL=missingeventdetector.js.map