yahoo-swiv
Version:
A web-based exploratory visualization UI for Druid.io
69 lines (68 loc) • 2.16 kB
JavaScript
;
var express_1 = require('express');
var swiv_plywood_1 = require('swiv-plywood');
var chronoshift_1 = require('chronoshift');
var router = express_1.Router();
router.post('/', function (req, res) {
var _a = req.body, dataCube = _a.dataCube, dataSource = _a.dataSource, expression = _a.expression, timezone = _a.timezone, settingsVersion = _a.settingsVersion;
dataCube = dataCube || dataSource;
if (typeof dataCube !== 'string') {
res.status(400).send({
error: 'must have a dataCube'
});
return;
}
var queryTimezone = null;
if (typeof timezone === 'string') {
try {
queryTimezone = chronoshift_1.Timezone.fromJS(timezone);
}
catch (e) {
res.status(400).send({
error: 'bad timezone',
message: e.message
});
return;
}
}
var ex = null;
try {
ex = swiv_plywood_1.Expression.fromJS(expression);
}
catch (e) {
res.status(400).send({
error: 'bad expression',
message: e.message
});
return;
}
req.getSettings(dataCube)
.then(function (appSettings) {
var myDataCube = appSettings.getDataCube(dataCube);
if (!myDataCube) {
res.status(400).send({ error: 'unknown data cube' });
return null;
}
if (!myDataCube.executor) {
res.status(400).send({ error: 'un queryable data cube' });
return null;
}
return myDataCube.executor(ex, { timezone: queryTimezone }).then(function (data) {
var reply = {
result: swiv_plywood_1.Dataset.isDataset(data) ? data.toJS() : data
};
res.json(reply);
}, function (e) {
console.log('error:', e.message);
if (e.hasOwnProperty('stack')) {
console.log(e.stack);
}
res.status(500).send({
error: 'could not compute',
message: e.message
});
});
})
.done();
});
module.exports = router;