74 rivejä
2.4 KiB
JavaScript

const Logger = require("./logger");
const logger = new Logger("logger Node");
logger.sendInfo("Copyright 2020 Jaroslav Peter Prib");
if(logger.active) logger.send("test active");
const adminActions=["setOn","setOff"];
const MaxMsgOutSize=1000;
let maxReportErrors=10;
module.exports = function (RED) {
function loggerNode (n) {
RED.nodes.createNode(this, n);
var node = Object.assign(this, n);
if(node.active) logger.send({label:"initialising",parameters:n});
node.logger=new Logger({
label:"logger Node:"+(node.name||node.id),
count:node.count
});
node.logger.setNodeStatus(node);
node.on('input', function (msg) {
if(node.logger.active) try {
let processed=[];
const msgString=JSON.stringify(msg,(k,v)=>{
if (typeof v === 'object') {
const i=processed.findIndex((c)=>c===v)
if(i>-1) return "<***circular reference***>";
processed.push(v);
}
return v;
})
node.logger.send({label:"input",message:msgString});
if(node.sendOutputLog)
node.send([null,msg]);
if(node.sendConsoleLog)
node.log(msg);
} catch(ex) {
if(maxReportErrors) {
maxReportErrors--;
node.logger.send({label:"input error",error:ex.error,stack:ex.stack});
}
}
node.send(msg);
});
node.on('close', function (removed, done) {
node.connection.close(false, () => {
if(node.logger.active) node.logger.send({label:"close"});
});
done();
});
}
RED.nodes.registerType('Logger', loggerNode);
RED.httpAdmin.get('/Logger/:id/:action/', RED.auth.needsPermission('Logger.write'), function (req, res) {
if(logger.active) logger.send({label:"httpAdmin",request:{params:req.params}});
const node = RED.nodes.getNode(req.params.id)
if (node && node.type === 'Logger') {
try {
if (adminActions.includes(req.params.action)) {
node.logger[req.params.action]();
return;
}
throw Error('unknown action: ' + req.params.action)
} catch (err) {
const reason1 = 'Internal Server Error, ' + req.params.action + ' failed ' + err.toString()
if(node.logger.active) node.logger.send({label:"httpAdmin", request:req.params,error:reason1});
res.status(500).send(reason1);
}
} else {
const reason2 = 'request to ' + req.params.action + ' failed for id:' + req.params.id;
if(logger.active) logger.send({label:"httpAdmin",error:reason2});
res.status(404).send(reason2);
}
});
};