10d643349bb0dafb45c4fba3a5343ac9c48dd3cd
[sdnc/oam.git] / admportal / server / router / routes / sla.js
1 var express = require('express');
2 var router = express.Router();
3 var exec = require('child_process').exec;
4 //var util = require('util');
5 var fs = require('fs');
6 var dbRoutes = require('./dbRoutes');
7 var csp = require('./csp');
8 var multer = require('multer');
9 var bodyParser = require('body-parser');
10 //var sax = require('sax'),strict=true,parser = sax.parser(strict);
11 var async = require('async');
12
13
14 // SVC_LOGIC table columns
15 var _module=''; // cannot use module its a reserved word
16 var version='';
17 var rpc='';
18 var mode='';
19 var xmlfile='';
20
21
22 // used for file upload button, retain original file name
23 //router.use(bodyParser());
24 router.use(bodyParser.urlencoded({
25   extended: true
26 }));
27 //var upload = multer({ dest: process.cwd() + '/uploads/', rename: function(fieldname,filename){ return filename; } });
28
29 // multer 1.1
30 var storage = multer.diskStorage({
31   destination: function (req, file, cb) {
32     cb(null, process.cwd() + '/uploads/')
33   },
34   filename: function (req, file, cb) {
35     cb(null, file.originalname )
36   }
37 });
38
39 var upload = multer({
40     storage: storage
41 });
42
43
44 /*
45 router.use(multer({
46         dest: process.cwd() + '/uploads/',
47         rename: function(fieldname,filename){
48                 return filename;
49         }
50 }));
51 */
52
53
54 //router.use(express.json());
55 //router.use(express.urlencoded());
56 //router.use(multer({ dest: './uploads/' }));
57
58
59 // GET
60 router.get('/listSLA', csp.checkAuth, function(req,res) {
61         dbRoutes.listSLA(req,res,{code:'', msg:''} );
62 });
63
64 router.get('/activate', csp.checkAuth, function(req,res){
65
66         var _module = req.query.module;
67         var rpc = req.query.rpc;
68         var version = req.query.version;
69         var mode = req.query.mode;
70
71         var tasks = [];
72     tasks.push( function(callback) { dbRoutes.global_deactivate(req,res,_module,rpc,mode,callback); } );
73     tasks.push( function(callback) { dbRoutes.activate(req,res,_module,rpc,version,mode,callback); } );
74         async.series(tasks,  function(err,result){
75
76                  if (  err ) {
77                          dbRoutes.listSLA(req,res,{code:'failure', msg:'Failed to activate, '+ String(err) });
78          }
79                  else {
80                          dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully activated directed graph.'});
81                  }
82         });
83 });
84
85 router.get('/deactivate', csp.checkAuth, function(req,res){
86
87         var _module = req.query.module;
88         var rpc = req.query.rpc;
89         var version = req.query.version;
90         var mode = req.query.mode;
91
92         var tasks = [];
93     tasks.push( function(callback) { dbRoutes.deactivate(req,res,_module,rpc,version,mode,callback); } );
94     async.series(tasks,  function(err,result){
95
96          if (  err ) {
97              dbRoutes.listSLA(req,res,{code:'failure', msg:'There was an error uploading the file. '+ err });
98          }
99          else {
100              dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deactivated directed graph.'});
101          }
102     });
103 });
104
105 router.get('/deleteDG', csp.checkAuth, function(req,res){
106
107         var _module = req.query.module;
108         var rpc = req.query.rpc;
109         var version = req.query.version;
110         var mode = req.query.mode;
111
112         var tasks = [];
113     tasks.push( function(callback) { dbRoutes.deleteDG(req,res,_module,rpc,version,mode,callback); } );
114     async.series(tasks,  function(err,result){
115
116          if (  err ) {
117              dbRoutes.listSLA(req,res,{ code:'failure', msg:'There was an error uploading the file. '+ err });
118          }
119          else {
120              dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deleted directed graph.'});
121          }
122     });
123 });
124
125 router.post('/dgUpload', upload.single('filename'), function(req, res, next){
126
127     if(req.file.originalname){
128         if (req.file.originalname == 0) {
129                         
130             dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
131         }
132         fs.exists(req.file.path, function(exists) {
133             if(exists) {
134
135                 // parse xml
136                 try {
137                                         //dbRoutes.checkSvcLogic(req,res);
138
139                     var file_buf = fs.readFileSync(req.file.path, "utf8");
140
141                     // call Dan's svclogic shell script from here
142                                          var currentDB = dbRoutes.getCurrentDB();
143                      var commandToExec = process.cwd()
144                         + "/shell/svclogic.sh load "
145                         + req.file.path + " "
146                         + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
147
148                     console.log("commandToExec:" + commandToExec);
149                     child = exec(commandToExec ,function (error,stdout,stderr){
150                         if(error){
151                             console.error("error:" + error);
152                                                         //res.type('text/html').status(400).send( error);
153                                                         //return;
154                         }
155                         if(stderr){
156                                                         res.status(400).send(stderr);
157                                                         return;
158                         }
159                         if(stdout){
160                                                         res.status(200).send( new Buffer('Success'));
161                                                         return;
162                         }
163
164                         // remove the grave accents, the sax parser does not like them
165                         //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
166                         //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
167                         //dbRoutes.listSLA(req,res, resultObj);
168                     });
169                 } catch(ex) {
170                     // keep 'em silent
171                     console.error('sax error:'+ex);
172                                         res.status(400).send(ex);
173                                         return;
174                 }
175
176             } else {
177                                 res.status(400).send(new Buffer('Cannot find file.'));
178                                 return;
179                         
180             }
181         });
182     }
183     else {
184                 res.status(400).send(new Buffer('file does not exist\n'));
185     }
186         return;
187 });
188
189
190 // POST
191 router.post('/upload', csp.checkAuth, upload.single('filename'),  function(req, res, next){
192
193 console.log('file:'+ JSON.stringify(req.file));
194
195         if(req.file.originalname){
196         if (req.file.originalname.size == 0) {
197                         dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
198         }
199         fs.exists(req.file.path, function(exists) {
200             if(exists) {
201
202                                 // parse xml
203                                 try {
204                                         //dbRoutes.checkSvcLogic(req,res);
205
206                                         var currentDB = dbRoutes.getCurrentDB();
207                                 var file_buf = fs.readFileSync(req.file.path, "utf8");
208
209                                         // call Dan's svclogic shell script from here
210                                          var commandToExec = process.cwd()
211                                 + "/shell/svclogic.sh load "
212                                                 + req.file.path + " "
213                         + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
214
215                                 console.log("commandToExec:" + commandToExec);
216                                 child = exec(commandToExec ,function (error,stdout,stderr){
217                                 if(error){
218                                         console.error("error:" + error);
219                                                         dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
220                                                         return;
221                                 }
222                         if(stderr){
223                             console.error("stderr:" + JSON.stringify(stderr,null,2));
224                             var s_stderr = JSON.stringify(stderr);
225                             if ( s_stderr.indexOf("Saving") > -1 )
226                             {
227                                 dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
228                             }else {
229                                 dbRoutes.listSLA(req,res,{code:'failure', msg:stderr});
230                             }
231                             return;
232                         }
233                                 if(stdout){
234                                         console.log("stderr:" + stdout);
235                                                         dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
236                             return;
237                                                 }
238
239                                                 // remove the grave accents, the sax parser does not like them
240                                         //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
241                                                 //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
242                                                 //dbRoutes.listSLA(req,res, resultObj);
243                                         });
244                                 } catch(ex) {
245                                 // keep 'em silent
246                         console.error("error:" + ex);
247                                         dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
248                                 }
249
250             } else {
251                                 dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
252             }
253         });
254         }
255         else {
256                 dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
257         }
258 });
259
260 router.get('/printAsXml', csp.checkAuth, function(req,res){
261
262         try {
263                 //dbRoutes.checkSvcLogic(req,res);
264
265                 var _module = req.query.module;
266         var rpc = req.query.rpc;
267         var version = req.query.version;
268         var mode = req.query.mode;
269                 var currentDB = dbRoutes.getCurrentDB();
270
271        // call Dan's svclogic shell script from here
272        var commandToExec = process.cwd()
273                 + "/shell/svclogic.sh get-source "
274             + _module + " "
275             + rpc + " "
276             + mode + " "
277             + version + " "
278             + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
279
280                 console.log("commandToExec:" + commandToExec);
281
282         child = exec(commandToExec , {maxBuffer: 1024*5000}, function (error,stdout,stderr){
283                 if(error){
284                                 console.error("error:" + error);
285                 dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
286                                 return;
287             }
288             //if(stderr){
289                 //logger.info("stderr:" + stderr);
290             //}
291             if(stdout){
292                 console.log("OUTPUT:" + stdout);
293                 res.render('sla/printasxml', {result:{code:'success', 
294                                         msg:'Module : ' + _module + '\n' + 
295                                                 'RPC    : ' + rpc + '\n' + 
296                                                 'Mode   : ' + mode + '\n' +
297                                                 'Version: ' + version + '\n\n' + stdout}, header:process.env.MAIN_MENU});
298             }
299
300             // remove the grave accents, the sax parser does not like them
301             //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
302             //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
303             //dbRoutes.listSLA(req,res, resultObj);
304         });
305     } catch(ex) {
306                 console.error("error:" + ex);
307                 dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
308    }
309 });
310
311
312 router.get('/printAsGv', csp.checkAuth, function(req,res){
313
314         try {   
315                 //dbRoutes.checkSvcLogic(req,res);
316
317         var _module = req.query.module;
318         var rpc = req.query.rpc;
319         var version = req.query.version;
320         var mode = req.query.mode;
321                 var currentDB = dbRoutes.getCurrentDB();
322 console.log('currentDB='+currentDB);
323
324        // call Dan's svclogic shell script from here
325        var commandToExec = process.cwd()
326             + "/shell/svclogic.sh print "
327             + _module + " "
328             + rpc + " "
329             + mode + " "
330             + version + " "
331             + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB
332             + " | dot -Tpng";
333
334         console.log("commandToExec:" + commandToExec);
335
336         child = exec(commandToExec , 
337                                 {encoding:'base64',maxBuffer:5000*1024}, function (error,stdout,stderr){
338             if(error){
339                 console.error("error:" + error);
340                 dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
341                                 return;
342             }
343             if(stderr){
344                 console.error("stderr:" + stderr);
345             }
346             if(stdout){
347                 //logger.info("OUTPUT:" + stdout);
348                 //res.render('sla/printasgv', result = {code:'success',
349                     //msg:new Buffer(stdout,'base64')} );
350                 res.render('sla/printasgv', {result:{code:'success', 
351                                                           module: _module,
352                                                           rpc: rpc,
353                                                           version: version,
354                                                           mode:mode,
355                                                           msg:stdout}, header:process.env.MAIN_MENU});
356             }
357
358             // remove the grave accents, the sax parser does not like them
359             //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
360             //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
361             //dbRoutes.listSLA(req,res, resultObj);
362         });
363     } catch(ex) {
364                 console.error("error:" + ex);
365         dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
366    }
367
368 });
369 module.exports = router;