fog-controller
Version:
Fog Controller project @ iotracks.com
332 lines (280 loc) • 9.52 kB
JavaScript
;
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
};