update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b third try
[osm/UI.git] / skyquake / plugins / redundancy / api / redundancy.js
diff --git a/skyquake/plugins/redundancy/api/redundancy.js b/skyquake/plugins/redundancy/api/redundancy.js
new file mode 100644 (file)
index 0000000..8a70738
--- /dev/null
@@ -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;