2 * @copyright 2017 highstreet technologies GmbH and others. All rights reserved.
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
10 define(['app/mwtnMediator/mwtnMediator.module',
11 'app/mwtnMediator/mwtnMediator.services'],
12 function(mwtnMediatorApp) {
16 mwtnMediatorApp.register.controller('mwtnMediatorCtrl', ['$scope', '$rootScope','$uibModal', '$mwtnLog', '$mwtnMediator',
17 function($scope, $rootScope, $uibModal, $mwtnLog, $mwtnMediator) {
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;
26 $scope.gridOptions = JSON.parse(JSON.stringify($mwtnMediator.gridOptions));
27 $scope.gridOptions.rowHeight = 44;
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>',
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>',
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> </span>');
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 },
62 field: 'ConnectionStatus',
65 enableSorting : false,
66 enableFiltering: false,
67 cellTemplate:connectionStatusCellTemplate,
71 enableSorting : false,
72 enableFiltering: false,
73 cellTemplate: requiredNesActionCellTemplate,
81 var refreshMediators = function()
83 var i=$('#btn_refreshMediators > i');
84 i.addClass("fa-spin");
85 console.log("refresh mediators list");
86 if(mediatorServer!==undefined)
88 mediatorServer.LoadConfigs(function(configs){
89 $scope.data = configs;
91 i.removeClass("fa-spin");
96 i.removeClass("fa-spin");
97 console.log("cannot reach mediatorserver:"+err);
101 var refreshMediator = function(name)
103 console.log("refresh mediators list");
104 if(mediatorServer!==undefined)
106 mediatorServer.ReloadConfig(name,function(changes){
110 console.log("cannot reach mediatorserver:"+err);
114 var onServerSelectedChanged = function(item){
118 if(typeof(item)==='object')
120 else if(typeof(item)==='string')
124 $mwtnMediator.getServerData(parseInt(item)).then(function(data){
128 mediatorServer = new MediatorServer(serverURL);
129 $mwtnLog.info({component: COMPONENT, message: 'loading server configs for '+serverURL});
133 console.log("search for server data failed. should never happened")
137 {"error loading server:n"+console.log(e);}
142 /* GUI Events =======================================*/
143 $scope.onAutoRefreshChanged = function()
145 autoRefresh = $('#ckbx_mediatorAutorefresh').prop('checked');
146 console.log("set autorefresh to "+autoRefresh);
148 $scope.editMediatorServers = function()
150 var modalInstance = $uibModal.open({
152 ariaLabelledBy: 'modal-title',
153 ariaDescribedBy: 'modal-body',
154 templateUrl: 'src/app/mwtnMediator/templates/mediatorServerConfigCtrl.tpl.html',
155 controller: 'MediatorServerConfigCtrl',
158 currentElement: function () {
159 return $scope.currentElement;
165 $scope.createNewMediator = function()
167 if(mediatorServer!==undefined)
169 console.log("create new mediator");
170 var modalInstance = $uibModal.open({
172 ariaLabelledBy: 'modal-title',
173 ariaDescribedBy: 'modal-body',
174 templateUrl: 'src/app/mwtnMediator/templates/mediatorCreateNew.tpl.html',
175 controller: 'MediatorNewCtrl',
178 currentElement: function () {
179 return $scope.currentElement;
187 console.log("no mediatorserver selected");
190 $scope.refreshMediators = refreshMediators;
192 $scope.startMediator = function(el)
196 btn.prop('disabled',true);
197 console.log("starting mediator "+el.Name+" ...");
198 if(mediatorServer!==undefined)
200 mediatorServer.StartMediator(el.Name,function(res){
201 refreshMediator(el.Name);
205 btn.prop('disabled',false);
206 // console.log("error starting mediator");
210 $scope.stopMediator = function(el)
214 btn.prop('disabled',true);
215 console.log("stopping mediator "+el.Name+" ...");
216 if(mediatorServer!==undefined)
218 mediatorServer.StopMediator(el.Name,function(res){
219 refreshMediator(el.Name);
223 btn.prop('disabled',false);
224 // console.log("error stopping mediator");
228 $scope.showDetails = function(el)
230 $scope.currentElement = el;
231 var modalInstance = $uibModal.open({
233 ariaLabelledBy: 'modal-title',
234 ariaDescribedBy: 'modal-body',
235 templateUrl: 'src/app/mwtnMediator/templates/mediatorDetails.tpl.html',
236 controller: 'MediatorDetailsCtrl',
239 currentElement: function () {
240 return $scope.currentElement;
246 $scope.onchangeserver = function(){
248 $('#ckbx_mediatorAutorefresh').prop('checked',autoRefresh);
249 onServerSelectedChanged($scope.medserver);
251 /* End of GUI Events===========================*/
254 $scope.gridOptions.data = 'data';
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)
266 onServerSelectedChanged(data[0]);
270 var timer = setInterval(function(){
271 if(autoRefresh && mediatorServer!==undefined)
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) {
287 var COMPONENT = 'MediatorDetailsCtrl';
288 var element = currentElement;
289 var error = function(msg)
291 $scope.statusmessage='';
292 $scope.errormessage=msg;
295 var status = function(msg)
297 $scope.statusmessage=msg;
298 $scope.errormessage='';
301 var reloadDelayed = function()
303 setTimeout(function(){
304 mediatorServer.ReloadConfig(element.Name,function(res){
306 },function(err){error(err);});
309 var refreshLogs = function()
311 mediatorServer.LoadLogs(currentElement.Name,function(res){
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 },
331 $scope.logGridOptions.data = 'logdata';
332 // $mwtnLog.info({component: COMPONENT, message: 'MediatorDetailsCtrl started!'});
336 $scope.ok = function () {
337 $uibModalInstance.close({el: currentElement});
339 $scope.start = function(){
342 btn.prop('disabled', true);
343 mediatorServer.StartMediator(element.Name,function(res){
345 btn.prop('disabled', true);
350 btn.prop('disabled', false);
355 $scope.stop = function(){
358 btn.prop('disabled', true);
359 mediatorServer.StopMediator(element.Name,function(res){
361 btn.prop('disabled', true);
366 btn.prop('disabled', false);
371 $scope.delete = function(){
374 btn.prop('disabled', true);
375 if(confirm("Do you really want to delete this mediator?"))
377 mediatorServer.DeleteMediator(element.Name,function(res){
381 btn.prop('disabled', false);
388 btn.prop('disabled', false);
391 $scope.unlock = function(){
394 btn.prop('disabled', true);
395 mediatorServer.ClearLock(element.Name,function(res){
400 btn.prop('disabled', false);
407 /************************************************************************************
408 * medaitorCreateNew Controller definition
409 ************************************************************************************/
410 mwtnMediatorApp.register.controller('MediatorNewCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$mwtnConnect', '$mwtnLog',
411 function ($scope, $uibModalInstance, $uibModal, $mwtnConnect, $mwtnLog) {
413 var COMPONENT = 'MediatorNewCtrl';
414 // $mwtnLog.info({component: COMPONENT, message: COMPONENT + ' started!'});
415 var status = function(msg)
417 $scope.statusmessage=msg;
418 $scope.errormessage="";
421 var error = function(msg)
423 $scope.statusmessage="";
424 $scope.errormessage=msg;
429 nedevicetype:MediatorConfig.DeviceTypes
431 $scope.mediator={name:'',devicetype:0,remoteip:'',remoteport:161,trapsport:0,ncport:0,nexml:''};
432 $scope.odlconfig=mediatorServer.GetDefaultODLConfig();
433 $scope.odlsavebtn={enabled:false};
436 mediatorServer.LoadNetworkElementXMLFiles(function(xmlNames){
437 $scope.options.nexmlmodel=xmlNames;
442 mediatorServer.LoadAvailableNCPorts(function(portValues){
443 if(portValues!==undefined && portValues.length>0)
445 $scope.mediator.ncport = portValues[0];
447 },function(err){error(err);});
448 mediatorServer.LoadAvailableSnmpPorts(function(portValues){
449 if(portValues!==undefined && portValues.length>0)
451 $scope.mediator.trapsport = portValues[0];
453 },function(err){error(err);});
456 $scope.errormessage='';
457 $scope.statusmessage='';
459 //====handle events========
460 $scope.odledit = function(){
461 $scope.odlsavebtn.enabled=true;
462 console.log("enable odl configs")
465 $scope.odlsave = function(){
466 mediatorServer.SetDefaultODLConfig($scope.odlconfig);
468 $scope.ok = function () {
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,
482 status("mediator created");
483 setTimeout(function(){$uibModalInstance.close();},2000);
488 btn.prop('disabled', false);
494 btn.prop('disabled', false);
500 $scope.cancel = function(){
501 $uibModalInstance.close();
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) {
512 var COMPONENT = 'MediatorServerConfigCtrl';
513 // $mwtnLog.info({component: COMPONENT, message: COMPONENT + ' started!'});
514 var onServerRowSelect = function(obj,id)
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);
529 $mwtnMediator.getServerData(id).then(function(data){
533 tbxName.val(data.name);
534 tbxHost.val(data.url);
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);
548 var create = function(host,name,port)
550 var url=host+":"+port;
551 $mwtnMediator.addServer(name,url).then(function(data){
555 var onEdit = function(id)
557 var tbxName=$('#tbx_mediatorserver-name');
558 var tbxHost = $('#tbx_mediatorserver-host');
559 tbxName.prop('disabled',false);
560 tbxHost.prop('disabled',false);
563 var onDelete = function(id)
565 if(confirm("Do you really want to delete?"))
567 // console.log("delete server with id="+id);
568 $mwtnMediator.removeServer(id).then(function(){reload();});
571 var reload = function(){
572 $mwtnMediator.getServerData().then(function(data){
575 var list=$('#mediatorserver-list');
577 if(data!==undefined && data.length>0)
579 for(var i=0;i<data.length;i++)
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]);
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));
595 edit.click(function(){
596 onEdit($(this).prop('id').substr(10));
598 del.click(function(){
599 onDelete($(this).prop('id').substr(9));
603 onServerRowSelect(undefined,data[0].id);
608 $scope.close = function(){
609 $uibModalInstance.close();