handle retained messages, introduc missing event detector
This commit is contained in:
60
dist/missingeventdetector.js
vendored
Normal file
60
dist/missingeventdetector.js
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const log = require("./log");
|
||||
const CallChain = require("./callchain");
|
||||
const Processor = require("./processor");
|
||||
const CHECK_PERIOD = 10; // 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;
|
||||
log.info(`Checking ${key}, elapsed: ${elapsedTime / 1000}, avg. delay: ${value.avgDelay / 1000}`);
|
||||
});
|
||||
}, CHECK_PERIOD * 1000);
|
||||
}
|
||||
process(message) {
|
||||
let client = message.metadata.client;
|
||||
log.info(`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;
|
||||
clientEntry.delaySum += clientEntry.delay;
|
||||
clientEntry.avgDelay = clientEntry.delaySum / clientEntry.count;
|
||||
this.clientMap.set(client, clientEntry);
|
||||
log.info(`Entry for ${client} updated`);
|
||||
}
|
||||
else {
|
||||
let clientEntry = new ClientEntry();
|
||||
clientEntry.client = client;
|
||||
clientEntry.lastEvent = currentTime;
|
||||
clientEntry.delay = 0;
|
||||
clientEntry.count = 0;
|
||||
clientEntry.delaySum = 0;
|
||||
clientEntry.avgDelay = 0;
|
||||
this.clientMap.set(client, clientEntry);
|
||||
log.info(`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
|
Reference in New Issue
Block a user