| 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 |
| OdlInterface = require('./OdlInterface'); |
| |
| 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 |
| OdlInterface.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){ |
| OdlInterface.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']+ '"' |
| +' } }'; |
| OdlInterface.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); |
| OdlInterface.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); |
| OdlInterface.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); |
| OdlInterface.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) { |
| OdlInterface.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); |
| OdlInterface.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) { |
| OdlInterface.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; |