Initial commit for OpenECOMP SDN-C OA&M
[sdnc/oam.git] / admportal / server / router / routes / odl.js
diff --git a/admportal/server/router/routes/odl.js b/admportal/server/router/routes/odl.js
new file mode 100644 (file)
index 0000000..fba646f
--- /dev/null
@@ -0,0 +1,258 @@
+var express = require('express');
+var router = express.Router();
+var csp = require('./csp');
+var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
+var async = require('async');
+
+
+// pass host, username and password to ODL
+var username = properties.odlUser;
+var password = properties.odlPasswd;
+var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');
+
+// target host for ODL request
+var host = properties.odlHost;
+var port = properties.odlPort;
+var header = {'Host': host, 'Authorization': auth, 'Content-Type': 'application/yang.data+json'};
+var options = {
+        host: host,
+        headers           : header,
+        port              : port,
+               rejectUnauthorized: false,
+               strictSSL         : false
+};
+
+// Connection to OpenDaylight
+Odl = require('./Odl');
+
+function handleResult(err, response_str, res) {
+    if (err) {
+        console.error( String(err) );
+        res.render('pages/err', {result:{code:'failure', msg:String(err)}, header:process.env.MAIN_MENU});
+    } else {
+        // make sure response starts with JSON string
+        if (response_str && response_str.indexOf('{') == 0) {
+            //console.log("response: ", result);
+            res.render('odl/listWklst', { response_obj: JSON.parse(response_str), header:process.env.MAIN_MENU });
+        } else {
+                       res.render('pages/err', {result:{code:'failure', msg:String(err) }, header:process.env.MAIN_MENU});
+        }
+    }
+}
+
+// / index page
+// calls restconf to get information
+router.get('/listWklst', csp.checkAuth, function(req, res) {
+    options.strictSSL = true;   // used to test SSL certificate
+    Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,req,res);
+});
+
+router.get('/pageWklst', csp.checkAuth, function(req,res) {
+    pageWklst(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
+});
+
+
+function pageWklst(req,res,resultObj,privilegeObj)
+{
+     if(req.session == null || req.session == undefined
+            || req.session.l3sdnPageInfo == null || req.session.l3sdnPageInfo == undefined)
+     {
+        res.render("pages/err",
+            { result: {code:'error', msg:"Unable to read session information. "+ String(err) }, header:process.env.MAIN_MENU});
+            return;
+     }
+
+    var l3sdnPageInfo = req.session.l3sdnPageInfo;
+    var currentPage=1;
+    if (typeof req.query.page != 'undefined')
+    {
+        currentPage = +req.query.page;
+    }
+    l3sdnPageInfo.currentPage = currentPage;
+    l3sdnPageInfo.rows = l3sdnPageInfo.pages[currentPage-1];
+    req.session.l3sdnPageInfo = l3sdnPageInfo;
+       res.render('odl/listWklst',
+    {
+       pageInfo  : l3sdnPageInfo,
+        result    : resultObj,
+        privilege : privilegeObj, header:process.env.MAIN_MENU
+    });
+    return;
+}
+
+
+router.post('/update_vr_lan_interface', function(req,res){
+       var svc_instance_id = encodeURIComponent(req.body.svc_instance_id);
+
+       // format msg
+    var msgRsp = 
+       {
+       "vr-lan-interface" : 
+               [
+                       {
+                               "vr-designation"         : req.body.uf_vr_designation,
+                               "v6-vr-lan-prefix"       : req.body.uf_vr_lan_prefix,
+                               "v6-vr-lan-prefix-length": req.body.uf_vr_lan_prefix_length,
+                               "v6-vce-wan-address"     : req.body.uf_vce_wan_address,
+                               "v4-vr-lan-prefix"       : req.body.uf_vr_lan_prefix,
+                               "v4-vr-lan-prefix-length": req.body.uf_vr_lan_prefix_length,
+                               "v4-vce-loopback-address": req.body.uf_vce_loopback_address
+                       }
+               ]
+       };
+       var tasks = [];
+       tasks.push(function(callback){
+               Odl.put_vr_lan_interface('/restconf/config/L3SDN-API:services/layer3-service-list/'
+                       + svc_instance_id
+                       + '/service-data/vr-lan/', options, callback);
+       });
+       async.series(tasks, function(err,result){
+               
+               if(err){
+               }
+               else{
+               var msgArray = new Array();
+                       //result:{code:'error', msg:"got vr-lan information: "+ String(result)}
+            msgArray.push('vr-lan-interface successfully updated.');
+                       res.render("odl/listVRlan", 
+                       {
+                               svc_instance_id: req.body.svc_instance_id,
+                               response_obj   : JSON.parse(result), header:process.env.MAIN_MENU
+                       });
+            return;
+               }       
+       });
+});
+
+
+// sendData submits form data to ODL
+// Data is read from URL params and converted to JSON
+router.get('/svc-topology-operation', function(req, res) {
+    var formData = '{"input":{'
+             + '"svc-request-id":"'+ new Date().toISOString() + '"' +','
+             + '"svc-notification-url":"'+ req.query['svc-notification-url']+ '"' + ','
+             + '"svc-action":"'+ req.query['svc-action']+ '"' + ','
+             + '"svc-vnf-type":"'+ req.query['svc-vnf-type']+ '"' + ','
+             + '"svc-instance-id":"'+ req.query['svc-instance-id']+ '"' + ','
+             + '"svc-aic-site-id":"'+ req.query['svc-aic-site-id']+ '"'
+             +' } }';
+    Odl.Post('/restconf/operations/L3SDN-API:svc-topology-operation', options, formData, handleResult, res);
+});
+
+// delete request
+router.get('/wklist-delete', function(req, res) {
+    //console.dir(req.query);
+    Odl.Delete('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, handleResult, res);
+});
+
+// get request
+router.get('/getid',function(req, res) {
+    //console.dir(req.query);
+    Odl.GetID('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, res);
+});
+
+router.get('/getvnf', function(req,res) {
+    //console.log("/getvnf "+req.query);
+    Odl.GetVNF('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request']+'/vnf/',options,req,res);
+});
+router.get('/getvrlan', function(req,res) {
+       var vrtasks = [];
+       var reqstr = encodeURIComponent(req.query['request']);
+    vrtasks.push(function(callback) {
+               Odl.GetVRlan('/restconf/config/L3SDN-API:services/layer3-service-list/'+reqstr+'/service-data/vr-lan/',options,callback);
+    });
+       async.series(vrtasks, function(err,result){
+       var msgArray = new Array();
+        if(err){
+            msgArray.push(err);
+                       Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,res);
+                       //res.render("pages/err",
+                //{result:{code:'error', msg:"Unable to get vr-lan information: "+ String(err) }});
+            return;
+        }
+        else {
+            msgArray.push('Row successfully deleted from AIC_SITE table.');
+                       res.render("odl/listVRlan", 
+                       {
+                               svc_instance_id: req.query['request'],
+                               response_obj   : JSON.parse(result), header:process.env.MAIN_MENU
+                       });
+            return;
+        }
+    });
+});
+router.get('/getClusterStatus', function(req,res) {
+
+
+    var urltasks = [];
+    var _header = {'Host': host, 'Authorization': auth, 'Content-Type': 'application/yang.data+json'};
+    var _options = null;
+
+       var slist = properties.shard_list;
+       var hlist = properties.hostnameList;
+       var port = properties.clusterPort;
+       var prefix_url = properties.clusterPrefixURL;
+       var mid_url = properties.clusterMidURL;
+       var suffix_url = properties.clusterSuffixURL;
+       var urlArray = new Array();
+       var url_request='';
+       var shard=null, hostname=null;
+
+       // build array of urls from properties
+    for(var x=0; x<slist.length; x++)
+    {
+               shard = slist[x];
+               for(var y=0; y<hlist.length; y++)
+               {
+               hostname = hlist[y];
+
+               url_request = properties.odlProtocol + '://'
+               + hostname.hname + ':'
+               + port
+               + prefix_url
+               + (y+1)
+               + mid_url
+               + shard.shard_name
+               + suffix_url;
+
+               _options = {
+                               method                    : "GET",
+                               path                      : url_request,
+                       host                      : hostname.hname,
+                       headers           : _header,
+                       port              : port,
+                       rejectUnauthorized: false,
+                       strictSSL         : false
+                       };
+               urlArray.push(_options);
+       }
+       }
+
+       urlArray.forEach(function(request){
+       urltasks.push(function(callback) {
+               Odl.GetClusterStatus(request,callback);
+               });
+    });
+    async.series(urltasks, function(err,result){
+        var msgArray = new Array();
+        if(err){
+            msgArray.push(err);
+            res.render("pages/err",
+                {result:{code:'error', msg:"Unable to get status: "+ String(err) }, header:process.env.MAIN_MENU});
+            return;
+        }
+        else {
+               var msgArray = new Array();
+            msgArray.push('Sucess');
+            res.render("odl/cluster_status",
+            {
+                               result         : {code:'success', msg:msgArray}, 
+                response_obj   : result, header:process.env.MAIN_MENU
+            });
+            return;
+        }
+    });
+});
+
+
+module.exports = router;