UNPKG

fog-controller

Version:

Fog Controller project @ iotracks.com

332 lines (280 loc) 9.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _async = require('async'); var _async2 = _interopRequireDefault(_async); var _querystring = require('querystring'); var _querystring2 = _interopRequireDefault(_querystring); var _https = require('https'); var _https2 = _interopRequireDefault(_https); var _satelliteManager = require('../managers/satelliteManager'); var _satelliteManager2 = _interopRequireDefault(_satelliteManager); var _satelliteService = require('../services/satelliteService'); var _satelliteService2 = _interopRequireDefault(_satelliteService); var _appUtils = require('../utils/appUtils'); var _appUtils2 = _interopRequireDefault(_appUtils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var openPortOnRadomComsat = function openPortOnRadomComsat(params, callback) { var isComsatPortOpen = false, iterations = 0; _async2.default.whilst(function () { // TEST return !(isComsatPortOpen || iterations > 5); }, function (cb) { // ITERATE iterations++; _async2.default.waterfall([_async2.default.apply(_satelliteService2.default.getRandomSatellite, params), openPortsOnComsat], function (err, result) { if (err) { console.log(err); } else { if (params.comsatPort) { isComsatPortOpen = true; } else { console.log('Error'); } } cb(null, iterations); }); }, function (err, n) { // CALLBACK console.log(n); console.log(err); if (n > 5) { callback('error', 'Not able to open port on remote COMSAT. Gave up after 5 tries. Error Received : ' + params.errormessage); } else { callback(null, params); } }); }; var openPortsOnComsat = function openPortsOnComsat(params, callback) { var data = params.bodyParams.publicAccess == 1 ? _querystring2.default.stringify({ mapping: '{"type":"public","maxconnections":60,"heartbeatabsencethreshold":200000}' }) : _querystring2.default.stringify({ mapping: '{"type":"private","maxconnectionsport1":1, "maxconnectionsport2":1, ' + '"heartbeatabsencethresholdport1":200000, "heartbeatabsencethresholdport2":200000}' }); var options = { host: params.satellite.domain, port: 443, path: '/api/v2/mapping/add', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var httpreq = _https2.default.request(options, function (response) { console.log(response.statusCode); var output = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { output += chunk; }); response.on('end', function () { var responseObj = JSON.parse(output); console.log(responseObj); if (responseObj.errormessage) { params.errormessage = responseObj.errormessage; callback('error', responseObj.errormessage); } else { params.comsatPort = responseObj; callback(null, params); } }); }); httpreq.on('error', function (err) { console.log(err); params.errormessage = JSON.stringify(err); callback(null, params); }); httpreq.write(data); httpreq.end(); }; var closePortsOnComsat = function closePortsOnComsat(params, callback) { console.log(params.portPasscode[0]); if (params.portPasscode[0] && params.portPasscode[0].length > 0) { _async2.default.each(params.portPasscode[0], function (obj, callback) { var data = _querystring2.default.stringify({ mappingid: obj.mapping_id }); console.log(data); var options = { host: obj.domain, port: 443, path: '/api/v2/mapping/remove', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var httpreq = _https2.default.request(options, function (response) { console.log(response.statusCode); var output = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { output += chunk; }); response.on('end', function () { var responseObj = JSON.parse(output); console.log(responseObj); if (responseObj.errormessage) { params.errormessage = responseObj.errormessage; } callback(); }); }); httpreq.on('error', function (err) { console.log(err); params.errormessage = JSON.stringify(err); callback(); }); httpreq.write(data); httpreq.end(); }, function (err) { params.errormessage = JSON.stringify(err); callback(null, params); }); } else { callback(null, params); } }; var closePortOnComsat = function closePortOnComsat(params, callback) { console.log(params.satellitePort); var data = _querystring2.default.stringify({ mappingid: params.satellitePort.mappingId }); console.log(data); var options = { host: params.satellite.domain, port: 443, path: '/api/v2/mapping/remove', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var httpreq = _https2.default.request(options, function (response) { console.log(response.statusCode); var output = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { output += chunk; }); response.on('end', function () { var responseObj = JSON.parse(output); console.log(responseObj); if (responseObj.errormessage) { params.errormessage = responseObj.errormessage; } callback(null, params); }); }); httpreq.on('error', function (err) { console.log(err); params.errormessage = JSON.stringify(err); callback(null, params); }); httpreq.write(data); httpreq.end(); }; var checkConnectionToComsat = function checkConnectionToComsat() { var params = {}; _async2.default.waterfall([_async2.default.apply(getAllSatellites, params), verifyComsatConnections, displayComsatConnectionsStatus], function (err, result) { if (err) { console.log('Error: There is some problem in verifying comsat connections.'); } }); }; var getAllSatellites = function getAllSatellites(params, callback) { var satellite = []; _satelliteManager2.default.findAll().then(function (satellites) { if (satellites.length) { for (var i = 0; i < satellites.length; i++) { satellite[i] = satellites[i]; if (i == satellites.length - 1) { params.satellite = satellite; callback(null, params); } } } else { console.log('No ComSat found to verify connection.'); } }); }; var verifyComsatConnections = function verifyComsatConnections(params, callback) { console.log('Verifying Fog-Controller connection to ComSat(s):'); var data = _querystring2.default.stringify({ mappingid: 'all' }); var count = 0, percentage_done = 0, validSatellites = [], invalidSatellites = []; params.validSatellites = []; params.invalidSatellites = []; _async2.default.eachSeries(params.satellite, function (satellite, cb) { count++; process.stdout.clearLine(); process.stdout.cursorTo(0); percentage_done = Math.round(count / params.satellite.length * 100); process.stdout.write('Percentage completed ' + percentage_done + '%'); var options = { host: satellite.domain, port: 443, path: '/api/v2/status', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var httpreq = _https2.default.request(options, function (response) { if (response.statusCode == 200) { var output = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { output += chunk; }); response.on('end', function () { validSatellites.push(satellite); cb(); }); } else { invalidSatellites.push(satellite); cb(); } }); httpreq.on('error', function (err) { invalidSatellites.push(satellite); cb(); }); httpreq.write(data); httpreq.end(); }, function (err) { params.validSatellites = validSatellites; params.invalidSatellites = invalidSatellites; callback(null, params); }); }; var displayComsatConnectionsStatus = function displayComsatConnectionsStatus(params, callback) { if (params.validSatellites.length) { console.log("\nConnection to following ComSat(s) was successful:"); params.validSatellites.forEach(function (validSatellite) { console.log(validSatellite.name + ' (' + validSatellite.domain + ')'); }); } if (params.invalidSatellites.length) { console.log("\nConnection to following ComSat(s) failed:"); params.invalidSatellites.forEach(function (invalidSatellite) { console.log(invalidSatellite.name + ' (' + invalidSatellite.domain + ')'); }); } callback(null, params); }; exports.default = { openPortOnRadomComsat: openPortOnRadomComsat, closePortOnComsat: closePortOnComsat, closePortsOnComsat: closePortsOnComsat, openPortsOnComsat: openPortsOnComsat, checkConnectionToComsat: checkConnectionToComsat };