File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -102,6 +102,22 @@ const setters = {
102102 }
103103 data [ node . id ] . push ( config . RED . util . cloneMessage ( msg ) )
104104 }
105+ } ,
106+ /**
107+ * Fast filtering of existing array data (skips cloning and save checks for fast data cleanup)
108+ * @param {* } base - the base node
109+ * @param {* } node - the owner node
110+ * @param {(msg) => Boolean } filterFunction
111+ */
112+ filter ( base , node , filterFunction ) {
113+ const currentData = data [ node . id ]
114+ if ( filterFunction && Array . isArray ( currentData ) && currentData . length ) {
115+ const filteredMessages = currentData . filter ( filterFunction )
116+ if ( filteredMessages . length !== currentData . length ) {
117+ // no need for save operation to process messages - just apply them
118+ data [ node . id ] = filteredMessages
119+ }
120+ }
105121 }
106122}
107123
@@ -111,5 +127,6 @@ module.exports = {
111127 setConfig : setters . setConfig ,
112128 save : setters . save ,
113129 append : setters . append ,
130+ filter : setters . filter ,
114131 clear : setters . clear
115132}
Original file line number Diff line number Diff line change @@ -61,16 +61,16 @@ module.exports = function (RED) {
6161 if ( removeOlder > 0 ) {
6262 const removeOlderUnit = parseFloat ( config . removeOlderUnit )
6363 const ago = ( removeOlder * removeOlderUnit ) * 1000 // milliseconds ago
64- const cutoff = ( new Date ( ) ) . getTime ( ) - ago
65- const _msg = datastore . get ( node . id ) . filter ( ( msg ) => {
64+ const cutOff = ( new Date ( ) ) . getTime ( ) - ago
65+ const filterFn = ( msg ) => {
6666 let timestamp = msg . _datapoint . x
6767 // is x already a millisecond timestamp?
6868 if ( typeof ( msg . _datapoint . x ) === 'string' ) {
6969 timestamp = ( new Date ( msg . _datapoint . x ) ) . getTime ( )
7070 }
71- return timestamp > cutoff
72- } )
73- datastore . save ( base , node , _msg )
71+ return timestamp > cutOff
72+ }
73+ datastore . filter ( base , node , filterFn )
7474 }
7575 }
7676
You can’t perform that action at this time.
0 commit comments