var express = require('express'); var router = express.Router(); var exec = require('child_process').exec; //var util = require('util'); var fs = require('fs'); var dbRoutes = require('./dbRoutes'); var csp = require('./csp'); var multer = require('multer'); var bodyParser = require('body-parser'); //var sax = require('sax'),strict=true,parser = sax.parser(strict); var async = require('async'); // SVC_LOGIC table columns var _module=''; // cannot use module its a reserved word var version=''; var rpc=''; var mode=''; var xmlfile=''; // used for file upload button, retain original file name //router.use(bodyParser()); router.use(bodyParser.urlencoded({ extended: true })); //var upload = multer({ dest: process.cwd() + '/uploads/', rename: function(fieldname,filename){ return filename; } }); // multer 1.1 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, process.cwd() + '/uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname ) } }); var upload = multer({ storage: storage }); /* router.use(multer({ dest: process.cwd() + '/uploads/', rename: function(fieldname,filename){ return filename; } })); */ //router.use(express.json()); //router.use(express.urlencoded()); //router.use(multer({ dest: './uploads/' })); // GET router.get('/listSLA', csp.checkAuth, dbRoutes.checkDB, function(req,res) { dbRoutes.listSLA(req,res,{code:'', msg:''} ); }); router.get('/activate', csp.checkAuth, dbRoutes.checkDB, function(req,res){ var _module = req.query.module; var rpc = req.query.rpc; var version = req.query.version; var mode = req.query.mode; var tasks = []; tasks.push( function(callback) { dbRoutes.global_deactivate(req,res,_module,rpc,mode,callback); } ); tasks.push( function(callback) { dbRoutes.activate(req,res,_module,rpc,version,mode,callback); } ); async.series(tasks, function(err,result){ if ( err ) { dbRoutes.listSLA(req,res,{code:'failure', msg:'Failed to activate, '+ String(err) }); } else { dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully activated directed graph.'}); } }); }); router.get('/deactivate', csp.checkAuth, dbRoutes.checkDB, function(req,res){ var _module = req.query.module; var rpc = req.query.rpc; var version = req.query.version; var mode = req.query.mode; var tasks = []; tasks.push( function(callback) { dbRoutes.deactivate(req,res,_module,rpc,version,mode,callback); } ); async.series(tasks, function(err,result){ if ( err ) { dbRoutes.listSLA(req,res,{code:'failure', msg:'There was an error uploading the file. '+ err }); } else { dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deactivated directed graph.'}); } }); }); router.get('/deleteDG', csp.checkAuth, dbRoutes.checkDB, function(req,res){ var _module = req.query.module; var rpc = req.query.rpc; var version = req.query.version; var mode = req.query.mode; var tasks = []; tasks.push( function(callback) { dbRoutes.deleteDG(req,res,_module,rpc,version,mode,callback); } ); async.series(tasks, function(err,result){ if ( err ) { dbRoutes.listSLA(req,res,{ code:'failure', msg:'There was an error uploading the file. '+ err }); } else { dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deleted directed graph.'}); } }); }); router.post('/dgUpload', dbRoutes.checkDB, upload.single('filename'), function(req, res, next){ if(req.file.originalname){ if (req.file.originalname == 0) { dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'}); } fs.exists(req.file.path, function(exists) { if(exists) { // parse xml try { //dbRoutes.checkSvcLogic(req,res); var file_buf = fs.readFileSync(req.file.path, "utf8"); // call Dan's svclogic shell script from here var currentDB = dbRoutes.getCurrentDB(); var commandToExec = process.cwd() + "/shell/svclogic.sh load " + req.file.path + " " + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB; console.log("commandToExec:" + commandToExec); child = exec(commandToExec ,function (error,stdout,stderr){ if(error){ console.error("error:" + error); //res.type('text/html').status(400).send( error); //return; } if(stderr){ res.status(400).send(stderr); return; } if(stdout){ res.status(200).send( new Buffer('Success')); return; } // remove the grave accents, the sax parser does not like them //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close(); //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res); //dbRoutes.listSLA(req,res, resultObj); }); } catch(ex) { // keep 'em silent console.error('sax error:'+ex); res.status(400).send(ex); return; } } else { res.status(400).send(new Buffer('Cannot find file.')); return; } }); } else { res.status(400).send(new Buffer('file does not exist\n')); } return; }); // POST router.post('/upload', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res, next){ console.log('file:'+ JSON.stringify(req.file)); if(req.file.originalname){ if (req.file.originalname.size == 0) { dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'}); } fs.exists(req.file.path, function(exists) { if(exists) { // parse xml try { //dbRoutes.checkSvcLogic(req,res); var currentDB = dbRoutes.getCurrentDB(); var file_buf = fs.readFileSync(req.file.path, "utf8"); // call Dan's svclogic shell script from here var commandToExec = process.cwd() + "/shell/svclogic.sh load " + req.file.path + " " + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB; console.log("commandToExec:" + commandToExec); child = exec(commandToExec ,function (error,stdout,stderr){ if(error){ console.error("error:" + error); dbRoutes.listSLA(req,res,{code:'failure',msg:error} ); return; } if(stderr){ console.error("stderr:" + JSON.stringify(stderr,null,2)); var s_stderr = JSON.stringify(stderr); if ( s_stderr.indexOf("Saving") > -1 ) { dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'}); }else { dbRoutes.listSLA(req,res,{code:'failure', msg:stderr}); } return; } if(stdout){ console.log("stderr:" + stdout); dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'}); return; } // remove the grave accents, the sax parser does not like them //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close(); //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res); //dbRoutes.listSLA(req,res, resultObj); }); } catch(ex) { // keep 'em silent console.error("error:" + ex); dbRoutes.listSLA(req,res,{code:'failure',msg:ex} ); } } else { dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'}); } }); } else { dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'}); } }); router.get('/printAsXml', csp.checkAuth, dbRoutes.checkDB, function(req,res){ try { //dbRoutes.checkSvcLogic(req,res); var _module = req.query.module; var rpc = req.query.rpc; var version = req.query.version; var mode = req.query.mode; var currentDB = dbRoutes.getCurrentDB(); // call Dan's svclogic shell script from here var commandToExec = process.cwd() + "/shell/svclogic.sh get-source " + _module + " " + rpc + " " + mode + " " + version + " " + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB; console.log("commandToExec:" + commandToExec); child = exec(commandToExec , {maxBuffer: 1024*5000}, function (error,stdout,stderr){ if(error){ console.error("error:" + error); dbRoutes.listSLA(req,res,{code:'failure',msg:error} ); return; } //if(stderr){ //logger.info("stderr:" + stderr); //} if(stdout){ console.log("OUTPUT:" + stdout); res.render('sla/printasxml', {result:{code:'success', msg:'Module : ' + _module + '\n' + 'RPC : ' + rpc + '\n' + 'Mode : ' + mode + '\n' + 'Version: ' + version + '\n\n' + stdout}, header:process.env.MAIN_MENU}); } // remove the grave accents, the sax parser does not like them //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close(); //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res); //dbRoutes.listSLA(req,res, resultObj); }); } catch(ex) { console.error("error:" + ex); dbRoutes.listSLA(req,res,{code:'failure',msg:ex} ); } }); router.get('/printAsGv', csp.checkAuth, dbRoutes.checkDB, function(req,res){ try { //dbRoutes.checkSvcLogic(req,res); var _module = req.query.module; var rpc = req.query.rpc; var version = req.query.version; var mode = req.query.mode; var currentDB = dbRoutes.getCurrentDB(); console.log('currentDB='+currentDB); // call Dan's svclogic shell script from here var commandToExec = process.cwd() + "/shell/svclogic.sh print " + _module + " " + rpc + " " + mode + " " + version + " " + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB + " | dot -Tpng"; console.log("commandToExec:" + commandToExec); child = exec(commandToExec , {encoding:'base64',maxBuffer:5000*1024}, function (error,stdout,stderr){ if(error){ console.error("error:" + error); dbRoutes.listSLA(req,res,{code:'failure',msg:error} ); return; } if(stderr){ console.error("stderr:" + stderr); } if(stdout){ //logger.info("OUTPUT:" + stdout); //res.render('sla/printasgv', result = {code:'success', //msg:new Buffer(stdout,'base64')} ); res.render('sla/printasgv', {result:{code:'success', module: _module, rpc: rpc, version: version, mode:mode, msg:stdout}, header:process.env.MAIN_MENU}); } // remove the grave accents, the sax parser does not like them //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close(); //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res); //dbRoutes.listSLA(req,res, resultObj); }); } catch(ex) { console.error("error:" + ex); dbRoutes.listSLA(req,res,{code:'failure',msg:ex} ); } }); module.exports = router;