X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=skyquake%2Fplugins%2Fredundancy%2Fapi%2Fredundancy.js;fp=skyquake%2Fplugins%2Fredundancy%2Fapi%2Fredundancy.js;h=8a70738e4165b4df165dbc03a34031c4a5f3ff46;hb=03156e335275de1dafbc2a816e98006afdf249bf;hp=0000000000000000000000000000000000000000;hpb=f2dc2462571800e62cba969964de621dca09299c;p=osm%2FUI.git diff --git a/skyquake/plugins/redundancy/api/redundancy.js b/skyquake/plugins/redundancy/api/redundancy.js new file mode 100644 index 000000000..8a70738e4 --- /dev/null +++ b/skyquake/plugins/redundancy/api/redundancy.js @@ -0,0 +1,368 @@ +var request = require('request'); +var Promise = require('bluebird'); +var rp = require('request-promise'); +var utils = require('../../../framework/core/api_utils/utils.js'); +var constants = require('../../../framework/core/api_utils/constants.js'); +var _ = require('underscore'); +var APIVersion = '/v2' +var Redundancy = {}; + +Redundancy.get = function(req) { + return new Promise(function(resolve, reject) { + var self = this; + var api_server = req.query["api_server"]; + var requestHeaders = {}; + var url = utils.confdPort(api_server) + '/api/operational/redundancy-config'; + + _.extend( + requestHeaders, + constants.HTTP_HEADERS.accept.data, { + 'Authorization': req.session && req.session.authorization + } + ); + + request({ + url: url + '?deep', + type: 'GET', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false + }, + function(error, response, body) { + var data; + var objKey = 'rw-redundancy:redundancy-config'; + //SDN model doesn't follow convention + if (utils.validateResponse('Redundancy.get', error, response, body, resolve, reject)) { + try { + data = JSON.parse(response.body); + data = data[objKey] + } catch (e) { + console.log('Problem with "Redundancy.get"', e); + var err = {}; + err.statusCode = 500; + err.errorMessage = { + error: 'Problem with "Redundancy.get": ' + e + } + return reject(err); + } + return resolve({ + statusCode: response.statusCode, + data: data + }); + }; + }); + }); +} + + +Redundancy.getState = function(req) { + return new Promise(function(resolve, reject) { + var self = this; + var api_server = req.query["api_server"]; + var requestHeaders = {}; + var url = utils.confdPort(api_server) + '/api/operational/redundancy-state'; + _.extend( + requestHeaders, + constants.HTTP_HEADERS.accept.data, { + 'Authorization': req.session && req.session.authorization + } + ); + request({ + url: url + '?deep', + type: 'GET', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false + }, + function(error, response, body) { + var data; + var objKey = 'rw-redundancy:redundancy-state'; + //SDN model doesn't follow convention + if (utils.validateResponse('Redundancy.getState', error, response, body, resolve, reject)) { + try { + data = JSON.parse(response.body); + data = data[objKey] + } catch (e) { + console.log('Problem with "Redundancy.getState"', e); + var err = {}; + err.statusCode = 500; + err.errorMessage = { + error: 'Problem with "Redundancy.getState": ' + e + } + return reject(err); + } + return resolve({ + statusCode: response.statusCode, + data: data + }); + }; + }); + }); +} + +Redundancy.configUpdate = function(req) { + var self = this; + var id = req.params.id || req.params.name; + var api_server = req.query["api_server"]; + var data = req.body; + var requestHeaders = {}; + var createData = {}; + var updateTasks = []; + var method = 'PUT'; + if(data.hasOwnProperty('revertive-preference')) { + var revertivePreferenceUrl = utils.confdPort(api_server) + '/api/config/redundancy-config/revertive-preference'; + var revertuvePreferenceData = { + 'preferred-site-name': data['revertive-preference']['preferred-site-name'] + }; + var revertivePreferencePromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: revertivePreferenceUrl, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: revertuvePreferenceData, + }, function(error, response, body) { + if (utils.validateResponse('revertivePreferencePromise.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + updateTasks.push(revertivePreferencePromise); + } + + if(data.hasOwnProperty('geographic-failover-decision')) { + var geoFailDecisionConfigUrl = utils.confdPort(api_server) + '/api/config/redundancy-config'; + var geoFailDecisionConfigData = {'geographic-failover-decision' : data['geographic-failover-decision']}; + var geoFailDecisionPromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: geoFailDecisionConfigUrl, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: geoFailDecisionConfigData, + }, function(error, response, body) { + if (utils.validateResponse('geoFailDecisionPromise.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + updateTasks.push(geoFailDecisionPromise); + } + + if(data.hasOwnProperty('user-credentials')) { + var userCredentialsUrl = utils.confdPort(api_server) + '/api/config/redundancy-config'; + var userCredentialsData = {'user-credentials' : data['user-credentials']}; + var userCredentialsPromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: userCredentialsUrl, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: userCredentialsData, + }, function(error, response, body) { + if (utils.validateResponse('userCredentials.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + updateTasks.push(userCredentialsPromise); + } + + if(data.hasOwnProperty('polling-config')) { + var pollingConfigUrl = utils.confdPort(api_server) + '/api/config/redundancy-config/polling-config'; + var pollingConfigData = data['polling-config']; + var revertivePreferencePromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: pollingConfigUrl, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: pollingConfigData, + }, function(error, response, body) { + if (utils.validateResponse('pollingConfigPromise.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + updateTasks.push(revertivePreferencePromise); + } + + if(data.hasOwnProperty('dns-ip-fqdn')) { + var dnsIpFqdn = data['dns-ip-fqdn']; + var dnsIpFqdnUrl = utils.confdPort(api_server) + '/api/config/redundancy-config'; + if(dnsIpFqdn.trim() != '') { + var dnsIpFqdnData = {'dns-ip-fqdn' : dnsIpFqdn} + var dnsIpFqdnPromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: dnsIpFqdnUrl, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: dnsIpFqdnData, + }, function(error, response, body) { + if (utils.validateResponse('dnsIpFqdnPromise.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + } else { + //Delete config item + var dnsIpFqdnPromise = new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: dnsIpFqdnUrl + '/dns-ip-fqdn', + method: 'DELETE', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false + }, function(error, response, body) { + if (utils.validateResponse('dnsIpFqdnDelete.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }); + } + updateTasks.push(dnsIpFqdnPromise); + } + return new Promise(function(resolve, reject) { + Promise.all(updateTasks).then(function(results) { + if(results && results[0]) { + resolve({ + statusCode: results[0].statusCode, + data: {} + }); + } + }) + }) +} + + +Redundancy.siteUpdate = function(req) { + var self = this; + var id = req.params.id || req.params.name; + var api_server = req.query["api_server"]; + var data = req.body; + var requestHeaders = {}; + var createData = {}; + var url = utils.confdPort(api_server) + '/api/config/redundancy-config/site' + var method = 'POST' + createData = {}; + if (!id) { + createData = {site: data} + } else { + method = 'PUT'; + url += '/' + encodeURIComponent(id); + createData['rw-redundancy:site'] = data; + } + + + + return new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: url, + method: method, + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + json: createData, + }, function(error, response, body) { + if (utils.validateResponse('siteUpdate.' + method, error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }) +} + +Redundancy.siteDelete = function(req) { + var self = this; + var id = req.params.id || req.params.name; + var api_server = req.query["api_server"]; + var data = req.body; + var requestHeaders = {}; + var createData = {}; + var url = utils.confdPort(api_server) + '/api/config/redundancy-config/site/'; + url += encodeURIComponent(id); + return new Promise(function(resolve, reject) { + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.data, + constants.HTTP_HEADERS.content_type.data, { + 'Authorization': req.session && req.session.authorization + }); + request({ + url: url, + method: 'DELETE', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + }, function(error, response, body) { + if (utils.validateResponse( 'siteUpdate.DELETE', error, response, body, resolve, reject)) { + return resolve({ + statusCode: response.statusCode, + data: JSON.stringify(response.body) + }); + }; + }); + }) +} + +module.exports = Redundancy;