Scribe.js/dist/router/viewer.js

253 lines
7.4 KiB
JavaScript
Raw Normal View History

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _maxSafeInteger = require('babel-runtime/core-js/number/max-safe-integer');
var _maxSafeInteger2 = _interopRequireDefault(_maxSafeInteger);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _express = require('express');
var _express2 = _interopRequireDefault(_express);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
var _jade = require('jade');
var _jade2 = _interopRequireDefault(_jade);
var _basicAuthConnect = require('basic-auth-connect');
var _basicAuthConnect2 = _interopRequireDefault(_basicAuthConnect);
var _bodyParser = require('body-parser');
var _bodyParser2 = _interopRequireDefault(_bodyParser);
var _JSONStream = require('JSONStream');
var _JSONStream2 = _interopRequireDefault(_JSONStream);
var _nwBuilder = require('nw-builder');
var _nwBuilder2 = _interopRequireDefault(_nwBuilder);
var _package = require('../../native/package.json');
var _package2 = _interopRequireDefault(_package);
var _url = require('url');
var _MongoDB = require('../writer/MongoDB');
var _extend = require('extend');
var _extend2 = _interopRequireDefault(_extend);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getObject(d, def) {
if (typeof d === 'undefined' || d === null) {
return def || {};
} else if ((typeof d === 'undefined' ? 'undefined' : (0, _typeof3.default)(d)) === 'object') {
return d;
} else {
try {
return JSON.parse(d);
} catch (e) {
return def || {};
}
}
}
var viewer = _jade2.default.compileFile(__dirname + '/../../views/viewer.jade');
var login = _jade2.default.compileFile(__dirname + '/../../views/login.jade');
var Viewer = function () {
function Viewer(scribe) {
(0, _classCallCheck3.default)(this, Viewer);
this.scribe = scribe;
}
(0, _createClass3.default)(Viewer, [{
key: 'getRouter',
value: function getRouter() {
var scribe = this.scribe;
var routerOptions = scribe.module('router/Viewer').options;
var clientOptions = scribe.module('router/Viewer/client').options;
var conn = void 0,
Entry = void 0;
_mongoose2.default.set('debug', routerOptions.debug);
conn = _mongoose2.default.createConnection(routerOptions.mongoUri);
Entry = conn.model('Entry', _MongoDB.EntrySchema);
var router = new _express.Router();
if (routerOptions.username && routerOptions.password) {
router.use((0, _basicAuthConnect2.default)(routerOptions.username, routerOptions.password));
}
router.use(_express2.default.static(__dirname + '/../../public'));
if (routerOptions.useBodyParser) {
router.use(_bodyParser2.default.json());
}
var render = function render(req, res) {
return res.send(viewer({ config: (0, _stringify2.default)(clientOptions) }));
};
router.get('/', render);
router.get('/viewer', render);
router.post('/rest/timeseries', function (req, res) {
try {
if (req.body && req.body.date) {
req.body.date = req.body.date || {};
if (req.body.date.$gt) req.body.date.$gt = new Date(req.body.date.$gt);
if (req.body.date.$gte) req.body.date.$gte = new Date(req.body.date.$gte);
if (req.body.date.$eq) req.body.date.$eq = new Date(req.body.date.$eq);
if (req.body.date.$lt) req.body.date.$lt = new Date(req.body.date.$lt);
if (req.body.date.$lte) req.body.date.$lte = new Date(req.body.date.$lte);
if (req.body._id && Array.isArray(req.body._id.$in)) req.body._id.$in = req.body._id.$in.map(function (a) {
return _mongoose2.default.Types.ObjectId(a);
});
if (req.body._id && typeof req.body._id === 'string') req.body._id = _mongoose2.default.Types.ObjectId(req.body._id);
}
} catch (e) {
// ignore
}
Entry.aggregate([{ $match: req.body }, {
$project: {
hour: {
year: { $year: '$date' },
month: { $month: '$date' },
day: { $dayOfMonth: '$date' },
hour: { $hour: '$date' }
},
expose: '$expose'
}
}, {
$group: {
_id: { hour: '$hour', expose: '$expose' },
number: { $sum: 1 }
}
}], function (err, out) {
return res.json(out || []);
});
});
router.get('/rest/db/:collection', function (req, res) {
var _Entry$find;
if (!routerOptions.mongoUri) {
return res.json({ err: 0, docs: [] });
}
var selector = getObject(req.query.selector);
var fields = typeof req.query.fields === 'string' ? req.query.fields : '';
var sort = getObject(req.query.sort, { _id: -1 });
var limit = !isNaN(req.query.limit) ? Math.max(0, parseInt(req.query.limit)) : _maxSafeInteger2.default;
var skip = !isNaN(req.query.skip) ? Math.max(0, parseInt(req.query.skip)) : 0;
res.type('application/json');
var stream = (_Entry$find = Entry.find(selector)).select.apply(_Entry$find, (0, _toConsumableArray3.default)(fields.split(' '))).skip(skip).limit(limit).sort(sort).stream();
stream.pipe(_JSONStream2.default.stringify()).pipe(res);
});
router.delete('/rest/db/:collection', function (req, res) {
if (!routerOptions.mongoUri) {
res.status(410);
return res.send();
}
var ids = req.query.id;
try {
ids = JSON.parse(ids);
} catch (e) {
// ignore
}
if (!Array.isArray(ids)) {
ids = [req.param('id')];
}
Entry.remove({ _id: { $in: ids } }, function (err) {
res.status(err ? 410 : 200);
res.send();
});
});
if (routerOptions.native) {}
return router;
}
}, {
key: 'getNative',
value: function getNative() {
var scribe = this.scribe;
var nativeOptions = scribe.module('router/Viewer/native').options;
// update
_package2.default.main = (0, _url.format)(nativeOptions);
// save
_fs2.default.writeFileSync(__dirname + '/../../native/package.json', (0, _stringify2.default)(_package2.default, null, 4), { encoding: 'utf8' });
var nw = new _nwBuilder2.default((0, _extend2.default)(true, {
platforms: ['win', 'osx', 'linux'],
buildDir: __dirname + '/../../public/native',
version: '0.12.3',
zip: true
}, nativeOptions, { files: __dirname + '/../../native/**/**' }));
if (nativeOptions.debug) {
nw.on('log', function (d) {
return console.log(d);
});
}
return nw.build();
}
}]);
return Viewer;
}();
exports.default = Viewer;