@arisan/data-api
Version:
The Universal Database API Gateway for CLIO's Modules
132 lines (110 loc) • 4.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = mountStreamers;
var _bodyParser = require('body-parser');
var _bodyParser2 = _interopRequireDefault(_bodyParser);
var _express = require('express');
var _express2 = _interopRequireDefault(_express);
var _mongodb = require('mongodb');
var _mongodb2 = _interopRequireDefault(_mongodb);
var _checkObjectID = require('../middleware/checkObjectID');
var _checkObjectID2 = _interopRequireDefault(_checkObjectID);
var _checkPort = require('../middleware/checkPort');
var _checkPort2 = _interopRequireDefault(_checkPort);
var _checkPublicIP = require('../middleware/checkPublicIP');
var _checkPublicIP2 = _interopRequireDefault(_checkPublicIP);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable import/newline-after-import, import/first */
//region 1. Platform Libraries
const ipaddr = require('ipaddr.js');
//endregion
//region 2. Project Libraries
//endregion
const context = {
router: _express2.default.Router(),
streamers: null,
logger: null
};
context.router.post('/', _bodyParser2.default.json());
context.router.post('/', _checkPublicIP2.default);
context.router.post('/', _checkPort2.default);
context.router.post('/', (req, res) => {
const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'POST /streamers' });
log('debug', JSON.stringify(req.body, null, 2));
const now = new Date();
const streamer = {
public_ip: req.body.publicIp,
private_ip: ipaddr.process(req.ip).toString(),
port: req.body.port,
created: now,
updated: now
};
context.streamers.insertOne(streamer, (err, result) => {
if (err) {
log('error', err.message);
res.status(500).send(err.message);
return;
}
log('info', `Streamer ${result.insertedId} Created`);
res.type('text/plain');
res.status(201).send(new Buffer(`${result.insertedId}`));
});
});
context.router.put('/:id', _bodyParser2.default.json());
context.router.put('/:id', _checkObjectID2.default);
context.router.put('/:id', (req, res) => {
const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `PUT ${req.originalUrl}` });
log('debug', JSON.stringify(req.body, null, 2));
['streamIds', 'cpuLoad', 'mem'].forEach(property => {
if ({}.hasOwnProperty.call(req.body, property)) {
return;
}
const message = `Heartbeat Body Contains No ${property}`;
log('error', message);
res.status(400).send(message);
throw new Error(message);
});
const diff = {
updated: new Date(),
stream_ids: req.body.streamIds,
cpu_load: Math.ceil(req.body.cpuLoad),
mem_load: Math.ceil(req.body.mem.load),
mem_current: Math.ceil(req.body.mem.current),
mem_total: Math.ceil(req.body.mem.total)
};
const _id = new _mongodb2.default.ObjectID(req.params.id);
context.streamers.updateOne({ _id }, { $set: diff }, (err, result) => {
if (err) {
log('error', err.message);
res.status(500).send(err.message);
return;
}
if (!result.matchedCount) {
const message = 'Streamer Not Found';
log('error', message);
res.status(500).send(message);
return;
}
log('info', '200 OK');
res.sendStatus(200);
});
});
//noinspection JSUnusedGlobalSymbols
/**
* Mount router for /streamers
* @param {object} options Options
* @param {object} options.app Express App
* @param {MongoClient.Db} options.database Associated Database
* @param {winston.Logger} options.logger Logger
*/
function mountStreamers(options) {
context.logger = options.logger;
const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'mountStreamers' });
log('debug', 'Mounting router for /streamers....');
options.app.use('/streamers', context.router);
context.streamers = options.database.collection('streamers');
log('info', 'Router for /streamers Mounted');
}
//# sourceMappingURL=mountStreamers.js.map