Updates for ODL Neon
[ccsdk/distribution.git] / dgbuilder / red / server.js
index 91bee45..de945b7 100644 (file)
@@ -226,6 +226,7 @@ function createServer(_server,_settings) {
             slaActions.deleteDG(jsonObj,req,res);
         });
 
+
         app.get("/getCurrentSettings",function(req,res) {
                var appDir = path.dirname(require.main.filename);
                var userDir = appDir + "/" + settings.userDir;
@@ -304,8 +305,16 @@ function createServer(_server,_settings) {
                function(req,res) {
                var appDir = path.dirname(require.main.filename);
                var gitLocalRepository =  settings.gitLocalRepository;
+               /*
+               var userDir=settings.userDir;
+               var outputDir  = appDir + "/" +  userDir + "/orig_dgs";
+               if (!fs.existsSync(outputDir)){
+                       fs.mkdirSync(outputDir);
+               }
+               */
                //console.dir(req);
                 var filePath = req.query.filePath;
+                //var currTabId = req.query.currTabId;
                 var fullFilePath = gitLocalRepository +"/" + filePath ;
                //console.log("fullFilePath:" + fullFilePath);  
                var exec = require('child_process').exec;
@@ -325,6 +334,15 @@ function createServer(_server,_settings) {
                                console.log("stderr:" + stderr);
                        }
                        if(stdout){
+                               /*
+                               var jsonStr= stdout;
+                               var jsonStrFormatted=[];
+                               try{
+                                       jsonStrFormatted= JSON.parse(jsonStr);
+                               }catch(e){
+                               }
+                               fs.writeFileSync( outputDir + "/" +currTabId,JSON.stringify(jsonStrFormatted,null,4) ); 
+                               */
                                //console.log("output:" + stdout);
                                res.send(200,{'stdout':stdout,'stderr':stderr});
                        }
@@ -332,6 +350,51 @@ function createServer(_server,_settings) {
                });
        });
 
+        app.post("/saveImportedDG",
+            express.json(),
+            function(req,res) {
+               var qs = require('querystring');
+               var body = '';
+               req.on('data', function (data) {
+                       body += data;
+               });
+               req.on('end', function () {
+                       var appDir = path.dirname(require.main.filename);
+                       var userDir=settings.userDir;
+                       var outputDir  = appDir + "/" +  userDir + "/orig_dgs";
+                       if (!fs.existsSync(outputDir)){
+                               fs.mkdirSync(outputDir);
+                       }
+                       var post = qs.parse(body);
+                       var importedNodes = post.importedNodes;
+                       var currTabId = post.currTabId;
+                       fs.writeFileSync( outputDir + "/" +currTabId,importedNodes );   
+                       res.send(200,{"output":"SUCCESS"});
+               });
+        });
+
+       app.post("/saveImportedDG",
+            express.json(),
+            function(req,res) {
+                var qs = require('querystring');
+                var body = '';
+                req.on('data', function (data) {
+                        body += data;
+                });
+                req.on('end', function () {
+                        var appDir = path.dirname(require.main.filename);
+                        var userDir=settings.userDir;
+                        var outputDir  = appDir + "/" +  userDir + "/orig_dgs";
+                        if (!fs.existsSync(outputDir)){
+                                fs.mkdirSync(outputDir);
+                        }
+                        var post = qs.parse(body);
+                        var importedNodes = post.importedNodes;
+                        var currTabId = post.currTabId;
+                        fs.writeFileSync( outputDir + "/" +currTabId,importedNodes );
+                        res.send(200,{"output":"SUCCESS"});
+                });
+        });
 
         app.get("/gitcheckout", function(req,res) {
                var appDir = path.dirname(require.main.filename);
@@ -469,6 +532,7 @@ function createServer(_server,_settings) {
                        console.log("Error:" + e);
                }
        }
+
        function getCurrentDate(){
                var d = new Date();
                var mm = d.getMonth() + 1;
@@ -563,17 +627,26 @@ function createServer(_server,_settings) {
                                        //console.log("fileName:" + fileName);
                                        var renameFilePath = sharedDir + "/backups/" + renameOldfileTo;
                                        //console.log("localfile:" + localfile);
-                                       fs.rename(file,renameFilePath, function (err) {
-                                               if(err){
-                                                       console.log('Error :' + err);
-                                               }
+                                       if (fs.existsSync(file)) {
+                                               fs.rename(file,renameFilePath, function (err) {
+                                                       if(err){
+                                                               console.log('Error :' + err);
+                                                       }
+                                                       //write the newer version
+                                                       writeToFile(file,jsonStr);
+                                                       res.setHeader('Content-disposition', 'attachment; filename=' + fileName);
+                                                       res.setHeader('Content-type', 'application/json');
+                                                       //res.download(file);
+                                                       res.end(jsonStr);
+                                               });
+                                       }else{
                                                //write the newer version
                                                writeToFile(file,jsonStr);
                                                res.setHeader('Content-disposition', 'attachment; filename=' + fileName);
                                                res.setHeader('Content-type', 'application/json');
                                                //res.download(file);
                                                res.end(jsonStr);
-                                       });
+                                       }
                                }
                        });
        });
@@ -873,6 +946,12 @@ function createServer(_server,_settings) {
                //var release = userDir.replace(/releases/g,"release");
                res.json({"release" : userDir});
         });
+        app.get("/readFile",function(req,res) {
+               var userDir=settings.userDir;
+               var filePath = userDir + "/" +  req.query.filePath;
+               var buf = fs.readFileSync(filePath, "utf8");
+               res.json({"output" :buf });
+        });
         app.post("/getFiles/:id",function(req,res) {
             var id = req.params.id;
                //console.log("id:" + id);
@@ -930,12 +1009,19 @@ function createServer(_server,_settings) {
                        var dbPassword = post["dbPassword"];
                        var gitLocalRepository = post["gitLocalRepository"];
                        var performGitPull = post["performGitPull"];
+                       var restConfUrl = post["restConfUrl"];
+                       var restConfUser = post["restConfUser"];
+                       var restConfPassword = post["restConfPassword"];
+                       var emailAddress = post["emailAddress"];
+                       var formatXML = post["formatXML"];
+                       var formatJSON = post["formatJSON"];
                        var appDir = path.dirname(require.main.filename);
                        var userDir = appDir + "/" + settings.userDir;
                        console.log("userDir:" + userDir);
                        try{
                                var settingsFile = userDir + "/customSettings.js"; 
                                var jsonObj = require(settingsFile);
+                               jsonObj.emailAddress = emailAddress;
                                jsonObj.flowFile = jsonObj.flowFile.replace(appDir + "/",'');
                                jsonObj.dbHost = dbHost;
                                jsonObj.dbPort = dbPort;
@@ -944,6 +1030,11 @@ function createServer(_server,_settings) {
                                jsonObj.dbPassword = dbPassword;
                                jsonObj.gitLocalRepository = gitLocalRepository;
                                jsonObj.performGitPull = performGitPull;
+                               jsonObj.restConfUrl = restConfUrl;
+                               jsonObj.restConfUser = restConfUser;
+                               jsonObj.restConfPassword = restConfPassword;
+                               jsonObj.formatXML = formatXML;
+                               jsonObj.formatJSON = formatJSON;
                                var updatedSettings = jsonObj;
 
                                var settingsStr= "module.exports=" + JSON.stringify(updatedSettings,null,4);
@@ -1084,8 +1175,7 @@ function createServer(_server,_settings) {
                                var matchedArr = fileName.match(/.zip$/);
                                if(matchedArr != null && matchedArr.length >0){
                                        console.log("uploaded zip file" + fileName);
-                                       //commandToExec = appDir + "/tools/generate_props_from_yangs_zip.sh " + yangFileFullPath ;
-                                       commandToExec = appDir + "/tools/generate_props_from_yang.sh " + yangFileFullPath ;
+                                       commandToExec = appDir + "/tools/generate_props_from_yangs_zip.sh " + yangFileFullPath ;
                                }else{
                                        commandToExec = appDir + "/tools/generate_props_from_yang.sh " + yangFileFullPath ;
                                        console.log("uploaded file" + fileName);
@@ -1135,6 +1225,131 @@ function createServer(_server,_settings) {
                        });
                });
         });
+
+       function getFormattedDate(){
+               var d = new Date();
+               var mm = d.getMonth() + 1;
+               var dd =   d.getDate();
+               var yyyy = d.getYear() + 1900;
+               var hr = d.getHours();
+               var min = d.getMinutes();
+               var sec = d.getSeconds();
+               if(mm<10) mm = "0" + mm;
+               if(dd<10) dd = "0" + dd;
+               if(hr<10) hr = "0" + hr;
+               if(min<10) min = "0" + min;
+               if(sec<10) sec = "0" + sec;
+               var formatedValue = yyyy + "-" + mm + "-" + dd +  "_" + hr + ":" + min + ":" + sec;
+               return formatedValue;
+       }
+
+
+        app.post("/saveTestDGInput",
+            express.json({'limit':'16mb'}),
+            function(req,res) {
+               var qs = require('querystring');
+               var body = '';
+               req.on('data', function (data) {
+                       body += data;
+               });
+               req.on('end', function () {
+                       var appDir = path.dirname(require.main.filename);
+                       var inputFilesDir = appDir + "/" + "inputFiles";
+                       if (!fs.existsSync(inputFilesDir)){
+                               fs.mkdirSync(inputFilesDir);
+                       }
+                       var post = qs.parse(body);
+                       var moduleName = post['moduleName'];
+                       var rpcName = post['rpcName'];
+                       var fullFileName = inputFilesDir + "/" +moduleName + "_" + rpcName + "_" + getFormattedDate();
+                       var inputStr = post['inputStr'];
+                        writeToFile(fullFileName,inputStr);
+                       res.end();
+               });
+       });
+
+        app.post("/getInputFiles",function(req,res) {
+                       var qs = require('querystring');
+                       var body = '';
+                       req.on('data', function (data) {
+                               body += data;
+                       });
+                       req.on('end', function () {
+                               var appDir = path.dirname(require.main.filename);
+                               var inputFilesDir = appDir + "/" + "inputFiles";
+                               if (!fs.existsSync(inputFilesDir)){
+                                       fs.mkdirSync(inputFilesDir);
+                               }
+                               var post = qs.parse(body);
+                               var moduleName = post['moduleName'];
+                               var rpcName = post['rpcName'];
+                               var glob = require("glob");
+                               var filePatt = "/**/" + moduleName + "_" + rpcName + "*";
+                               glob(inputFilesDir + filePatt, null, function (er, files) {
+                                       var filesList =[];
+                                       for(var i=0;files!= null && i<files.length;i++){
+                                               var f = files[i].replace( new RegExp(inputFilesDir + "/", "g" ), "" );
+                                               filesList.push(f); 
+                                       }
+                                       res.json({"files" : filesList});
+                               });
+                       });
+       });
+
+        app.post("/deleteInputFile",
+            express.json(),
+            function(req,res) {
+               var qs = require('querystring');
+               var body ="";
+                req.on('data', function (data) {
+                       body += data;
+               });
+               req.on('end',function(){
+                       var post = qs.parse(body);
+                       var fileName = post["fileName"];
+                       var appDir = path.dirname(require.main.filename);
+                       var filePath = appDir + "/inputFiles/" + fileName;
+                       try{
+                               fs.unlinkSync(filePath);
+                               res.send({"status" :"SUCCESS"});
+                       }catch(err){
+                               console.log("error" + err);
+                               res.send({"status" :"ERROR"});
+                       }
+                       //console.log("prevPassword:" + settings.httpAuth.pass );
+               });
+            });
+
+        app.post("/loadInputFile",
+            express.json(),
+            function(req,res) {
+               var qs = require('querystring');
+               var body ="";
+                req.on('data', function (data) {
+                       body += data;
+               });
+               req.on('end',function(){
+                       var post = qs.parse(body);
+                       var fileName = post["fileName"];
+                       //console.log("fileName" + fileName);
+                       var appDir = path.dirname(require.main.filename);
+                       var filePath = appDir + "/inputFiles/" + fileName;
+                       //console.log("filePath:" + filePath);
+                       try{
+                               fs.readFile(filePath, 'utf8', function (err,data) {
+                                       if (err) {
+                                               return console.log(err);
+                                       }
+                                       res.json({'input':data});
+                               });     
+                       }catch(err){
+                               console.log("error" + err);
+                               res.json({"status" :"ERROR"});
+                       }
+               });
+            });
+
+
         app.get("/getYangFiles",function(req,res) {
                var appDir = path.dirname(require.main.filename);
                var yangFilesDir=appDir + "/yangFiles";
@@ -1237,6 +1452,35 @@ function uninstallModule(module) {
 
 function start() {
     var defer = when.defer();
+       //split and save startup dgs if any from flows.json file
+               var appDir = path.dirname(require.main.filename);
+               var userDir = appDir + "/" + settings.userDir;
+               var flowFile = settings.flowFile;
+               var outputDir = userDir + "/orig_dgs";
+               console.log("appDir:" + appDir);
+               console.log("flowFile:" + flowFile);
+               var execFile = require('child_process').execFile;
+               var commandToExec = appDir + "/tools/splitFlows.sh" ;
+               console.log("commandToExec:" + commandToExec);
+               var args = [flowFile,outputDir];
+               var child = execFile(commandToExec ,args,function (error,stdout,stderr){
+                if(error){
+                       console.log("Error occured:" + error);
+                       if(stderr){
+                               console.log("stderr:" + stderr);
+                       }else{
+                               console.log("error:" + error);
+                       }
+                }else{
+                       if(stderr){
+                               console.log("stderr:" + stderr);
+                       }
+                       if(stdout){
+                               console.log("output:" + stdout);
+                       }
+               }
+               });
+               
     
     storage.init(settings).then(function() {
         settings.load(storage).then(function() {