'use strict'; var logger = require('log4js').getLogger(); var Sugar = require('sugar/date'); module.exports = function(db) { var module = {}; module.sqlGetAllRaw = function(type, deviceId) { return new Promise(function(resolve, reject) { db.any('select distinct on (raw.timestamp) * from raw where type=$1 and device=$2 order by timestamp asc;', [type,deviceId]) .then(function(d) { return resolve(d); }) .catch((err)=> { logger.error(err); return reject(err); }); }); }; module.sqlGetRangedRaw = function(params) { return new Promise(function(resolve, reject) { db.any('select distinct on (raw.timestamp) * from raw where type=$1 and device=$2 and timestamp between $3 and $4 order by timestamp asc;', [params.type, params.device, params.startTS, params.endTS]) .then(function(d) { return resolve(d); }) .catch((err)=> { logger.error(err); return reject(err); }); }); }; module.doGet = function(params) { var self = this; var _obj = {}; var useRange=false; return new Promise(function(resolve, reject) { logger.debug('historian.doGet', params); _obj.type = params.type; _obj.device = params.device; if (params.hasOwnProperty('start') && params.hasOwnProperty('end')) { try{ _obj.startTS = new Sugar.Date(parseInt(params.start,10)).raw; _obj.endTS = new Sugar.Date(parseInt(params.end,10)).raw; useRange = true; } catch(err) { logger.error(err); useRange = false; } if ((_obj.start === null) || (_obj.end === null)) { useRange = false; } } if (useRange) { logger.info('Userange:',_obj); self.sqlGetRangedRaw(_obj) .then(function(d) { resolve(d); }) .catch(function(e) { logger.error(e); reject(e); }); } else { self.sqlGetAllRaw(_obj.type, _obj.device) .then(function(d) { resolve(d); }) .catch(function(e) { logger.error(e); reject(e); }); } }); }; return module; };