12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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);
- }
- });
- };
|