all files / lib/routers/ mountStreamers.js

81.16% Statements 56/69
66.67% Branches 8/12
100% Functions 2/2
80% Lines 52/65
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131                                                                                                                                                          16×    
'use strict';
 
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) => {
                Iif (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 => {
                Eif ({}.hasOwnProperty.call(req.body, property)) {
                        return;
                }
                const message = `Heartbeat Body Contains No ${ property }`;
                log('error', message);
                res.status(400).send(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) => {
                Iif (err) {
                        log('error', err.message);
                        res.status(500).send(err.message);
                        return;
                }
                Iif (!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