From e7960d1d44f38c69d024590276cb029e51f3fcc6 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 24 Jan 2018 22:01:07 +0000 Subject: [PATCH] Rewording some of the message sequence nodes (#1564) * Rewording some of the message sequence nodes * Fix batch test for overlap renaming * Finish msg-sequence node help rewording * Rename maxKeptMsgsCount to nodeMessageBufferMaxLength * Rename nodeMessageBufferMaxLength in tests * Remove Join-merge mode for later rework --- nodes/core/locales/en-US/messages.json | 25 ++- nodes/core/logic/10-switch.html | 130 +++----------- nodes/core/logic/10-switch.js | 10 +- nodes/core/logic/17-split.html | 158 +++++------------ nodes/core/logic/17-split.js | 101 +---------- nodes/core/logic/18-sort.html | 2 +- nodes/core/logic/18-sort.js | 2 +- nodes/core/logic/19-batch.html | 91 +++++----- nodes/core/logic/19-batch.js | 16 +- settings.js | 9 +- test/nodes/core/logic/10-switch_spec.js | 4 +- test/nodes/core/logic/17-split_spec.js | 220 +----------------------- test/nodes/core/logic/18-sort_spec.js | 4 +- test/nodes/core/logic/19-batch_spec.js | 54 +++--- 14 files changed, 181 insertions(+), 645 deletions(-) diff --git a/nodes/core/locales/en-US/messages.json b/nodes/core/locales/en-US/messages.json index d8dba5505..dcf639f59 100644 --- a/nodes/core/locales/en-US/messages.json +++ b/nodes/core/locales/en-US/messages.json @@ -543,7 +543,7 @@ "label": { "property": "Property", "rule": "rule", - "repair" : "repair sequence (reconstruct parts property of outgoing messages)" + "repair" : "recreate message sequences" }, "and": "and", "checkall": "checking all rules", @@ -559,7 +559,7 @@ "nnull":"is not null", "head":"head", "tail":"tail", - "index":"is between", + "index":"index between", "exp":"JSONata exp", "else":"otherwise" }, @@ -847,7 +847,7 @@ "mode":{ "mode":"Mode", "auto":"automatic", - "merge":"merge sequence", + "merge":"merge sequences", "reduce":"reduce sequence", "custom":"manual" }, @@ -882,8 +882,8 @@ "exp": "Reduce exp", "exp-value": "exp", "init": "Initial value", - "right": "Evaluate in reverse order (right to left)", - "fixup": "Fixup exp" + "right": "Evaluate in reverse order (last to first)", + "fixup": "Fix-up exp" }, "errors": { "invalid-expr": "Invalid JSONata expression: __error__" @@ -905,20 +905,19 @@ "batch" : { "mode": { "label" : "Mode", - "num-msgs" : "number of messages", - "interval" : "interval in seconds", - "concat" : "concatenate sequences" + "num-msgs" : "Group by number of messages", + "interval" : "Group by time interval", + "concat" : "Concatenate sequences" }, "count": { - "label" : "Number of msgs", - "overwrap" : "Overwrap", + "label" : "Number of messages", + "overlap" : "Overlap", "count" : "count", - "invalid" : "Invalid count and overwrap" + "invalid" : "Invalid count and overlap" }, "interval": { - "label" : "Interval (sec)", + "label" : "Interval", "seconds" : "seconds", - "sec" : "sec", "empty" : "send empty message when no message arrives" }, "concat": { diff --git a/nodes/core/logic/10-switch.html b/nodes/core/logic/10-switch.html index a76553716..7605135cc 100644 --- a/nodes/core/logic/10-switch.html +++ b/nodes/core/logic/10-switch.html @@ -40,7 +40,7 @@ diff --git a/nodes/core/logic/17-split.js b/nodes/core/logic/17-split.js index ad7d48cfd..88a6c3d6f 100644 --- a/nodes/core/logic/17-split.js +++ b/nodes/core/logic/17-split.js @@ -233,10 +233,10 @@ module.exports = function(RED) { var _max_kept_msgs_count = undefined; - + function max_kept_msgs_count(node) { if (_max_kept_msgs_count === undefined) { - var name = "maxKeptMsgsCount"; + var name = "nodeMessageBufferMaxLength"; if (RED.settings.hasOwnProperty(name)) { _max_kept_msgs_count = RED.settings[name]; } @@ -247,89 +247,6 @@ module.exports = function(RED) { return _max_kept_msgs_count; } - function add_to_topic(node, pending, topic, msg) { - var merge_on_change = node.merge_on_change; - if (!pending.hasOwnProperty(topic)) { - pending[topic] = []; - } - var topics = pending[topic]; - topics.push(msg); - if (merge_on_change) { - var counts = node.topic_counts; - if (topics.length > counts[topic]) { - topics.shift(); - node.pending_count--; - } - } - } - - function compute_topic_counts(topics) { - var counts = {}; - for (var topic of topics) { - counts[topic] = (counts.hasOwnProperty(topic) ? counts[topic] : 0) +1; - } - return counts; - } - - function try_merge(node, pending, merge_on_change) { - var topics = node.topics; - var counts = node.topic_counts; - for(var topic of topics) { - if(!pending.hasOwnProperty(topic) || - (pending[topic].length < counts[topic])) { - return; - } - } - var merge_on_change = node.merge_on_change; - var msgs = []; - var vals = []; - var new_msg = {payload: vals}; - for (var topic of topics) { - var pmsgs = pending[topic]; - var msg = pmsgs.shift(); - if (merge_on_change) { - pmsgs.push(msg); - } - var pval = msg.payload; - var val = new_msg[topic]; - msgs.push(msg); - vals.push(pval); - if (val instanceof Array) { - new_msg[topic].push(pval); - } - else if (val === undefined) { - new_msg[topic] = pval; - } - else { - new_msg[topic] = [val, pval] - } - } - node.send(new_msg); - if (!merge_on_change) { - node.pending_count -= topics.length; - } - } - - function merge_msg(node, msg) { - var topics = node.topics; - var topic = msg.topic; - if(node.topics.indexOf(topic) >= 0) { - var pending = node.pending; - if(node.topic_counts == undefined) { - node.topic_counts = compute_topic_counts(topics) - } - add_to_topic(node, pending, topic, msg); - node.pending_count++; - var max_msgs = max_kept_msgs_count(node); - if ((max_msgs > 0) && (node.pending_count > max_msgs)) { - node.pending = {}; - node.pending_count = 0; - node.error(RED._("join.too-many"), msg); - } - try_merge(node, pending); - } - } - function apply_r(exp, accum, msg, index, count) { exp.assign("I", index); exp.assign("N", count); @@ -350,7 +267,7 @@ module.exports = function(RED) { } return exp } - + function reduce_and_send_group(node, group) { var is_right = node.reduce_right; var flag = is_right ? -1 : 1; @@ -374,15 +291,15 @@ module.exports = function(RED) { } node.send({payload: accum}); } - + function reduce_msg(node, msg) { if(msg.hasOwnProperty('parts')) { var parts = msg.parts; var pending = node.pending; var pending_count = node.pending_count; var gid = msg.parts.id; + var count; if(!pending.hasOwnProperty(gid)) { - var count = undefined; if(parts.hasOwnProperty('count')) { count = msg.parts.count; } @@ -568,10 +485,6 @@ module.exports = function(RED) { node.warn("Message missing msg.parts property - cannot join in 'auto' mode") return; } - if (node.mode === 'merge' && !msg.hasOwnProperty("topic")) { - node.warn("Message missing msg.topic property - cannot join in 'merge' mode"); - return; - } if (node.propertyType == "full") { property = msg; @@ -602,10 +515,6 @@ module.exports = function(RED) { arrayLen = msg.parts.len; propertyIndex = msg.parts.index; } - else if (node.mode === 'merge') { - merge_msg(node, msg); - return; - } else if (node.mode === 'reduce') { reduce_msg(node, msg); return; diff --git a/nodes/core/logic/18-sort.html b/nodes/core/logic/18-sort.html index 5ce1a9f82..af66bef84 100644 --- a/nodes/core/logic/18-sort.html +++ b/nodes/core/logic/18-sort.html @@ -81,7 +81,7 @@

Note: This node internally keeps messages for its operation. In order to prevent unexpected memory usage, maximum number of messages kept can be specified. Default is no limit on number of messages.

diff --git a/nodes/core/logic/18-sort.js b/nodes/core/logic/18-sort.js index 65d8e6c45..e30535dc1 100644 --- a/nodes/core/logic/18-sort.js +++ b/nodes/core/logic/18-sort.js @@ -21,7 +21,7 @@ module.exports = function(RED) { function max_kept_msgs_count(node) { if (_max_kept_msgs_count === undefined) { - var name = "maxKeptMsgsCount"; + var name = "nodeMessageBufferMaxLength"; if (RED.settings.hasOwnProperty(name)) { _max_kept_msgs_count = RED.settings[name]; } diff --git a/nodes/core/logic/19-batch.html b/nodes/core/logic/19-batch.html index ae7d00588..371a48bf9 100644 --- a/nodes/core/logic/19-batch.html +++ b/nodes/core/logic/19-batch.html @@ -18,7 +18,7 @@