mqttArchiver/lib/server/db-historian.js

107 lines
2.4 KiB
JavaScript

'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;
};