node-red-contrib-services-mentor
Version:
Mentor Services
79 lines (67 loc) • 2.57 kB
JavaScript
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);
}