const Collection = require('mongodb').MongoClient; const mongoose = require('mongoose'); const mongodb_hostname = process.env.MONGODB_HOST || 'localhost'; const mongodb_port = process.env.MONGODB_PORT || 27017; const mongodb_database = process.env.MONGODB_DATABASE || 'lsp'; const mongodb_url = 'mongodb://' + mongodb_hostname + ':' + mongodb_port; const db = mongoose.connection; const bucketMaxSize = 1000; var _db; var _data = Collection(); var _ipx_data; var _events; var _alerts; var days = function(date) { const complete = new Date(1000 * date); const days = new Date(complete.toDateString()) return days; } var init = function (callback) { mongoose.connect(mongodb_url, { useNewUrlParser: true, useUnifiedTopology: true }); db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function () { // we're connected! if (callback) callback(null); }); // client.connect(function (err) { // if (err) { // if (callback) callback({ error: "Error connecting to DB: " + err }) // } // else { // _db = client.db(mongodb_database); // _data = _db.collection('data'); // _ipx_data = _db.collection('ipx-data'); // _events = _db.collection('events'); // _alerts = _db.collection('alerts'); // //////////////////////////// // // FLUSH DB BY UNCOMMENTING // // _data.remove(function(err, objects){}); // // _ipx_data.remove(function(err, objects){}); // // _events.remove(function(err, objects){}); // // _alerts.remove(function(err, objects){}); // if (callback) callback(null); // } // }); } var addData = function (relay, device, element, callback) { // const query = { // device: device, // date: days(element.date), // bucketSize: { $lt: bucketMaxSize }, // }; // const data = { // index: element.index, // value: element.value, // date: new Date(1000 * element.date) // }; // const update = { // $push: { // data: data // }, // $min: { min: data.value }, // $max: { max: data.value }, // $inc: { bucketSize: 1 }, // }; // const options = { // upsert: true // }; // _data.updateOne(query, update, options, function (err, result) { // if (callback) { callback(err, result); } // }); } var addEvent = function (relay, device, element, callback) { // const query = { // device: device, // day: days(element.date), // bucketSize: { $lt: bucketMaxSize }, // }; // const event = { // index: element.index, // value: element.value, // type: element.type, // date: new Date(1000 * element.date) // }; // const update = { // $push: { // events: event // }, // $min: { first: event.date }, // $max: { last: event.date }, // $inc: { bucketSize: 1 }, // }; // const options = { // upsert: true // }; // _events.updateOne(query, update, options, function (err, result) { // if (callback) { callback(err, result); } // }); } var addAlert = function (relay, device, element, callback) { // const object = { // relay: relay, // device: device, // date: new Date(1000 * element.date), // alert: element.alerts // }; // _alerts.insertOne(object, function (err, result) { // if (callback) { callback(err, result); } // }); } var addIPXData = function (relay, device, child, element, callback) { // const query = { // child: child, // date: days(element.timestamp), // bucketSize: { $lt: bucketMaxSize }, // }; // const data = { // date: new Date(1000 * element.timestamp), // tags: element.tags // }; // const update = { // $push: { // data: data // }, // $min: { first: data.date }, // $max: { last: data.date }, // $inc: { bucketSize: 1 }, // }; // const options = { // upsert: true // }; // _ipx_data.updateOne(query, update, options, function (err, result) { // if (callback) { callback(err, result); } // }); } exports.init = init exports.addData = addData exports.addEvent = addEvent exports.addAlert = addAlert exports.addIPXData = addIPXData