var mysql = require('mysql'); var moment = require('moment'); var config = require('./config'); var pool = mysql.createPool(config.mysql); var start_date = moment().add(-1, 'days').format('YYYY-MM-DD');//'2017-11-11'; var end_date = moment().add(-1, 'days').format('YYYY-MM-DD');//'2018-01-07'; console.log(moment().format('YYYY-MM-DD HH:mm:ss') + " => sync minutely data from " + start_date + " to " + end_date); var days = moment(end_date).diff(moment(start_date), 'days'); for (var i = 0; i <= days; i++) { var date_day = moment(start_date).add(i, "days"); for(var j = 0; j < 24; j++) { var date_hour = moment(date_day).add(j, "hours").format("YYYY-MM-DD HH:00:00"); for(var k = 0; k < 60; k++) { var start = moment(date_hour).add(k, 'minutes').format("YYYY-MM-DD HH:mm:00"); var end = moment(date_hour).add(k+1, 'minutes').format("YYYY-MM-DD HH:mm:00"); fetchDeviceMinutelyData(start, end); } } } function fetchDeviceMinutelyData(start, end) { pool.getConnection(function (err, connection) { var devices = {}; var sql = "SELECT mac, mac_key, avg(mac_value) as avg_val, min(mac_value) as min_val, max(mac_value) as max_val FROM history WHERE time >= '" + start + "' AND time < '" + end + "' GROUP BY mac, mac_key ORDER BY mac"; //console.log(sql); connection.query(sql, function (error, results, fields) { if (error) throw error; //console.log(start + " : " + end); results.forEach(function(data) { var mac = data.mac; var key = data.mac_key; var val = data.avg_val; if(devices[mac] == null) { devices[mac] = { mac: mac, time: moment(start).format('YYYY-MM-DD HH:mm:00') }; } devices[mac][key] = [val.toFixed(3), data.min_val, data.max_val] }); var device_data = []; for(var mac in devices) { device_data.push(devices[mac]); } // console.log(JSON.stringify(device_data)); if(device_data.length > 0) { insertDeviceData(device_data, connection); } }); }); } function insertDeviceData(docs, connection) { var data = []; docs.forEach(function(doc) { var mac = doc.mac; var time = doc.time; delete doc.mac; delete doc.time; data.push([mac, time, JSON.stringify(doc)]); }); connection.query("INSERT INTO data (mac, time, json) VALUES ?", [data], function (error, results, fields) { if (error) throw error; connection.destroy(); }); }