send mail in case of missing events
This commit is contained in:
27
dist/missingeventdetector.js
vendored
27
dist/missingeventdetector.js
vendored
@ -1,20 +1,45 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const nodemailer = require("nodemailer");
|
||||
const log = require("./log");
|
||||
const CallChain = require("./callchain");
|
||||
const Processor = require("./processor");
|
||||
const CHECK_PERIOD = 60; // seconds
|
||||
const SMTP_HOST = "localhost";
|
||||
const SMTP_PORT = 25;
|
||||
const SMTP_SENDER = "dispatcher@hottis.de";
|
||||
const SMTP_RECEIVER = "woho@hottis.de";
|
||||
class ClientEntry {
|
||||
}
|
||||
class MissingEventProcessor extends Processor.AProcessor {
|
||||
constructor() {
|
||||
super("MissingEventProcessor");
|
||||
this.clientMap = new Map();
|
||||
this.smtp = nodemailer.createTransport({
|
||||
host: SMTP_HOST,
|
||||
port: SMTP_PORT,
|
||||
secure: false
|
||||
});
|
||||
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}`);
|
||||
if ((value.avgDelay != 0) && (elapsedTime > (value.avgDelay * 3))) {
|
||||
let mail = {
|
||||
from: SMTP_SENDER,
|
||||
to: SMTP_RECEIVER,
|
||||
subject: `Missing Event Detected for ${key}`,
|
||||
text: `Missing Event Detected: ${key}, elapsed: ${elapsedTime / 1000}, avg. delay: ${value.avgDelay / 1000}`
|
||||
};
|
||||
this.smtp.sendMail(mail)
|
||||
.then((v) => {
|
||||
log.info(`Missing event info mail sent, ${v.response}`);
|
||||
})
|
||||
.catch((reason) => {
|
||||
log.error(`Failure when sending missing event info: ${reason}`);
|
||||
});
|
||||
}
|
||||
});
|
||||
}, CHECK_PERIOD * 1000);
|
||||
}
|
||||
@ -30,8 +55,8 @@ class MissingEventProcessor extends Processor.AProcessor {
|
||||
clientEntry.count += 1;
|
||||
if (clientEntry.count >= 1) {
|
||||
clientEntry.delaySum += clientEntry.delay;
|
||||
clientEntry.avgDelay = clientEntry.delaySum / clientEntry.count;
|
||||
}
|
||||
clientEntry.avgDelay = clientEntry.delaySum / clientEntry.count;
|
||||
this.clientMap.set(client, clientEntry);
|
||||
log.info(`Entry for ${client} updated`);
|
||||
}
|
||||
|
Reference in New Issue
Block a user