var mysql = require('mysql'); var moment = require('moment'); var config = require('./config'); var mongoClient = require('mongodb').MongoClient; var mysqlClient = mysql.createConnection(config.mysql); mysqlClient.connect(function(error) { if (error) return; console.log("connected to MySQL"); }); var start_date = '2017-11-11'; var end_date = '2018-01-02'; var days = moment(end_date).diff(moment(start_date), 'days'); for (var i = 0; i <= days; i++) { var date = moment(start_date).add(i, "days"); for(var j = 0; j < 24; j++) { var start = moment(date).add(j, 'hours').format("YYYY-MM-DD HH:00:00"); var end = moment(date).add(j+1, 'hours').format("YYYY-MM-DD HH:00:00"); //console.log(start + " : " + end); fetchDeviceDailyData(start, end); } } mysqlClient.end(); function fetchDeviceDailyData(start, end) { var devices = {}; var sql = "SELECT mac, mac_key, avg(mac_value) as mac_value FROM history WHERE time >= '" + start + "' AND time < '" + end + "' GROUP BY mac, mac_key ORDER BY mac"; //console.log(sql); mysqlClient.query(sql, function (error, results, fields) { if (error) throw error; results.forEach(function(data) { var mac = data.mac; var key = data.mac_key; var val = data.mac_value; if(devices[mac] == null) { devices[mac] = { mac: mac, time: moment(moment(start, 'YYYY-MM-DD HH:00:00').valueOf() + 8*60*60*1000).toDate() }; } devices[mac][key] = val; }); var device_data = []; for(var mac in devices) { device_data.push(devices[mac]); } //console.log(device_data); if(device_data.length > 0) { insertDeviceData(device_data); } }); } function insertDeviceData(docs) { mongoClient.connect(config.mongo, { poolSize: 10, keepAlive: 300000, auto_reconnect: true, reconnectTries: 1000, reconnectInterval: 5000, connectTimeoutMS: 30000 }, function(err, client) { if (err) { console.log(err.message); return; } client.db('monitor').collection('data_hourly').insertMany(docs, function(err2, doc2) { if (err2) { console.log(err2.message); return; } client.close(); }); }); }