1ff64c54aSGunnar Mills/** 2ff64c54aSGunnar Mills * Controller for SNMP 3ff64c54aSGunnar Mills * 4ff64c54aSGunnar Mills * @module app/configuration 5ff64c54aSGunnar Mills * @exports snmpController 6ff64c54aSGunnar Mills * @name snmpController 7ff64c54aSGunnar Mills */ 8ff64c54aSGunnar Mills 9ff64c54aSGunnar Millswindow.angular && (function(angular) { 10ff64c54aSGunnar Mills 'use strict'; 11ff64c54aSGunnar Mills 12ff64c54aSGunnar Mills angular.module('app.configuration').controller('snmpController', [ 1327ce84d2Sbeccabroek '$scope', '$window', 'APIUtils', '$route', '$q', 'toastService', 1427ce84d2Sbeccabroek function($scope, $window, APIUtils, $route, $q, toastService) { 15854fbba1SGunnar Mills $scope.managers = []; 16ff64c54aSGunnar Mills $scope.loading = true; 1735d18cbcSGunnar Mills $scope.managersToDelete = []; 18ff64c54aSGunnar Mills 19ff64c54aSGunnar Mills var getSNMPManagers = APIUtils.getSNMPManagers().then( 20ff64c54aSGunnar Mills function(data) { 21854fbba1SGunnar Mills // Convert to array of objects from an object of objects, easier 22854fbba1SGunnar Mills // to manipulate (e.g. add/remove). Convert key to a path property. 23854fbba1SGunnar Mills for (var key in data.data) { 24854fbba1SGunnar Mills $scope.managers.push({ 25854fbba1SGunnar Mills path: key, 26854fbba1SGunnar Mills port: data.data[key].Port, 2735d18cbcSGunnar Mills updatePort: false, 288751084cSGunnar Mills address: data.data[key].Address, 2935d18cbcSGunnar Mills updateAddress: false 30854fbba1SGunnar Mills }) 31854fbba1SGunnar Mills } 32ff64c54aSGunnar Mills }, 33ff64c54aSGunnar Mills function(error) { 3427ce84d2Sbeccabroek toastService.error('Unable to load SNMP settings.'); 35ff64c54aSGunnar Mills console.log(JSON.stringify(error)); 36ff64c54aSGunnar Mills }); 37ff64c54aSGunnar Mills 38ff64c54aSGunnar Mills getSNMPManagers.finally(function() { 39ff64c54aSGunnar Mills $scope.loading = false; 40ff64c54aSGunnar Mills }); 41854fbba1SGunnar Mills 42854fbba1SGunnar Mills $scope.addNewSNMPManager = function() { 43854fbba1SGunnar Mills $scope.managers.push({address: '', port: ''}); 44854fbba1SGunnar Mills }; 45854fbba1SGunnar Mills 46854fbba1SGunnar Mills $scope.removeSNMPManager = function(index) { 47854fbba1SGunnar Mills // If the SNMP Manager has a path it exists on the backend and we 48854fbba1SGunnar Mills // need to make a call to remove it 49854fbba1SGunnar Mills if ($scope.managers[index].path) { 5035d18cbcSGunnar Mills $scope.managersToDelete.push($scope.managers[index].path); 51854fbba1SGunnar Mills } 52854fbba1SGunnar Mills $scope.managers.splice(index, 1); 53854fbba1SGunnar Mills }; 54854fbba1SGunnar Mills 55854fbba1SGunnar Mills $scope.refresh = function() { 56854fbba1SGunnar Mills $route.reload(); 57854fbba1SGunnar Mills }; 58854fbba1SGunnar Mills 59854fbba1SGunnar Mills $scope.setSNMP = function() { 60854fbba1SGunnar Mills $scope.loading = true; 61854fbba1SGunnar Mills var promises = []; 62854fbba1SGunnar Mills 63*ddda4decSbeccabroek // Validate that no field are empty and port is valid. Port value is 64*ddda4decSbeccabroek // undefined if it is an invalid number. 65*ddda4decSbeccabroek for (var i in $scope.managers) { 66*ddda4decSbeccabroek if (!$scope.managers[i].address || !$scope.managers[i].port) { 67*ddda4decSbeccabroek $scope.loading = false; 68*ddda4decSbeccabroek toastService.error('Cannot save. Please resolve errors on page.'); 69*ddda4decSbeccabroek return; 70*ddda4decSbeccabroek } 71*ddda4decSbeccabroek } 72*ddda4decSbeccabroek // Iterate in reverse so can splice 73854fbba1SGunnar Mills // https://stackoverflow.com/questions/9882284/looping-through-array-and-removing-items-without-breaking-for-loop 74854fbba1SGunnar Mills var i = $scope.managers.length; 75854fbba1SGunnar Mills while (i--) { 76854fbba1SGunnar Mills // If the manager does not have a 'path', it is a new manager 77854fbba1SGunnar Mills // and needs to be created 78854fbba1SGunnar Mills if (!$scope.managers[i].path) { 79854fbba1SGunnar Mills promises.push(addManager( 80854fbba1SGunnar Mills $scope.managers[i].address, $scope.managers[i].port)); 81854fbba1SGunnar Mills } else { 8235d18cbcSGunnar Mills if ($scope.managers[i].updateAddress) { 83854fbba1SGunnar Mills promises.push(setManagerAddress( 84854fbba1SGunnar Mills $scope.managers[i].path, $scope.managers[i].address)); 858751084cSGunnar Mills } 8635d18cbcSGunnar Mills if ($scope.managers[i].updatePort) { 87854fbba1SGunnar Mills promises.push(setManagerPort( 88854fbba1SGunnar Mills $scope.managers[i].path, $scope.managers[i].port)); 89854fbba1SGunnar Mills } 90854fbba1SGunnar Mills } 918751084cSGunnar Mills } 92854fbba1SGunnar Mills 93854fbba1SGunnar Mills // Add delete promises last since we might be adding to 9435d18cbcSGunnar Mills // managersToDelete above 9535d18cbcSGunnar Mills for (var i in $scope.managersToDelete) { 9635d18cbcSGunnar Mills promises.push(deleteManager($scope.managersToDelete[i])); 97854fbba1SGunnar Mills } 98854fbba1SGunnar Mills 99854fbba1SGunnar Mills $q.all(promises) 100854fbba1SGunnar Mills .then( 101854fbba1SGunnar Mills function() { 102*ddda4decSbeccabroek toastService.success('SNMP settings have been saved.'); 103854fbba1SGunnar Mills }, 104854fbba1SGunnar Mills function(errors) { 10527ce84d2Sbeccabroek toastService.error('Unable to set SNMP Managers.'); 106854fbba1SGunnar Mills console.log(JSON.stringify(errors)); 107854fbba1SGunnar Mills }) 108854fbba1SGunnar Mills .finally(function() { 109854fbba1SGunnar Mills $scope.loading = false; 110854fbba1SGunnar Mills }); 111854fbba1SGunnar Mills }; 112854fbba1SGunnar Mills 113854fbba1SGunnar Mills function addManager(address, port) { 114854fbba1SGunnar Mills return APIUtils.addSNMPManager(address, port); 115854fbba1SGunnar Mills } 116854fbba1SGunnar Mills 117854fbba1SGunnar Mills function deleteManager(path) { 118854fbba1SGunnar Mills return APIUtils.deleteObject(path); 119854fbba1SGunnar Mills } 120854fbba1SGunnar Mills 121854fbba1SGunnar Mills function setManagerAddress(path, address) { 122854fbba1SGunnar Mills return APIUtils.setSNMPManagerAddress(path, address); 123854fbba1SGunnar Mills } 124854fbba1SGunnar Mills 125854fbba1SGunnar Mills function setManagerPort(path, port) { 126854fbba1SGunnar Mills return APIUtils.setSNMPManagerPort(path, port); 127854fbba1SGunnar Mills } 128ff64c54aSGunnar Mills } 129ff64c54aSGunnar Mills ]); 130ff64c54aSGunnar Mills})(angular); 131