[RENAME] Wrong tag for dgbuilder image
[sdnc/oam.git] / admportal / server / router / routes / OdlInterface.js
1 // OdlInterface.js
2 var https = require('https');
3 var http = require('http');
4 var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
5
6
7 var OdlInterface = function() {
8     // Call ODL page
9     //  get(uri,res)
10     //  post(uri,data, res)
11
12         var _healthcheck = function(options, callback)
13         {
14                 // Setup request to ODL side
15                 console.log('options:' + JSON.stringify(options,null,2));
16                 var request = https.request(options, function(response) {
17                         
18                         var response_str = '';
19                 // Read the response from ODL side
20                 response.on('data', function(chunk) {
21                                 response_str += chunk;
22                 });
23                         
24                         response.on('end', function() 
25                         {
26                                 //logger.debug(response_str);
27                                 if(response.statusCode == 200)
28                                 {
29                                         console.log('200 OK');
30                                         callback(null, response_str);
31                                         return;
32                                 }
33                                 else{
34                                         console.log('not ok status=' + response.statusCode);
35                                         callback(response_str, 'statusCode=' + response.statusCode + '\n' + response_str);
36                                         return;
37                                 }
38                         });
39                 });
40                 request.end()
41
42                 request.on('error', function(err) {
43                         console.error('err:' + err);
44                         callback(err, err);
45                         return;
46                 });
47         }
48
49     var _get = function(uri,options,callback,req,res) 
50         {
51
52                 options.method = "GET";
53                 options.path = uri;
54
55                 // Setup request to ODL side
56                 console.log('options:' + JSON.stringify(options,null,2));
57                 var request = https.request(options, function(response) {
58                 // console.dir(response);
59                 console.log('STATUS: ' + response.statusCode);
60                 var response_str = '';
61                 // Read the response from ODL side
62                 response.on('data', function(chunk) {
63                                 response_str += chunk;
64                 });
65
66                 response.on('end', function() 
67                         {
68                                 console.log(response_str);
69
70                                 if(response.statusCode == 200)
71                                 {
72                                 // make sure response starts with JSON string
73                         if (response_str && response_str.indexOf('{') == 0) {
74                         //console.log("response: ", result);
75                                                 
76                                         req.session.l3sdnPageInfo = undefined;
77                                         var x=0;
78                                         var pageList = [];
79                                         var obj_rows = [];
80                                         var rows = [];
81                                         var robj = JSON.parse(response_str);
82
83                                         if ( typeof robj['services']['layer3-service-list'] != 'undefined' )
84                                         {
85                                                 for( var i=0; i<robj['services']['layer3-service-list'].length; i++)
86                                                 {
87                                                         obj_rows.push( robj['services']['layer3-service-list'][i] );
88                                                 }
89                                         }
90                                         else
91                                         {
92                                 res.render('pages/err', {result:{code:'failure', msg:'no data Error: ' + String(err)}, header:process.env.MAIN_MENU});
93                                                 callback(null,response_str,res);
94                                                 return;
95                                         }
96  
97                                 var rows = [];
98                                         var l3sdnPageInfo =
99                                 {
100                                 'totalRows'   : obj_rows.length,
101                                 'pageSize'    : 18,
102                                 'pageCount'   : parseInt(obj_rows.length/18),
103                                 'currentPage' : 1
104                                 }
105
106                                         while (obj_rows.length > 0){
107                                 pageList.push(obj_rows.splice(0,l3sdnPageInfo.pageSize));
108                                 }
109                                         l3sdnPageInfo.rows = pageList[0]; // first page
110                                         l3sdnPageInfo.pages = pageList; // all pages
111
112
113                                         req.session.l3sdnPageInfo = l3sdnPageInfo;
114                                         var privObj = req.session.loggedInAdmin;
115
116                         res.render('odl/listWklst', 
117                                         {
118                                 pageInfo  : l3sdnPageInfo,
119                                 result    : {code:'', msg:''},
120                                                 privilege : privObj, header:process.env.MAIN_MENU
121                                 });
122
123
124                         } else {
125                         res.render('pages/err', {result:{code:'failure', msg:'no data Error: ' + String(err)}, header:process.env.MAIN_MENU});
126                         }
127                         callback(null, response_str, res);
128                         }
129                         else
130                         {
131                                 callback(response_str,response_str,res);
132                                 //res.render('pages/err', {result:{code:'failure', msg:'Failed to retrieve worklist. ' + response_str}});
133                         }
134                 });
135                 });
136
137                 request.end()
138
139                 request.on('error', function(err) {
140                 callback(err,null, res);
141                 });
142     }
143
144     var _getid = function(uri,options,res) {
145         options.method = "GET";
146         options.path = uri;
147
148         // Setup request to ODL side
149         var request = https.request(options, function(response) {
150             // console.dir(response);
151             //console.log('STATUS: ' + response.statusCode);
152             var response_str = '';
153             // Read the response from ODL side
154             response.on('data', function(chunk) {
155                         response_str += chunk;
156             });
157
158             response.on('end', function() {
159                         if(response.statusCode == 200){
160                                 if(response_str){
161                                         //console.log("response: ", response_str);
162                                         res.render('odl/view', {response_obj: JSON.parse(response_str), header:process.env.MAIN_MENU});
163                                 }
164                                 else{
165                                         //console.log("no data");
166                                         res.render('pages/err', {result:{code:'failure', msg:'Failed to retrieve worklist'}, header:process.env.MAIN_MENU});
167                                 }
168                         }
169                         else {
170                                 //console.log("bad status code:", response.statusCode);
171                                 res.render('pages/err', {result:{code:'failure', msg:'Failed to retrieve worklist. Status Code:' + response.statusCode}, header:process.env.MAIN_MENU});
172                         }
173             });
174         });
175
176         request.end()
177
178         request.on('error', function(err) {
179                 //console.log(err);
180                 res.render('pages/err', {result:{code:'failure', msg:'Failed to get worklist item. ' + String(err)}, header:process.env.MAIN_MENU});
181         });
182     }
183
184         var _getvrlan = function(uri,options,callback) {
185     options.method = "GET";
186     options.path = uri;
187
188
189         //callback(null,'');    
190     // Setup request to ODL side
191     var request = https.request(options, function(response) {
192         // console.dir(response);
193         //console.log('STATUS: ' + response.statusCode);
194         var response_str = '';
195         // Read the response from ODL side
196         response.on('data', function(chunk) {
197             response_str += chunk;
198         });
199
200
201         response.on('end', function() {
202             if(response.statusCode == 200){
203                 if(response_str){
204                                         callback(null,response_str);
205                                         return;
206                 }
207                 else{
208                                         callback('err','no data');
209                                         return;
210                 }
211             }
212             else {
213                                 callback('error',response.statusCode);
214                                 return;
215             }
216         });
217     });
218
219     request.end()
220
221     request.on('error', function(err) {
222                 callback(err,String(err));
223                 return;
224     });
225     }
226
227
228         var _getvnf = function(uri,options,req,res) {
229     options.method = "GET";
230     options.path = uri;
231
232     // Setup request to ODL side
233     var request = https.request(options, function(response) {
234         // console.dir(response);
235         //console.log('STATUS: ' + response.statusCode);
236         var response_str = '';
237         // Read the response from ODL side
238         response.on('data', function(chunk) {
239             response_str += chunk;
240         });
241
242         response.on('end', function() {
243             if(response.statusCode == 200){
244                 if(response_str){
245                     //console.log("response: ", response_str);
246                     res.render('odl/viewvnf', { vnf_obj: JSON.parse(response_str),
247                                                                                            request_id: req.query['request'], header:process.env.MAIN_MENU });
248                 }
249                 else{
250                     //console.log("no data");
251                                         res.render('pages/err', {result:{code:'failure', msg:'Failed to retrieve worklist item.'}, header:process.env.MAIN_MENU});
252                 }
253             }
254             else {
255                 //console.log("bad status code:", response.statusCode);
256                                 res.render('pages/err', {result:{code:'failure', msg:'Failed to retrieve worklist. Status Code:' + response.statusCode}, header:process.env.MAIN_MENU});
257             }
258         });
259     });
260
261     request.end()
262
263     request.on('error', function(err) {
264         //console.log(err);
265         res.render('pages/err', {result:{code:'failure', msg:'Failed getting VNF information. Error: '+ String(err)}, header:process.env.MAIN_MENU});
266     });
267     }
268
269         var _getPreloadVnfData = function(uri,options,res,callback) {
270
271     options.method = "GET";
272     options.path = uri;
273
274
275     // Setup request to ODL side
276         var protocol;
277         if ( process.env.NODE_ENV != 'production' ){
278         protocol = http;
279         }else{
280         protocol = https;
281         }
282
283 console.log('NODE_ENV:' + process.env.NODE_ENV);
284 console.log('GET: ' + JSON.stringify(options,null,4));
285
286     var request = protocol.request(options, function(response) {
287
288         var response_str = '';
289
290         // Read the response from ODL side
291         response.on('data', function(chunk) {
292             response_str += chunk;
293         });
294
295         response.on('end', function() {
296 console.log('response_str: ' + response_str);
297 console.log('response.statusCode: ' + response.statusCode);
298             if(response.statusCode == 200){
299                 if(response_str){
300                                                 callback(null,response_str);
301                                                 return;
302                                 }
303                 else{
304                                         callback('Error - No data returned.');
305                                         return;
306                 }
307             }
308             else {
309                                 if ( response.statusCode == 404 )
310                                 {
311                                         callback('HTTP Status Code:' + response.statusCode + '.  Not Found.');
312                                         return;
313                                 }
314                                 else if ( response_str.length > 0 )
315                                 {
316                                         callback('HTTP Status Code:' + response.statusCode + '.  ' + response_str);
317                                         return;
318                                 }
319                                 else
320                                 {
321                                         callback('HTTP Status Code:' + response.statusCode + '.  No data returned.');
322                                         return;
323                                 }
324             }
325         });
326     });
327
328     request.end()
329
330     request.on('error', function(err) {
331                 callback(err);
332                 return;
333     });
334     }
335
336 var _getClusterStatus = function(options,callback) {
337     //options.method = "GET";
338     //options.path = uri;
339
340     console.log('URI='+options.path);
341
342     // Setup request to ODL side
343     var protocol = properties.odlProtocol;
344 console.log('protocol=' + protocol);
345     if ( protocol == 'http' || protocol == 'HTTP' )
346     {
347 console.log('http request');
348         var request = http.request(options, function(response) {
349                 var response_str = '';
350
351                 // Read the response from ODL side
352                 response.on('data', function(chunk) {
353                         response_str += chunk;
354                 });
355
356
357                 response.on('end', function() {
358 console.log('HTTP StatusCode='+response.statusCode);
359                         if(response.statusCode == 200){
360                                 if(response_str){
361 console.log('response_str='+response_str);
362                                         callback(null,JSON.parse(response_str));
363                                         return;
364                                 }
365                                 else{
366                                         callback(null,'no data');
367                                         return;
368                                 }
369                         }
370                         else {
371                                 callback(null,response.statusCode);
372                                 return;
373                         }
374                 });
375                 });
376
377         request.end()
378
379         request.on('error', function(err) {
380                 callback(null,String(err));
381                 return;
382         });
383     }
384     else {
385         var request = https.request(options, function(response) {
386                 var response_str = '';
387
388                 // Read the response from ODL side
389                 response.on('data', function(chunk) {
390                         response_str += chunk;
391                 });
392
393
394                 response.on('end', function() {
395                         if(response.statusCode == 200){
396                                 if(response_str){
397 console.log('response_str='+response_str);
398                                         callback(null,JSON.parse(response_str));
399                                         return;
400                                 }
401                                 else{
402                                         callback(null,'no data');
403                                         return;
404                                 }
405                         }
406                         else {
407                                 callback(null,response.statusCode);
408                                 return;
409                         }
410                 });
411                 });
412
413         request.end()
414
415         request.on('error', function(err) {
416                 callback(null,String(err));
417                 return;
418         });
419     }
420 }
421
422     var _delete = function(uri,options,res,callback) {
423                 options.method = 'DELETE';
424                 options.path = uri;
425
426
427         // Setup request to ODL side
428         //var request = https.request(options, function(response) {
429         var request = http.request(options, function(response) {
430             //console.log('STATUS: ' + response.statusCode);
431             var response_str = '';
432             // Read the response from ODL side
433             response.on('data', function(chunk) {
434                 response_str += chunk;
435             });
436
437             response.on('end', function() {
438                                 if(response.statusCode == 200){
439                     callback(null);
440                     return;
441                 }
442                 else {
443                     callback('Error:' + response_str);
444                     return;
445                 }
446             });
447         });
448                 request.on('error', function(err) {
449                 callback(err);
450                         return;
451                 });
452         request.end()
453     }
454
455     var _post = function(uri,options,data,res,callback)
456         {
457                 options.method = 'POST';
458                 options.path = uri;
459
460
461                 // Setup request to ODL side
462                 var protocol;
463                 //if ( process.env.NODE_ENV != 'production' ){
464                 protocol = http;
465                 //}else{
466                 //protocol = https;
467                 //}
468                 var request = protocol.request(options, function(response)
469                 {
470                 var response_str = '';
471                 // Read the response from ODL side
472                 response.on('data', function(chunk) {
473                                 response_str += chunk;
474                 //logger.debug('chunk:' + chunk);
475                 });
476
477                 // end of request, check response
478                 response.on('end', function() {
479                                 console.log('post status code:'+response.statusCode);
480                                 if(response.statusCode == 200 ){
481                     try {
482                                         var respObj = JSON.parse(response_str);
483                         console.log('response_str.length:' + response_str.length);
484                                             if(response_str){
485                                             console.log("post response-code:" + respObj['output']['response-code']);
486                                                 
487                             if ( respObj['output']['response-code'] == 200 ){
488                                     callback(null,response_str);
489                                     return;
490                             }else{
491                                     callback('Error - response-code:' + respObj['output']['response-code'] + '  response-message:' + respObj['output']['response-message']);
492                                     return;
493                             }
494                                             }else{
495                                                     // success
496                                     callback(null);
497                                                     return;
498                                             }
499                     }
500                     catch (error) {
501                         callback('Error parsing response: ' + error);
502                         return;
503                     }
504                                 }
505                 else {
506                                     var respObj = null; 
507                     if ( response_str.length > 0 ) {
508                         console.log('response_str:' + response_str);
509                                         try {
510                             respObj = JSON.parse(response_str);
511                             if ( typeof respObj['errors'] != 'undefined' )
512                                                 {
513                                 console.log('Error' + JSON.stringify(respObj));
514                                                         if ( typeof respObj['errors']['error'][0]['error-message'] != 'undefined' )
515                                                         {
516                                                                 callback('HTTP Status Code:' + response.statusCode + '. Message:' 
517                                                                         + respObj['errors']['error'][0]['error-message']);
518                                                 return;
519                                                         }
520                                                         else
521                                                         {
522                                                                 callback('Error - HTTP Status Code:' + response.statusCode + '.');
523                                                 return;
524                                                         }
525                                                 }
526                                                 else
527                                                 {
528                                                         callback('Error - HTTP Status Code:' + response.statusCode + '.');
529                                         return;
530                                                 }
531                         }
532                         catch (error) {
533                                                     callback('Error - HTTP Status Code:' + response.statusCode + '.');
534                                     return;
535                         }
536                     }
537                     else{
538                                                 callback('Error - HTTP Status Code:' + response.statusCode + '.');
539                                 return;
540                                         }
541                 }
542                 });
543                 });
544
545                 request.on('error', function(err) {
546                 callback(err);
547                         return;
548                 });
549
550         request.write(data);
551                 request.end()
552     }
553
554     var _postSubnetAllocated = function(uri,options,data,callback,res) {
555         options.method = 'POST';
556         options.path = uri;
557
558         // Setup request to ODL side
559         var request = https.request(options, function(response) {
560         var response_str = '';
561         // Read the response from ODL side
562         response.on('data', function(chunk) {
563         response_str += chunk;
564         });
565
566         // end of request, check response
567         response.on('end', function() {
568             //console.log("post: response: " + response_str);
569              callback(response_str,null,res);
570         });
571     });
572     request.on('error', function(err) {
573         callback(err,null, res);
574     });
575     request.write(data);
576     request.end()
577     }
578
579     return {
580         GetClusterStatus: _getClusterStatus,
581         Get: _get,
582         GetID: _getid,
583         GetVNF: _getvnf,
584         GetVRlan: _getvrlan,
585         GetPreloadVnfData: _getPreloadVnfData,
586         Post: _post,
587         PostSubnetAllocated: _postSubnetAllocated,
588         Delete: _delete,
589         Healthcheck: _healthcheck
590     };
591 }();
592
593 module.exports = OdlInterface;
594