UNPKG

node-red-contrib-services-mentor

Version:

Mentor Services

79 lines (67 loc) 2.57 kB
var mysql = require('mysql'); module.exports = function(RED) { var log = RED.log; function Node(config) { RED.nodes.createNode(this, config); var node = this; this.mydbConfig = RED.nodes.getNode(config.mysql); this.interval = config.interval; this.mentor = RED.nodes.getNode(config.mentor); this.mentor_id = 0; if (this.mentor) this.mentor_id = this.mentor.mentor_id; if (this.mydbConfig) { this.mydbConfig.connect(); var node = this; var busy = false; var status = {}; node.mydbConfig.on("state", function(info) { if (info === "connecting") { node.status({fill:"grey",shape:"ring",text:info}); } else if (info === "connected") { node.status({fill:"green",shape:"dot",text:info}); } else { if (info === "ECONNREFUSED") { info = "connection refused"; } if (info === "PROTOCOL_CONNECTION_LOST") { info = "connection lost"; } node.status({fill:"red",shape:"ring",text:info}); } }); node.on("input", function(msg) { if (node.mydbConfig.connected) { var obj = JSON.parse(msg.payload); msg.code = obj.code; msg.time = obj.time; msg.mentor_id = node.mentor_id; msg.result = 1; deleteMysql(node, msg); } else { node.error("Database not connected",msg); status = {fill:"red",shape:"ring",text:"not yet connected"}; } if (!busy) { busy = true; node.status(status); node.tout = setTimeout(function() { busy = false; node.status(status); },500); } }); node.on('close', function () { if (node.tout) { clearTimeout(node.tout); } node.mydbConfig.removeAllListeners(); node.status({}); }); } else { this.error("MySQL database not configured"); } } function deleteMysql(node, msg) { var sql = "Delete from mqtt_lecturas WHere Date(FROM_UNIXTIME(time * 0.001)) < DATE_SUB(now(), INTERVAL " + node.interval + " DAY)"; if (node.mentor_id > 0) sql += " AND mentor_id = "+ node.mentor_id; node.mydbConfig.connection.query(sql, [], function(err, rows) { if (err) { log.error(err);} else node.send({payload: {msg: "Number of records deleted: " + rows.affectedRows, data:msg}}); }); } RED.nodes.registerType("DelInfoDB", Node); }