74 satır
2.4 KiB
JavaScript
74 satır
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);
|
|
}
|
|
});
|
|
};
|