1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Debug message formatting mangling brackets

This commit is contained in:
Nick O'Leary 2015-03-20 22:09:58 +00:00
parent 1d10eba0cc
commit b61a250d58
5 changed files with 66 additions and 40 deletions

View File

@ -156,7 +156,9 @@
msg:msg msg:msg
}); });
} }
function sanitize(m) {
return m.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
}
this.handleDebugMessage = function(t,o) { this.handleDebugMessage = function(t,o) {
var msg = document.createElement("div"); var msg = document.createElement("div");
msg.onmouseover = function() { msg.onmouseover = function() {
@ -184,15 +186,17 @@
} }
}; };
var name = (o.name?o.name:o.id).toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); console.log(o);
var topic = (o.topic||"").toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); var name = sanitize(((o.name?o.name:o.id)||"").toString());
var property = (o.property?o.property:'').replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); var topic = sanitize((o.topic||"").toString());
var payload = (o.msg||"()").toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); var property = sanitize(o.property?o.property:'');
var typ = payload.substring(0,payload.indexOf(')')+1); var payload = sanitize((o.msg||"").toString());
payload = payload.substring(payload.indexOf(')')+1); var format = sanitize((o.format||"").toString());
msg.className = 'debug-message'+(o.level?(' debug-message-level-'+o.level):''); msg.className = 'debug-message'+(o.level?(' debug-message-level-'+o.level):'');
msg.innerHTML = '<span class="debug-message-date">'+ msg.innerHTML = '<span class="debug-message-date">'+
getTimestamp()+'</span><span class="debug-message-name">['+name+']'+ getTimestamp()+'</span>'+
(name?'<span class="debug-message-name">['+name+']':'')+
'</span>'; '</span>';
// NOTE: relying on function error to have a "type" that all other msgs don't // NOTE: relying on function error to have a "type" that all other msgs don't
if (o.hasOwnProperty("type") && (o.type === "function")) { if (o.hasOwnProperty("type") && (o.type === "function")) {
@ -205,8 +209,11 @@
msg.className = 'debug-message debug-message-level-' + errorLvl; msg.className = 'debug-message debug-message-level-' + errorLvl;
msg.innerHTML += '<span class="debug-message-topic">[function] : (' + errorLvlType + ')</span>'; msg.innerHTML += '<span class="debug-message-topic">[function] : (' + errorLvlType + ')</span>';
} else { } else {
msg.innerHTML += '<span class="debug-message-topic">'+(o.topic?topic+' : ':'')+ msg.innerHTML += '<span class="debug-message-topic">'+
(o.property?'[msg.'+property+']':'[msg]')+" : "+typ+'</span>'; (o.topic?topic+' : ':'')+
(o.property?'[msg.'+property+']':'[msg]')+" : "+format+
'</span>';
} }
msg.innerHTML += '<span class="debug-message-payload">'+ payload+ '</span>'; msg.innerHTML += '<span class="debug-message-payload">'+ payload+ '</span>';
var atBottom = (sbc.scrollHeight-messages.offsetHeight-sbc.scrollTop) < 5; var atBottom = (sbc.scrollHeight-messages.offsetHeight-sbc.scrollTop) < 5;

View File

@ -82,14 +82,18 @@ module.exports = function(RED) {
function sendDebug(msg) { function sendDebug(msg) {
if (msg.msg instanceof Error) { if (msg.msg instanceof Error) {
msg.format = "error";
msg.msg = msg.msg.toString(); msg.msg = msg.msg.toString();
} else if (msg.msg instanceof Buffer) { } else if (msg.msg instanceof Buffer) {
msg.msg = "(Buffer) "+msg.msg.toString('hex'); msg.format = "buffer";
msg.msg = msg.msg.toString('hex');
} else if (typeof msg.msg === 'object') { } else if (typeof msg.msg === 'object') {
var seen = []; var seen = [];
var ty = "(Object) "; msg.format = "object";
if (util.isArray(msg.msg)) { ty = "(Array) "; } if (util.isArray(msg.msg)) {
msg.msg = ty + JSON.stringify(msg.msg, function(key, value) { msg.format = "array";
}
msg.msg = JSON.stringify(msg.msg, function(key, value) {
if (typeof value === 'object' && value !== null) { if (typeof value === 'object' && value !== null) {
if (seen.indexOf(value) !== -1) { return "[circular]"; } if (seen.indexOf(value) !== -1) { return "[circular]"; }
seen.push(value); seen.push(value);
@ -98,14 +102,21 @@ module.exports = function(RED) {
}," "); }," ");
seen = null; seen = null;
} else if (typeof msg.msg === "boolean") { } else if (typeof msg.msg === "boolean") {
msg.msg = "(boolean) "+msg.msg.toString(); msg.format = "boolean";
msg.msg = msg.msg.toString();
} else if (typeof msg.msg === "number") { } else if (typeof msg.msg === "number") {
msg.msg = "(number) "+msg.msg.toString(); msg.format = "number";
msg.msg = msg.msg.toString();
} else if (msg.msg === 0) { } else if (msg.msg === 0) {
msg.format = "number";
msg.msg = "0"; msg.msg = "0";
} else if (msg.msg === null || typeof msg.msg === "undefined") { } else if (msg.msg === null || typeof msg.msg === "undefined") {
msg.format = (msg.msg === null)?"null":"undefined";
msg.msg = "(undefined)"; msg.msg = "(undefined)";
} else { msg.msg = "(string) "+msg.msg; } } else {
msg.format = "string";
msg.msg = msg.msg;
}
if (msg.msg.length > debuglength) { if (msg.msg.length > debuglength) {
msg.msg = msg.msg.substr(0,debuglength) +" ...."; msg.msg = msg.msg.substr(0,debuglength) +" ....";

View File

@ -97,7 +97,7 @@ RED.sidebar.info = (function() {
var val = node[n]||""; var val = node[n]||"";
var type = typeof val; var type = typeof val;
if (type === "string") { if (type === "string") {
if (val.length == 0) { if (val.length === 0) {
val += '<span style="font-style: italic; color: #ccc;">blank</span>'; val += '<span style="font-style: italic; color: #ccc;">blank</span>';
} else { } else {
if (val.length > 30) { if (val.length > 30) {

View File

@ -21,7 +21,7 @@ var typeRegistry = require("./registry");
var credentials = require("./credentials"); var credentials = require("./credentials");
var redUtil = require("../util"); var redUtil = require("../util");
var events = require("../events"); var events = require("../events");
var log = require("../log"); var Log = require("../log");
function getID() { function getID() {
return (1+Math.random()*4294967295).toString(16); return (1+Math.random()*4294967295).toString(16);
@ -35,10 +35,15 @@ function createNode(type,config) {
nn = new nt(clone(config)); nn = new nt(clone(config));
} }
catch (err) { catch (err) {
log.warn(type+" : "+err); Log.log({
level: Log.ERROR,
id:config.id,
type: type,
msg: err
});
} }
} else { } else {
log.warn("unknown type: "+type); Log.error("Unknown type: "+type);
} }
return nn; return nn;
} }

View File

@ -47,8 +47,8 @@ describe('debug node', function() {
n1.emit("input", {payload:"test"}); n1.emit("input", {payload:"test"});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",name:"Debug",msg:"(string) test", topic:"debug",data:{id:"n1",name:"Debug",msg:"test",
property:"payload"} format:"string",property:"payload"}
}); });
}, done); }, done);
}); });
@ -63,7 +63,7 @@ describe('debug node', function() {
n1.emit("input", {payload:"test"}); n1.emit("input", {payload:"test"});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg:"(string) test",property:"payload"} topic:"debug",data:{id:"n1",msg:"test",property:"payload",format:"string"}
}); });
count++; count++;
}, function() { }, function() {
@ -93,7 +93,7 @@ describe('debug node', function() {
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug", topic:"debug",
data:{id:"n1",msg:'(Object) {\n "payload": "test"\n}'} data:{id:"n1",msg:'{\n "payload": "test"\n}',format:"object"}
}); });
}, done); }, done);
}); });
@ -107,7 +107,7 @@ describe('debug node', function() {
n1.emit("input", {payload:"test", foo:"bar"}); n1.emit("input", {payload:"test", foo:"bar"});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg:"(string) bar",property:"foo"} topic:"debug",data:{id:"n1",msg:"bar",property:"foo",format:"string"}
}); });
}, done); }, done);
}); });
@ -121,7 +121,7 @@ describe('debug node', function() {
n1.emit("input", {payload:"test", foo: {bar: "bar"}}); n1.emit("input", {payload:"test", foo: {bar: "bar"}});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg:"(string) bar",property:"foo.bar"} topic:"debug",data:{id:"n1",msg:"bar",property:"foo.bar",format:"string"}
}); });
}, done); }, done);
}); });
@ -135,7 +135,7 @@ describe('debug node', function() {
n1.emit("input", {payload: new Error("oops")}); n1.emit("input", {payload: new Error("oops")});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg:"Error: oops",property:"payload"} topic:"debug",data:{id:"n1",msg:"Error: oops",property:"payload",format:"error"}
}); });
}, done); }, done);
}); });
@ -149,7 +149,7 @@ describe('debug node', function() {
n1.emit("input", {payload: true}); n1.emit("input", {payload: true});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg: '(boolean) true',property:"payload"} topic:"debug",data:{id:"n1",msg: 'true',property:"payload",format:"boolean"}
}); });
}, done); }, done);
}); });
@ -163,7 +163,7 @@ describe('debug node', function() {
n1.emit("input", {}); n1.emit("input", {});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg: '(undefined)',property:"payload"} topic:"debug",data:{id:"n1",msg: '(undefined)',property:"payload",format:"undefined"}
}); });
}, done); }, done);
}); });
@ -178,7 +178,7 @@ describe('debug node', function() {
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug", topic:"debug",
data:{id:"n1",msg:'(Object) {\n "type": "foo"\n}',property:"payload"} data:{id:"n1",msg:'{\n "type": "foo"\n}',property:"payload",format:"object"}
}); });
}, done); }, done);
}); });
@ -193,7 +193,7 @@ describe('debug node', function() {
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug", topic:"debug",
data:{id:"n1",msg: '(Array) [\n 0,\n 1,\n 2,\n 3\n]', data:{id:"n1",msg: '[\n 0,\n 1,\n 2,\n 3\n]',format:"array",
property:"payload"} property:"payload"}
}); });
}, done); }, done);
@ -213,8 +213,8 @@ describe('debug node', function() {
topic:"debug", topic:"debug",
data:{ data:{
id:"n1", id:"n1",
msg:'(Object) {\n "name": "bar",\n "o": "[circular]"\n}', msg:'{\n "name": "bar",\n "o": "[circular]"\n}',
property:"payload" property:"payload",format:"object"
} }
}); });
}, done); }, done);
@ -228,12 +228,14 @@ describe('debug node', function() {
websocket_test(function() { websocket_test(function() {
n1.emit("input", {payload: Array(1002).join("X")}); n1.emit("input", {payload: Array(1002).join("X")});
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ var a = JSON.parse(msg);
a.should.eql({
topic:"debug", topic:"debug",
data:{ data:{
id:"n1", id:"n1",
msg: "(string) "+Array(992).join("X")+' ....', msg: Array(1001).join("X")+' ....',
property:"payload" property:"payload",
format:"string"
} }
}); });
}, done); }, done);
@ -251,8 +253,9 @@ describe('debug node', function() {
topic:"debug", topic:"debug",
data:{ data:{
id:"n1", id:"n1",
msg: '(Buffer) 48454c4c4f', msg: '48454c4c4f',
property:"payload" property:"payload",
format: "buffer"
} }
}); });
}, done); }, done);
@ -273,7 +276,7 @@ describe('debug node', function() {
}); });
}, function(msg) { }, function(msg) {
JSON.parse(msg).should.eql({ JSON.parse(msg).should.eql({
topic:"debug",data:{id:"n1",msg:"(string) message 2",property:"payload"} topic:"debug",data:{id:"n1",msg:"message 2",property:"payload",format:"string"}
}); });
}, done); }, done);
}); });