Backup_Senica/RVO48/flow/helper/ErrorToServiceHandler.js
2025-10-16 02:27:31 +02:00

91 lines
2.7 KiB
JavaScript
Executable file

const { MD5 } = require('./md5.js');
const { networkInterfaces } = require('os');
class ErrorToServiceHandler {
constructor() {
this.previousValues = {};
this.project_id = undefined;
const nets = networkInterfaces();
this.ipAddresses = {};
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] = [];
}
this.ipAddresses[name].push(net.address);
}
}
}
}
setProjectId(project_id) {
this.project_id = project_id;
}
processMessage(message, seconds) {
if (Array.isArray(message)) message = message.join(', ');
let key = MD5(message);
let ts = Date.now();
//keep in memory - default value is 1h
if (seconds === undefined) seconds = 60 * 60;
if (!this.previousValues.hasOwnProperty(key)) {
this.previousValues[key] = { ts: ts, duration: seconds };
}
let diff = (ts - this.previousValues[key].ts);
if (diff < this.previousValues[key].duration * 1000) return false;
this.previousValues[key].ts = ts;
return message;
}
sendMessageToService(message, seconds, message_type) {
// 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;
}
let f = this.processMessage(message, seconds);
if (f === false) return;
if (message_type === undefined) message_type = "error_message";
let toService = {
id: this.project_id,
ipAddresses: this.ipAddresses
};
//js_error || error_message
toService[message_type] = message;
console.log("ErrorToServiceHandler------------------------>send to service", toService);
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);
});
});
}
}
const errorHandler = new ErrorToServiceHandler();
module.exports = errorHandler;
//module.exports = ErrorToServiceHandler;