blob: 3882afcc25fd8bdf2396609e0eb3dbba88cb2e48 [file] [log] [blame]
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;