virool-pivot
Version:
A web-based exploratory visualization UI for Druid.io
81 lines (69 loc) • 2.01 kB
text/typescript
import { Router, Request, Response } from 'express';
import { $, Expression, RefExpression, External, Datum, Dataset, TimeRange, basicExecutorFactory, Executor, AttributeJSs, helper } from 'plywood';
import { Timezone, WallTime, Duration } from 'chronoshift';
import { PivotRequest } from '../../utils/index';
import { VERSION } from '../../config';
import { DataSource } from '../../../common/models/index';
var router = Router();
router.post('/', (req: PivotRequest, res: Response) => {
var { version, dataSource, expression, timezone } = req.body;
if (version && version !== VERSION) {
res.status(400).send({
error: 'incorrect version',
action: 'reload'
});
return;
}
if (typeof dataSource !== 'string') {
res.status(400).send({
error: 'must have a dataSource'
});
return;
}
var queryTimezone: Timezone = null;
if (typeof timezone === 'string') {
try {
queryTimezone = Timezone.fromJS(timezone);
} catch (e) {
res.status(400).send({
error: 'bad timezone',
message: e.message
});
return;
}
}
var ex: Expression = null;
try {
ex = Expression.fromJS(expression);
} catch (e) {
res.status(400).send({
error: 'bad expression',
message: e.message
});
return;
}
req.dataSourceManager.getQueryableDataSource(dataSource)
.then((myDataSource) => {
if (!myDataSource) {
res.status(400).send({ error: 'unknown data source' });
return;
}
return myDataSource.executor(ex, { timezone: queryTimezone }).then(
(data: Dataset) => {
res.send(data.toJS());
},
(e: Error) => {
console.log('error:', e.message);
if (e.hasOwnProperty('stack')) {
console.log((<any>e).stack);
}
res.status(500).send({
error: 'could not compute',
message: e.message
});
}
);
})
.done();
});
export = router;