124 lines
No EOL
3.6 KiB
JavaScript
124 lines
No EOL
3.6 KiB
JavaScript
const { MD5 } = require('./md5.js');
|
|
const { networkInterfaces } = require('os');
|
|
|
|
class ErrorToServiceHandler
|
|
{
|
|
constructor() {
|
|
this.previousValues = {};
|
|
|
|
this.projects_id = undefined;
|
|
|
|
const nets = networkInterfaces();
|
|
this.ipAddresses = Object.create(null); // Or just '{}', an empty object
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
//console.log(this.ipAddresses);
|
|
|
|
}
|
|
|
|
setProjectsId(projects_id)
|
|
{
|
|
this.projects_id = projects_id;
|
|
}
|
|
|
|
processMessage(message, seconds, message_type)
|
|
{
|
|
if(message_type == undefined) message_type = "error_message";
|
|
if(Array.isArray(message)) message = message.join(', ');
|
|
|
|
let key = MD5(message);
|
|
let timestamp = new Date().getTime();
|
|
|
|
//keep in memory - default value is 1h
|
|
if (seconds === undefined) seconds = 60*60;
|
|
|
|
if(!this.previousValues.hasOwnProperty(key))
|
|
{
|
|
this.previousValues[key] = {ts: timestamp, duration: seconds};
|
|
}
|
|
|
|
let diff = (timestamp - this.previousValues[key].ts);
|
|
if(diff < this.previousValues[key].duration*1000) return false;
|
|
|
|
this.previousValues[key].ts = timestamp;
|
|
|
|
return true;
|
|
}
|
|
|
|
sendMessageToService(message, seconds, message_type)
|
|
{
|
|
|
|
let f = this.processMessage(message, seconds, message_type);
|
|
if(!f) return;
|
|
|
|
/*
|
|
//-------------
|
|
if(message_type == undefined) message_type = "error_message";
|
|
if(Array.isArray(message)) message = message.join(', ');
|
|
|
|
let key = MD5(message);
|
|
let timestamp = new Date().getTime();
|
|
|
|
//keep in memory
|
|
if (seconds === undefined) seconds = 60*60;
|
|
|
|
if(!this.previousValues.hasOwnProperty(key))
|
|
{
|
|
this.previousValues[key] = {ts: timestamp, duration: seconds};
|
|
}
|
|
|
|
let diff = (timestamp - this.previousValues[key].ts);
|
|
if(diff < this.previousValues[key].duration*1000) return;
|
|
|
|
this.previousValues[key].ts = timestamp;
|
|
*/
|
|
|
|
//-------------------------
|
|
|
|
//send to service
|
|
|
|
let dataToInfoSender = {id: this.projects_id};
|
|
|
|
//js_error || error_message
|
|
dataToInfoSender[message_type] = message;
|
|
dataToInfoSender.ipAddresses = this.ipAddresses;
|
|
|
|
console.log("ErrorToServiceHandler------------------------>send to service", dataToInfoSender);
|
|
|
|
//TODO UGLY!!!
|
|
if(this.projects_id === undefined) this.projects_id = FLOW.OMS_projects_id;
|
|
|
|
/*
|
|
if(this.projects_id === undefined)
|
|
{
|
|
console.log("this.projects_id is undefined");
|
|
return;
|
|
}
|
|
*/
|
|
|
|
RESTBuilder.make(function(builder) {
|
|
builder.method('POST');
|
|
builder.post(dataToInfoSender);
|
|
builder.url('http://192.168.252.2:8004/sentmessage');
|
|
|
|
builder.callback(function(err, response, output) {
|
|
console.log("process.on error send", err, response, output, dataToInfoSender);
|
|
});
|
|
});
|
|
|
|
|
|
}
|
|
}
|
|
|
|
module.exports = ErrorToServiceHandler; |