5f35ba667a839f880fecfa0f7db8e7ebc62446ea
[ccsdk/apps.git] / sdnr / wireless-transport / code-Carbon-SR1 / ux / mwtnMediator / mwtnMediator-module / src / main / resources / mwtnMediator / mwtnMediator.controller.js
1 /*
2  * @copyright 2017 highstreet technologies GmbH and others.  All rights reserved.
3  *
4  * @license
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9
10 define(['app/mwtnMediator/mwtnMediator.module',
11         'app/mwtnMediator/mwtnMediator.services'],
12         function(mwtnMediatorApp) {
13
14   var mediatorServer;
15   var autoRefresh;
16   mwtnMediatorApp.register.controller('mwtnMediatorCtrl', ['$scope', '$rootScope','$uibModal', '$mwtnLog', '$mwtnMediator',
17     function($scope, $rootScope, $uibModal, $mwtnLog, $mwtnMediator) {
18         autoRefresh=false;
19     var COMPONENT = 'mwtnMediatorCtrl';
20     $mwtnLog.info({component: COMPONENT, message: 'mwtnMediatorCtrl started!'});
21     $rootScope.section_logo = 'src/app/mwtnMediator/images/mwtnMediator.png'; // Add your topbar logo location here such as 'assets/images/logo_topology.gif'
22     $scope.highlightFilteredHeader = $mwtnMediator.highlightFilteredHeader;
23
24
25
26     $scope.gridOptions = JSON.parse(JSON.stringify($mwtnMediator.gridOptions));
27     $scope.gridOptions.rowHeight = 44;
28
29     var statusCellTemplate = [
30         '<div class="ui-grid-cell-contents">',
31         '<span class="mwtnMediatorStatusRunning" ng-show="grid.getCellValue(row, col)>0">running ({{grid.getCellValue(row, col)}})</span>',
32         '<span class="mwtnMediatorStatusNotRunning" ng-show="grid.getCellValue(row, col)==0">stopped</span>',
33         '</div>'
34     ].join('');
35     var connectionStatusCellTemplate = [
36         '<div class="ui-grid-cell-contents">',
37         '<span class="fa fa-server mwtnMediatorOStatusIcon" style="margin-right:-0.5rem;"></span>',
38         '<span class="fa fa-check-circle-o mwtnMediatorCStatusIcon" style="color:green;" ng-show="grid.getCellValue(row, col).Netconf"></span>',
39         '<span class="fa fa-times-circle-o mwtnMediatorCStatusIcon" style="color:red;" ng-show="!grid.getCellValue(row, col).Netconf"></span>',
40         '<span class="fa fa-minus mwtnMediatorCStatusIcon" style="color:green;font-weight:bold;" ng-show="grid.getCellValue(row, col).Netconf"></span>',
41         '<span class="fa fa-ellipsis-h mwtnMediatorCStatusIcon" style="color:red;font-weight:bold;" ng-show="!grid.getCellValue(row, col).Netconf"></span>',
42         '<span class="fa fa-dot-circle-o mwtnMediatorCStatusIcon" style="font-size:3rem;color:#666;"></span>',
43         '<span class="fa fa-minus mwtnMediatorCStatusIcon" style="color:green;font-weight:bold;" ng-show="grid.getCellValue(row, col).NetworkElement"></span>',
44         '<span class="fa fa-ellipsis-h mwtnMediatorCStatusIcon" style="color:red;font-weight:bold;" ng-show="!grid.getCellValue(row, col).NetworkElement"></span>',
45         '<span class="fa fa-check-circle-o mwtnMediatorCStatusIcon" style="color:green;" ng-show="grid.getCellValue(row, col).NetworkElement"></span>',
46         '<span class="fa fa-times-circle-o mwtnMediatorCStatusIcon" style="color:red;" ng-show="!grid.getCellValue(row, col).NetworkElement"></span>',
47         '<span class="fa fa-wifi mwtnMediatorOStatusIcon" style="margin-left:-0.5rem;"></span>',
48         '</div>'].join('');
49
50         var requiredNesActionCellTemplate = [
51       '<a class="vCenter" ng-class="{attention: grid.appScope.hover}" >',
52       '<button class="btn btn-primary" ng-click="grid.appScope.startMediator(row.entity)">Start</button>',
53       '<button class="btn btn-default" ng-click="grid.appScope.stopMediator(row.entity)">Stop</button>',
54       '<button class="btn btn-default" ng-click="grid.appScope.showDetails(row.entity)"><i class="fa fa-info-circle" aria-hidden="true"></i></button>',
55       '</a>' ].join('<span>&nbsp;</span>');
56
57     $scope.gridOptions.columnDefs = [
58        { field: 'Name',  type: 'string', displayName: 'Mediator',  headerCellClass: $scope.highlightFilteredHeader, width : 200 },
59        { field: 'PID', type: 'int', name: 'Status', cellTemplate:statusCellTemplate, headerCellClass: $scope.highlightFilteredHeader, width : 120 },
60        { field: 'DeviceIp',  type: 'string', displayName: 'IP address',  headerCellClass: $scope.highlightFilteredHeader, width : 120 },
61        {
62            field: 'ConnectionStatus',
63            type: 'object',
64            name: 'Connection',
65            enableSorting : false,
66            enableFiltering: false,
67            cellTemplate:connectionStatusCellTemplate,
68            width : 150
69        },
70        {  name : 'actions',
71           enableSorting : false,
72           enableFiltering: false,
73           cellTemplate: requiredNesActionCellTemplate,
74           width : 280,
75           pinnedRight : true
76            }
77      ];
78
79
80
81     var refreshMediators = function()
82     {
83         var i=$('#btn_refreshMediators > i');
84         i.addClass("fa-spin");
85         console.log("refresh mediators list");
86         if(mediatorServer!==undefined)
87         {
88                 mediatorServer.LoadConfigs(function(configs){
89                            $scope.data = configs;
90                            $scope.$apply();
91                            i.removeClass("fa-spin");
92                     },
93                         function(err){
94                                 $scope.data = [];
95                                 $scope.$apply();
96                             i.removeClass("fa-spin");
97                                 console.log("cannot reach mediatorserver:"+err);
98                         });
99                 }
100     }
101     var refreshMediator = function(name)
102     {
103         console.log("refresh mediators list");
104         if(mediatorServer!==undefined)
105         {
106                 mediatorServer.ReloadConfig(name,function(changes){
107                            $scope.$apply();
108                         },
109                         function(err){
110                                 console.log("cannot reach mediatorserver:"+err);
111                         });
112                 }
113     }
114     var onServerSelectedChanged = function(item){
115         var serverURL;
116         if(item!==undefined)
117         {
118                 if(typeof(item)==='object')
119                         serverURL=item.url;
120                 else if(typeof(item)==='string')
121                 {
122                         try
123                         {
124                                 $mwtnMediator.getServerData(parseInt(item)).then(function(data){
125                                         if(data!==undefined)
126                                         {
127                                                 serverURL=data.url;
128                                                 mediatorServer = new MediatorServer(serverURL);
129                                                 $mwtnLog.info({component: COMPONENT, message: 'loading server configs for '+serverURL});
130                                                 refreshMediators();
131                                         }
132                                         else
133                                                 console.log("search for server data failed. should never happened")
134                                     });
135                                 }
136                                 catch(e)
137                                 {"error loading server:n"+console.log(e);}
138                         }
139         }
140     }
141
142     /* GUI Events =======================================*/
143     $scope.onAutoRefreshChanged = function()
144     {
145         autoRefresh = $('#ckbx_mediatorAutorefresh').prop('checked');
146         console.log("set autorefresh to "+autoRefresh);
147     }
148     $scope.editMediatorServers = function()
149     {
150         var modalInstance = $uibModal.open({
151                 animation:true,
152                  ariaLabelledBy: 'modal-title',
153                 ariaDescribedBy: 'modal-body',
154                 templateUrl: 'src/app/mwtnMediator/templates/mediatorServerConfigCtrl.tpl.html',
155                 controller: 'MediatorServerConfigCtrl',
156                 size: 'lg',
157                 resolve: {
158                   currentElement: function () {
159                     return $scope.currentElement;
160                   }
161                 }
162
163          });
164     }
165     $scope.createNewMediator = function()
166     {
167                 if(mediatorServer!==undefined)
168                 {
169                         console.log("create new mediator");
170                         var modalInstance = $uibModal.open({
171                         animation:true,
172                          ariaLabelledBy: 'modal-title',
173                         ariaDescribedBy: 'modal-body',
174                         templateUrl: 'src/app/mwtnMediator/templates/mediatorCreateNew.tpl.html',
175                         controller: 'MediatorNewCtrl',
176                         size: 'lg',
177                         resolve: {
178                           currentElement: function () {
179                             return $scope.currentElement;
180                           }
181                         }
182
183                  });
184                 }
185                 else
186                 {
187                         console.log("no mediatorserver selected");
188                 }
189     }
190     $scope.refreshMediators = refreshMediators;
191
192     $scope.startMediator =  function(el)
193     {
194         var btn=$(this);
195         if(btn!==undefined)
196                 btn.prop('disabled',true);
197         console.log("starting mediator "+el.Name+" ...");
198         if(mediatorServer!==undefined)
199         {
200                 mediatorServer.StartMediator(el.Name,function(res){
201                         refreshMediator(el.Name);
202                         //console.log(res);
203                 },function(err){
204                         if(btn!==undefined)
205                         btn.prop('disabled',false);
206                 //      console.log("error starting mediator");
207                 });
208         }
209     }
210     $scope.stopMediator = function(el)
211     {
212         var btn=$(this);
213         if(btn!==undefined)
214                 btn.prop('disabled',true);
215         console.log("stopping mediator "+el.Name+" ...");
216                 if(mediatorServer!==undefined)
217         {
218                 mediatorServer.StopMediator(el.Name,function(res){
219                         refreshMediator(el.Name);
220                         //console.log(res);
221                 },function(err){
222                         if(btn!==undefined)
223                         btn.prop('disabled',false);
224                 //      console.log("error stopping mediator");
225                 });
226         }
227     }
228     $scope.showDetails = function(el)
229     {
230       $scope.currentElement = el;
231       var modalInstance = $uibModal.open({
232         animation:true,
233          ariaLabelledBy: 'modal-title',
234         ariaDescribedBy: 'modal-body',
235         templateUrl: 'src/app/mwtnMediator/templates/mediatorDetails.tpl.html',
236         controller: 'MediatorDetailsCtrl',
237         size: 'lg',
238         resolve: {
239           currentElement: function () {
240             return $scope.currentElement;
241           }
242         }
243
244       });
245     }
246     $scope.onchangeserver = function(){
247         autoRefresh=false;
248         $('#ckbx_mediatorAutorefresh').prop('checked',autoRefresh);
249         onServerSelectedChanged($scope.medserver);
250     }
251     /* End of GUI Events===========================*/
252
253
254     $scope.gridOptions.data = 'data';
255     $scope.options={
256
257     }
258
259     //load mediator servers from database
260     $mwtnMediator.getServerData().then(function(data){
261         //set as option source for GUI selector
262         $scope.options.medservers=data;
263         //autoselect first item
264         if(data!==undefined && data.length>0)
265         {
266                 onServerSelectedChanged(data[0]);
267                 //$scope.medserver=
268         }
269     });
270     var timer = setInterval(function(){
271         if(autoRefresh && mediatorServer!==undefined)
272         {
273                 refreshMediators();
274         }
275
276     },30000);
277
278   }]);
279
280
281   /************************************************************************************
282    * medaitorDetails Controller definition
283    ************************************************************************************/
284   mwtnMediatorApp.register.controller('MediatorDetailsCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$mwtnConnect', '$mwtnLog', '$mwtnMediator','currentElement',
285                                                                   function ($scope, $uibModalInstance, $uibModal, $mwtnConnect, $mwtnLog, $mwtnMediator, currentElement) {
286
287                 var COMPONENT = 'MediatorDetailsCtrl';
288         var element = currentElement;
289         var error = function(msg)
290         {
291                 $scope.statusmessage='';
292                 $scope.errormessage=msg;
293                 $scope.$apply();
294         }
295         var status = function(msg)
296         {
297                 $scope.statusmessage=msg;
298                 $scope.errormessage='';
299                 $scope.$apply();
300         }
301         var reloadDelayed = function()
302         {
303                 setTimeout(function(){
304                         mediatorServer.ReloadConfig(element.Name,function(res){
305                                 $scope.$apply();
306                         },function(err){error(err);});
307                 },1000);
308         }
309         var refreshLogs = function()
310         {
311                 mediatorServer.LoadLogs(currentElement.Name,function(res){
312                         $scope.logdata=res;
313                         $scope.$apply();
314
315                 },function(err){
316                         $scope.logdata=[];
317                         $scope.$apply();
318                 });
319         }
320         $scope.statusmessage='';
321         $scope.errormessage='';
322         $scope.logGridOptions = JSON.parse(JSON.stringify($mwtnMediator.logGridOptions));
323             //$scope.logGridOptions.rowHeight = 44;
324             $scope.logGridOptions.columnDefs = [
325                 { field: 'ts',  type: 'string', displayName: 'Timestamp',  headerCellClass: $scope.highlightFilteredHeader, width : 180 },
326                 { field: 'lvl', type: 'String', displayName: 'LogLevel', headerCellClass: $scope.highlightFilteredHeader, width : 90 },
327                 { field: 'src',  type: 'string', displayName: 'Source',  headerCellClass: $scope.highlightFilteredHeader, width : 120 },
328                 { field: 'msg',  type: 'string', displayName: 'Message',  headerCellClass: $scope.highlightFilteredHeader, width : 300 },
329
330               ];
331             $scope.logGridOptions.data = 'logdata';
332         // $mwtnLog.info({component: COMPONENT, message: 'MediatorDetailsCtrl started!'});
333                 $scope.data = {
334                         el:currentElement
335                 };
336                 $scope.ok = function () {
337                 $uibModalInstance.close({el: currentElement});
338         };
339         $scope.start = function(){
340                 var btn=$(this);
341                 if(btn!==undefined)
342                         btn.prop('disabled', true);
343                 mediatorServer.StartMediator(element.Name,function(res){
344                         if(btn!==undefined)
345                                 btn.prop('disabled', true);
346                         status(res);
347                         reloadDelayed();
348                 },function(err){
349                         if(btn!==undefined)
350                                 btn.prop('disabled', false);
351                         error(err);
352
353                 });
354         };
355         $scope.stop = function(){
356                 var btn=$(this);
357                 if(btn!==undefined)
358                         btn.prop('disabled', true);
359                 mediatorServer.StopMediator(element.Name,function(res){
360                         if(btn!==undefined)
361                                 btn.prop('disabled', true);
362                         status(res);
363                         reloadDelayed();
364                 },function(err){
365                         if(btn!==undefined)
366                                 btn.prop('disabled', false);
367                         error(err);
368
369                 });
370         };
371         $scope.delete = function(){
372                 var btn=$(this);
373                 if(btn!==undefined)
374                         btn.prop('disabled', true);
375                 if(confirm("Do you really want to delete this mediator?"))
376                 {
377                         mediatorServer.DeleteMediator(element.Name,function(res){
378                                 status(res);
379                         },function(err){
380                                 if(btn!==undefined)
381                                 btn.prop('disabled', false);
382                                 error(err);
383                         });
384                 }
385                 else
386                 {
387                         if(btn!==undefined)
388                                 btn.prop('disabled', false);
389                 }
390         };
391         $scope.unlock = function(){
392                 var btn=$(this);
393                 if(btn!==undefined)
394                         btn.prop('disabled', true);
395                 mediatorServer.ClearLock(element.Name,function(res){
396                         status(res);
397                         reloadDelayed();
398                 },function(err){
399                         if(btn!==undefined)
400                         btn.prop('disabled', false);
401                         error(err);
402                 });
403         }
404         refreshLogs();
405         }
406   ]);
407   /************************************************************************************
408    * medaitorCreateNew Controller definition
409    ************************************************************************************/
410   mwtnMediatorApp.register.controller('MediatorNewCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$mwtnConnect', '$mwtnLog',
411                                                                   function ($scope, $uibModalInstance, $uibModal, $mwtnConnect, $mwtnLog) {
412
413         var COMPONENT = 'MediatorNewCtrl';
414         // $mwtnLog.info({component: COMPONENT, message: COMPONENT + ' started!'});
415         var status = function(msg)
416         {
417                 $scope.statusmessage=msg;
418                         $scope.errormessage="";
419                         $scope.$apply();
420         }
421         var error = function(msg)
422         {
423                 $scope.statusmessage="";
424                         $scope.errormessage=msg;
425                         $scope.$apply();
426         }
427         $scope.options={
428                 nexmlmodel:[],
429                 nedevicetype:MediatorConfig.DeviceTypes
430         };
431         $scope.mediator={name:'',devicetype:0,remoteip:'',remoteport:161,trapsport:0,ncport:0,nexml:''};
432         $scope.odlconfig=mediatorServer.GetDefaultODLConfig();
433         $scope.odlsavebtn={enabled:false};
434
435         //=======load data
436         mediatorServer.LoadNetworkElementXMLFiles(function(xmlNames){
437                 $scope.options.nexmlmodel=xmlNames;
438                 $scope.$apply();
439         },function(err){
440                 error(err);
441         });
442         mediatorServer.LoadAvailableNCPorts(function(portValues){
443                 if(portValues!==undefined && portValues.length>0)
444                 {
445                         $scope.mediator.ncport = portValues[0];
446                 }
447         },function(err){error(err);});
448         mediatorServer.LoadAvailableSnmpPorts(function(portValues){
449                 if(portValues!==undefined && portValues.length>0)
450                 {
451                         $scope.mediator.trapsport = portValues[0];
452                 }
453         },function(err){error(err);});
454
455
456         $scope.errormessage='';
457         $scope.statusmessage='';
458
459         //====handle events========
460         $scope.odledit = function(){
461                 $scope.odlsavebtn.enabled=true;
462                 console.log("enable odl configs")
463                 $scope.$apply();
464         }
465         $scope.odlsave = function(){
466                 mediatorServer.SetDefaultODLConfig($scope.odlconfig);
467         }
468                 $scope.ok = function () {
469                         var btn=$(this);
470                         if(btn!==undefined)
471                                 btn.prop('disabled', true);
472                         mediatorServer.CreateMediator($scope.mediator.name,
473                                                                                 $scope.mediator.devicetype,
474                                                                                 $scope.mediator.remoteip,
475                                                                                 $scope.mediator.remoteport,
476                                                                                 $scope.mediator.trapsport,
477                                                                                 $scope.mediator.nexml,
478                                                                                 $scope.mediator.ncport,
479                                 function(e){
480                                         if(e==true)
481                                         {
482                                                 status("mediator created");
483                                                 setTimeout(function(){$uibModalInstance.close();},2000);
484                                         }
485                                         else
486                                         {
487                                                 if(btn!==undefined)
488                                                         btn.prop('disabled', false);
489                                                 error(e);
490
491                                         }
492                                 },function(err){
493                                         if(btn!==undefined)
494                                                 btn.prop('disabled', false);
495                                         error(err);
496
497                                 });
498
499         };
500         $scope.cancel = function(){
501                 $uibModalInstance.close();
502         };
503
504         }
505   ]);
506   /************************************************************************************
507    * medaitorServerConfig Controller definition
508    ************************************************************************************/
509   mwtnMediatorApp.register.controller('MediatorServerConfigCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$mwtnConnect', '$mwtnLog', '$mwtnMediator',
510                                                                   function ($scope, $uibModalInstance, $uibModal, $mwtnConnect, $mwtnLog, $mwtnMediator) {
511
512         var COMPONENT = 'MediatorServerConfigCtrl';
513         // $mwtnLog.info({component: COMPONENT, message: COMPONENT + ' started!'});
514         var onServerRowSelect = function(obj,id)
515         {
516                 if(obj!=undefined)
517                         $(obj).addClass("selected");
518                 var tbxId=$('#tbx_mediatorserver-id');
519                 var tbxName=$('#tbx_mediatorserver-name');
520                 var tbxHost = $('#tbx_mediatorserver-host');
521                 var tbxVersion = $('#tbx_mediatorserver-version');
522                 var tbxVersionMed = $('#tbx_mediatorserver-medversion');
523                 tbxId.prop('disabled',true);
524                 tbxName.prop('disabled',true);
525                 tbxHost.prop('disabled',true);
526                 tbxVersion.prop('disabled',true);
527                 tbxVersionMed.prop('disabled',true);
528
529                 $mwtnMediator.getServerData(id).then(function(data){
530                         if(data!==undefined)
531                         {
532                                 tbxId.val(data.id);
533                                 tbxName.val(data.name);
534                                 tbxHost.val(data.url);
535                                 tbxVersion.val("");
536                                         tbxVersionMed.val("");
537                                 var s=new MediatorServer(data.url);
538                                 s.LoadVersion(function(d){
539                                         tbxVersion.val(d.server);
540                                         tbxVersionMed.val(d.mediator);
541
542                                 },function(err){
543
544                                 });
545                         }
546                 });
547         }
548         var create = function(host,name,port)
549         {
550                 var url=host+":"+port;
551                 $mwtnMediator.addServer(name,url).then(function(data){
552                         reload();
553                 });
554         }
555         var onEdit = function(id)
556         {
557                 var tbxName=$('#tbx_mediatorserver-name');
558                 var tbxHost = $('#tbx_mediatorserver-host');
559                 tbxName.prop('disabled',false);
560                 tbxHost.prop('disabled',false);
561
562         }
563         var onDelete = function(id)
564         {
565                 if(confirm("Do you really want to delete?"))
566                 {
567                 //      console.log("delete server with id="+id);
568                         $mwtnMediator.removeServer(id).then(function(){reload();});
569                 }
570         }
571         var reload = function(){
572                 $mwtnMediator.getServerData().then(function(data){
573
574                         //fill table
575                         var list=$('#mediatorserver-list');
576                         list.html('');
577                         if(data!==undefined && data.length>0)
578                         {
579                                 for(var i=0;i<data.length;i++)
580                                 {
581                                         var desc=$('<span class="desc" id="item_'+data[i].id+'">'+data[i].name+'</span>');
582                                         var li=$('<li></li>');
583                                         var iconsbox=$('<div class="icons"></div>');
584                                         var edit=$('<span class="fa fa-edit" id="item_edit_'+data[i].id+'"></span>');
585                                         var del=$('<span class="fa fa-trash-o" id="item_del_'+data[i].id+'"></span>');
586                                         iconsbox.html([edit,del]);
587                                         li.html([desc,iconsbox]);
588                                         if(i==0)
589                                                 li.addClass("selected");
590                                         //register click handlers
591                                         desc.click(function(){
592                                                 $('#mediatorserver-list > li').removeClass('selected');
593                                                 onServerRowSelect(this.parentNode,$(this).prop('id').substr(5));
594                                         });
595                                         edit.click(function(){
596                                                 onEdit($(this).prop('id').substr(10));
597                                         });
598                                         del.click(function(){
599                                                 onDelete($(this).prop('id').substr(9));
600                                         });
601                                         list.append(li);
602                                 }
603                                 onServerRowSelect(undefined,data[0].id);
604                         }
605                 });
606         }
607         reload();
608         $scope.close = function(){
609                 $uibModalInstance.close();
610         };
611   }]);
612
613 });