UNPKG

prisme-flow

Version:

prisme platform flow engine

106 lines (99 loc) 3.03 kB
/** * Created by prisme.io on 09/06/2017. */ module.exports = function (RED) { var datakit = require('datakitjs') function DatakitNode (config) { RED.nodes.createNode(this, config) this.stripFunction = config.stripFunction var node = this this.on('input', function (msg) { var context = this.context() var data = context.get('data') || [] var funcIndex = msg.topic.lastIndexOf('/') var func = msg.topic.slice(funcIndex + 1) if (node.stripFunction && (funcIndex != -1)) { msg.topic = msg.topic.substring(0, funcIndex) } switch (func) { case 'clear': context.set('data', []) return null case 'size': msg.payload = data.length break case 'mean': msg.payload = datakit[func](data) break case 'sd': msg.payload = datakit[func](data) break case 'vari': msg.payload = datakit[func](data) break case 'cov': var a = msg.payload[0] var b = msg.payload[1] msg.payload = datakit[func](a, b) break case 'reg': var a = msg.payload[0] var b = msg.payload[1] msg.payload = datakit[func](a, b) break case 'seq': var value = msg.payload.split(',') msg.payload = datakit[func](value[0], value[1], value[2]) break case 'rep': var value = msg.payload.split(',') msg.payload = datakit[func](value[0], value[1]) break case 'isclose': var value = msg.payload.split(',') msg.payload = datakit[func](value[0], value[1]) break case 'sum': msg.payload = datakit[func](data) break case 'prod': msg.payload = datakit[func](data) break case 'min': msg.payload = datakit[func](data) break case 'max': msg.payload = datakit[func](data) break case 'exp': var value = msg.payload.split(',') msg.payload = datakit[func](value[0], value[1]) break case 'norm': var value = msg.payload.split(',') msg.payload = datakit[func](value[0], value[1], value[2]) break case 'uni': var value = parseInt(msg.payload) if (isNaN(value)) { node.warn('Non-numeric data received: ' + msg.payload) } else { msg.payload = datakit[func](value[0], value[1]) } break default: var value = parseFloat(msg.payload) if (isNaN(value)) { node.warn('Non-numeric data received: ' + msg.payload) } else { data.push(value) context.set('data', data) } // Swallows the message return null } node.send(msg) }) } RED.nodes.registerType('datakit', DatakitNode) }