citysys-flowserver/flow/helper/ErrorToServiceHandler.js

92 lines
2.7 KiB
JavaScript
Raw Normal View History

2024-04-13 20:29:31 +02:00
const { MD5 } = require('./md5.js');
const { networkInterfaces } = require('os');
class ErrorToServiceHandler {
constructor() {
2024-04-13 20:29:31 +02:00
this.previousValues = {};
this.project_id = undefined;
2024-04-13 20:29:31 +02:00
const nets = networkInterfaces();
this.ipAddresses = {};
2024-04-13 20:29:31 +02:00
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
// Skip over non-IPv4 and internal (i.e. 127.0.0.1) addresses
if (net.family === 'IPv4' && !net.internal) {
if (!this.ipAddresses[name]) {
this.ipAddresses[name] = [];
2024-04-13 20:29:31 +02:00
}
this.ipAddresses[name].push(net.address);
}
}
}
}
setProjectId(project_id) {
this.project_id = project_id;
2024-04-13 20:29:31 +02:00
}
processMessage(message, seconds) {
if (Array.isArray(message)) message = message.join(', ');
2024-04-13 20:29:31 +02:00
let key = MD5(message);
let ts = Date.now();
2024-04-13 20:29:31 +02:00
//keep in memory - default value is 1h
if (seconds === undefined) seconds = 60 * 60;
2024-04-13 20:29:31 +02:00
if (!this.previousValues.hasOwnProperty(key)) {
this.previousValues[key] = { ts: ts, duration: seconds };
}
2024-04-13 20:29:31 +02:00
let diff = (ts - this.previousValues[key].ts);
if (diff < this.previousValues[key].duration * 1000) return false;
2024-04-13 20:29:31 +02:00
this.previousValues[key].ts = ts;
2024-04-13 20:29:31 +02:00
return message;
2024-04-13 20:29:31 +02:00
}
sendMessageToService(message, seconds, message_type) {
2024-04-13 20:29:31 +02:00
// if error occures too early FLOW.GLOBALS.settings.project_id is still undefined
if (this.project_id === undefined) {
console.log("ErrorToServiceHandler.js: no project_id");
return;
2024-04-13 20:29:31 +02:00
}
let f = this.processMessage(message, seconds);
if (f === false) return;
2024-04-13 20:29:31 +02:00
if (message_type === undefined) message_type = "error_message";
2024-04-13 20:29:31 +02:00
let toService = {
id: this.project_id,
ipAddresses: this.ipAddresses
};
2024-04-13 20:29:31 +02:00
//js_error || error_message
toService[message_type] = message;
2024-04-13 20:29:31 +02:00
console.log("ErrorToServiceHandler------------------------>send to service", toService);
2024-04-13 20:29:31 +02:00
RESTBuilder.make(function(builder) {
builder.method('POST');
builder.post(toService);
builder.url('http://192.168.252.2:8004/sentmessage');
builder.callback(function(err, response, output) {
console.log("process.on error send", err, response, output, toService);
});
2024-04-13 20:29:31 +02:00
});
}
}
const errorHandler = new ErrorToServiceHandler();
module.exports = errorHandler;
//module.exports = ErrorToServiceHandler;