Got a flow, that tracks some OS commands in real time, presenting output via exec node in spawn mode. The flow works the way expected and designed, but for a couple of things, one odd.
First, I am now trying to strip out the default bullet from the list item, but can't seem to get it to work. Tried to set the list style to none, but that did work.
[{"id":"66475d3a.7f53c4","type":"ui_button","z":"8a41ccbe.25b5","name":"Update","group":"f98ea2f.eba606","order":1,"width":2,"height":1,"passthru":false,"label":"Update","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":280,"y":80,"wires":[["e7128fd6.71ddc","70efba4e.1669a4","96fbebd0.c33098"]]},{"id":"a373d0c9.f0409","type":"exec","z":"8a41ccbe.25b5","command":"","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"Update","x":580,"y":120,"wires":[["a1473577.5c56d8"],[],["ace8c38f.0b97d"]]},{"id":"725740d.4b87ac","type":"ring-buffer","z":"8a41ccbe.25b5","name":"Buffer","capacity":"20","order":"old-to-new","sendOnlyIfFull":false,"pushAfterClear":false,"extra":false,"perTopic":false,"x":1190,"y":180,"wires":[["2d14af13.579f4"]]},{"id":"2d14af13.579f4","type":"template","z":"8a41ccbe.25b5","name":"Line","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n <head></head>\n <body>\n <ul style=\"list-style: none;\">\n {{#payload}}\n <li>{{line}}</li>\n {{/payload}}\n </ul>\n </body>\n</html>","output":"str","x":1330,"y":180,"wires":[["c64097d9.1c7308"]]},{"id":"c64097d9.1c7308","type":"ui_template","z":"8a41ccbe.25b5","group":"f98ea2f.eba606","name":"Text","order":2,"width":26,"height":9,"format":"<div ng-bind-html=\"msg.payload\"></div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1470,"y":160,"wires":[["14bc7215.cf284e"]]},{"id":"10130bf7.7e7a34","type":"function","z":"8a41ccbe.25b5","name":"Out","func":"const theLine = msg.payload.replace('\\n','\\n\\n'),\n theLength = msg.payload.trim().length;\n\nmsg.payload = { line: theLine, length: theLength};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":890,"y":140,"wires":[["9c42fcf8.4a7bc"]]},{"id":"23f949ec.318486","type":"inject","z":"8a41ccbe.25b5","name":"Automatic","props":[{"p":"enabled","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":110,"y":100,"wires":[["66475d3a.7f53c4","cb254008.7f0e2"]]},{"id":"7b9d7291.72b56c","type":"link in","z":"8a41ccbe.25b5","name":"","links":["272a47f9.f8af88","e9e87681.2aec18","c43d4c53.5fb3a","b2ada784.827c28","39f8a2eb.ff133e","b6c17525.412e08","df91f7bc.4d7258","a1473577.5c56d8"],"x":775,"y":140,"wires":[["10130bf7.7e7a34"]]},{"id":"fc2a3b48.a02df8","type":"exec","z":"8a41ccbe.25b5","command":"","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"Upgrade","x":580,"y":200,"wires":[["df91f7bc.4d7258"],[],["f7f64ad6.375988"]]},{"id":"1f96ebce.92bf54","type":"complete","z":"8a41ccbe.25b5","name":"Update","scope":["a373d0c9.f0409"],"uncaught":false,"x":270,"y":200,"wires":[["268a6ee0.9a21d2"]]},{"id":"baf9b740.5ab428","type":"complete","z":"8a41ccbe.25b5","name":"Upgrade","scope":["fc2a3b48.a02df8"],"uncaught":false,"x":280,"y":280,"wires":[["33658c73.005c64"]]},{"id":"a1473577.5c56d8","type":"link out","z":"8a41ccbe.25b5","name":"","links":["7b9d7291.72b56c","ca53f80a.5a13c8"],"x":695,"y":100,"wires":[]},{"id":"df91f7bc.4d7258","type":"link out","z":"8a41ccbe.25b5","name":"","links":["7b9d7291.72b56c","ca53f80a.5a13c8"],"x":695,"y":180,"wires":[]},{"id":"96fbebd0.c33098","type":"change","z":"8a41ccbe.25b5","name":"Update","rules":[{"t":"set","p":"command","pt":"flow","to":"sudo apt-get -y update","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"command","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":120,"wires":[["a373d0c9.f0409"]]},{"id":"268a6ee0.9a21d2","type":"change","z":"8a41ccbe.25b5","name":"Upgrade","rules":[{"t":"set","p":"command","pt":"flow","to":"sudo apt-get -y upgrade","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"command","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":200,"wires":[["fc2a3b48.a02df8"]]},{"id":"2ab49f36.5fcf7","type":"change","z":"8a41ccbe.25b5","name":"Clear","rules":[{"t":"set","p":"clear","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":180,"wires":[["725740d.4b87ac"]]},{"id":"e7128fd6.71ddc","type":"link out","z":"8a41ccbe.25b5","name":"","links":["a35f9b.09afc068","c8298929.acbca8"],"x":375,"y":80,"wires":[]},{"id":"a35f9b.09afc068","type":"link in","z":"8a41ccbe.25b5","name":"","links":["e7128fd6.71ddc"],"x":935,"y":180,"wires":[["2ab49f36.5fcf7"]]},{"id":"9c42fcf8.4a7bc","type":"switch","z":"8a41ccbe.25b5","name":"Length?","property":"payload.length","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1040,"y":140,"wires":[["725740d.4b87ac"]]},{"id":"f7f64ad6.375988","type":"link out","z":"8a41ccbe.25b5","name":"","links":["e1bc723a.d31b1"],"x":695,"y":220,"wires":[]},{"id":"ace8c38f.0b97d","type":"link out","z":"8a41ccbe.25b5","name":"","links":["e1bc723a.d31b1"],"x":695,"y":140,"wires":[]},{"id":"500ea416.cff32c","type":"function","z":"8a41ccbe.25b5","name":"Result","func":"const COMMAND = 'command';\n\nvar theResult = msg.payload.code,\n theLine = `Command: '${flow.get(COMMAND)}', Result: ${theResult}`;\n\nmsg.payload = { line: theLine, result: theResult};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":890,"y":220,"wires":[["d4ac58ca.68ffa8"]]},{"id":"e1bc723a.d31b1","type":"link in","z":"8a41ccbe.25b5","name":"","links":["f7f64ad6.375988","ace8c38f.0b97d"],"x":775,"y":220,"wires":[["500ea416.cff32c"]]},{"id":"d4ac58ca.68ffa8","type":"switch","z":"8a41ccbe.25b5","name":"Result?","property":"payload.result","propertyType":"msg","rules":[{"t":"neq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1040,"y":220,"wires":[["725740d.4b87ac"]]},{"id":"70efba4e.1669a4","type":"change","z":"8a41ccbe.25b5","name":"Disable","rules":[{"t":"set","p":"enabled","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":40,"wires":[["c99c031b.3def4"]]},{"id":"c99c031b.3def4","type":"link out","z":"8a41ccbe.25b5","name":"","links":["5eb63953.4ed008","e18329fe.083268","ca53f80a.5a13c8"],"x":535,"y":40,"wires":[]},{"id":"5eb63953.4ed008","type":"link in","z":"8a41ccbe.25b5","name":"","links":["c99c031b.3def4","ea423086.f3deb"],"x":155,"y":60,"wires":[["66475d3a.7f53c4"]]},{"id":"33658c73.005c64","type":"change","z":"8a41ccbe.25b5","name":"Enable","rules":[{"t":"set","p":"enabled","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":280,"wires":[["ea423086.f3deb"]]},{"id":"ea423086.f3deb","type":"link out","z":"8a41ccbe.25b5","name":"","links":["5eb63953.4ed008","e18329fe.083268","ca53f80a.5a13c8"],"x":555,"y":280,"wires":[]},{"id":"e18329fe.083268","type":"link in","z":"8a41ccbe.25b5","name":"","links":["c99c031b.3def4","ea423086.f3deb"],"x":775,"y":100,"wires":[["b19db041.9ac17"]]},{"id":"5b7484e.e57837c","type":"function","z":"8a41ccbe.25b5","name":"Enable Or Disable","func":"msg.payload = flow.get('buffer');\nmsg.enabled = !msg.enabled;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1110,"y":100,"wires":[["4caba239.ec315c"]]},{"id":"14bc7215.cf284e","type":"change","z":"8a41ccbe.25b5","name":"Buffer","rules":[{"t":"set","p":"buffer","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1610,"y":160,"wires":[[]]},{"id":"4caba239.ec315c","type":"link out","z":"8a41ccbe.25b5","name":"","links":["8cfa47a5.1c2fd8","171a7a10.596576"],"x":1255,"y":100,"wires":[]},{"id":"8cfa47a5.1c2fd8","type":"link in","z":"8a41ccbe.25b5","name":"","links":["4caba239.ec315c"],"x":1355,"y":140,"wires":[["c64097d9.1c7308"]]},{"id":"b19db041.9ac17","type":"delay","z":"8a41ccbe.25b5","name":"Wait (250ms)","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":910,"y":100,"wires":[["5b7484e.e57837c"]]},{"id":"d60ec15.a55224","type":"ui_text","z":"8a41ccbe.25b5","group":"f98ea2f.eba606","order":3,"width":2,"height":1,"name":"Process","label":"{{msg.payload}}","format":"","layout":"row-left","x":1280,"y":320,"wires":[]},{"id":"ca126a4e.428508","type":"delay","z":"8a41ccbe.25b5","name":"Wait (500ms)","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1290,"y":360,"wires":[["55dac86b.edffd8"]]},{"id":"ca53f80a.5a13c8","type":"link in","z":"8a41ccbe.25b5","name":"","links":["cb254008.7f0e2","ea423086.f3deb","c99c031b.3def4","a1473577.5c56d8","df91f7bc.4d7258"],"x":655,"y":360,"wires":[["eea3edf4.d619b"]]},{"id":"cb254008.7f0e2","type":"link out","z":"8a41ccbe.25b5","name":"","links":["ca53f80a.5a13c8"],"x":235,"y":120,"wires":[]},{"id":"3a90e44e.2a071c","type":"exec","z":"8a41ccbe.25b5","command":"ps -eo pid,%cpu,cmd | grep 'apt-get' | grep -v sudo | grep -v grep","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Get","x":990,"y":360,"wires":[["65aa710a.1e91"],[],[]]},{"id":"65aa710a.1e91","type":"function","z":"8a41ccbe.25b5","name":"Parse","func":"const PROCESS = msg.payload.trim().split(/[ ]+/),\n ID = 0,\n LOAD = 1;\n\nvar theLoad = PROCESS[LOAD];\n theId = PROCESS[ID];\n\nif (theLoad) \n msg.payload = `${theLoad}% (${theId})`;\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1130,"y":340,"wires":[["d60ec15.a55224","ca126a4e.428508"]]},{"id":"55dac86b.edffd8","type":"link out","z":"8a41ccbe.25b5","name":"","links":[],"x":1415,"y":360,"wires":[]},{"id":"171a7a10.596576","type":"link in","z":"8a41ccbe.25b5","name":"","links":["4caba239.ec315c"],"x":1015,"y":300,"wires":[["59509ef9.60fa7"]]},{"id":"59509ef9.60fa7","type":"change","z":"8a41ccbe.25b5","name":"Clear","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1130,"y":300,"wires":[["d60ec15.a55224"]]},{"id":"eea3edf4.d619b","type":"traffic","z":"8a41ccbe.25b5","name":"Enable Or Disable","property_allow":"enabled","filter_allow":"false","ignore_case_allow":true,"negate_allow":false,"send_allow":false,"property_stop":"enabled","filter_stop":"true","ignore_case_stop":true,"negate_stop":false,"send_stop":false,"default_start":false,"differ":false,"x":810,"y":360,"wires":[["3a90e44e.2a071c"]]},{"id":"f98ea2f.eba606","type":"ui_group","z":"","name":"Tasks","tab":"871457a6.90a408","order":1,"disp":true,"width":"28","collapse":true},{"id":"871457a6.90a408","type":"ui_tab","z":"","name":"Administration","icon":"dashboard","order":10,"disabled":false,"hidden":false}]
Second, the qurik, one I can live with, but would like to resolve if possible. Sometimes, randomly, the output from the exec node, even through there is a newline per line present, the newline is not consistently honored, in the sense that two lines of text end up in a simple list item, so in effect the new line is ignored. I tried replacing the newlines with '
' but that did not seem to have any impact. Below is picture of the desired output and when the output does this odd two lines per list item quirk.
Desired...
Odd quirk...