forked from mirrors/Scribe.js
253 lines
7.4 KiB
JavaScript
253 lines
7.4 KiB
JavaScript
|
'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;
|