all files / lib/routers/ mountRecorders.js

81.25% Statements 65/80
64.29% Branches 9/14
100% Functions 2/2
80.26% Lines 61/76
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151                                                                                                                                                                                16×    
'use strict';
 
Object.defineProperty(exports, "__esModule", {
        value: true
});
exports.default = mountRecorders;
 
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);
 
var _checkRecorderModule = require('../middleware/checkRecorderModule');
 
var _checkRecorderModule2 = _interopRequireDefault(_checkRecorderModule);
 
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(),
        recorders: null,
        logger: null
};
 
context.router.post('/', _bodyParser2.default.json());
context.router.post('/', _checkPublicIP2.default);
context.router.post('/', _checkPort2.default);
context.router.post('/', _checkRecorderModule2.default);
context.router.post('/', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'POST /recorders' });
        log('debug', JSON.stringify(req.body, null, 2));
        const now = new Date();
        const recorder = {
                public_ip: req.body.publicIp,
                private_ip: ipaddr.process(req.ip).toString(),
                port: req.body.port,
                module: req.body.module,
                created: now,
                updated: now
        };
        context.recorders.insertOne(recorder, (insertOneErr, insertOneRes) => {
                Iif (insertOneErr) {
                        log('error', insertOneErr.message);
                        res.status(500).send(insertOneErr.message);
                        return;
                }
                log('info', `Recorder ${ insertOneRes.insertedId } Created`);
                res.type('text/plain');
                res.status(201).send(new Buffer(`${ insertOneRes.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));
        ['cpuUsagePercentage', 'memoryUsagePercentage', 'hddUsageKB', 'hddTotalKB', 'netUploadBytesPerSecond', 'netDownloadBytesPerSecond'].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_infos: []
        };
        Iif (req.body.streamInfos) {
                req.body.streamInfos.forEach(streamInfo => {
                        diff.stream_infos.push({
                                id: streamInfo.id,
                                archive: streamInfo.archiveStarted,
                                live: streamInfo.liveStarted,
                                event: streamInfo.eventStarted
                        });
                });
        }
        diff.cpu_load = Math.ceil(req.body.cpuUsagePercentage * 100);
        diff.mem_load = Math.ceil(req.body.memoryUsagePercentage);
        diff.hdd_load = Math.ceil(req.body.hddUsageKB * 100 / req.body.hddTotalKB);
        diff.upload_kbps = Math.ceil(req.body.netUploadBytesPerSecond * 8 / 1024);
        diff.download_kbps = Math.ceil(req.body.netDownloadBytesPerSecond * 8 / 1024);
        const _id = new _mongodb2.default.ObjectID(req.params.id);
        context.recorders.updateOne({ _id }, {
                $set: diff,
                $push: { load_history: diff }
        }, (updateOneErr, updateOneRes) => {
                Iif (updateOneErr) {
                        log('error', updateOneErr.message);
                        res.status(500).send(updateOneErr.message);
                        return;
                }
                Iif (!updateOneRes.matchedCount) {
                        const message = 'Recorder Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                log('info', '200 OK');
                res.sendStatus(200);
        });
});
 
//noinspection JSUnusedGlobalSymbols
/**
 * Mount router for /recorders
 * @param {object}         options          Options
 * @param {object}         options.app      Express App
 * @param {MongoClient.Db} options.database Associated Database
 * @param {winston.Logger} options.logger   Logger
 */
function mountRecorders(options) {
        context.logger = options.logger;
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'mountRecorders' });
        log('debug', 'Mounting router for /recorders....');
        options.app.use('/recorders', context.router);
        context.recorders = options.database.collection('recorders');
        log('info', 'Router for /recorders Mounted');
}
//# sourceMappingURL=mountRecorders.js.map