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', [ 13854fbba1SGunnar Mills '$scope', '$window', 'APIUtils', '$route', '$q', 14854fbba1SGunnar Mills function($scope, $window, APIUtils, $route, $q) { 15854fbba1SGunnar Mills $scope.managers = []; 16ff64c54aSGunnar Mills $scope.loading = true; 17854fbba1SGunnar Mills $scope.error = false; 18854fbba1SGunnar Mills $scope.success = false; 19*35d18cbcSGunnar Mills $scope.managersToDelete = []; 20ff64c54aSGunnar Mills 21ff64c54aSGunnar Mills var getSNMPManagers = APIUtils.getSNMPManagers().then( 22ff64c54aSGunnar Mills function(data) { 23854fbba1SGunnar Mills // Convert to array of objects from an object of objects, easier 24854fbba1SGunnar Mills // to manipulate (e.g. add/remove). Convert key to a path property. 25854fbba1SGunnar Mills for (var key in data.data) { 26854fbba1SGunnar Mills $scope.managers.push({ 27854fbba1SGunnar Mills path: key, 28854fbba1SGunnar Mills port: data.data[key].Port, 29*35d18cbcSGunnar Mills updatePort: false, 308751084cSGunnar Mills address: data.data[key].Address, 31*35d18cbcSGunnar Mills updateAddress: false 32854fbba1SGunnar Mills }) 33854fbba1SGunnar Mills } 34ff64c54aSGunnar Mills }, 35ff64c54aSGunnar Mills function(error) { 36ff64c54aSGunnar Mills console.log(JSON.stringify(error)); 37ff64c54aSGunnar Mills }); 38ff64c54aSGunnar Mills 39ff64c54aSGunnar Mills getSNMPManagers.finally(function() { 40ff64c54aSGunnar Mills $scope.loading = false; 41ff64c54aSGunnar Mills }); 42854fbba1SGunnar Mills 43854fbba1SGunnar Mills $scope.addNewSNMPManager = function() { 44854fbba1SGunnar Mills $scope.managers.push({address: '', port: ''}); 45854fbba1SGunnar Mills }; 46854fbba1SGunnar Mills 47854fbba1SGunnar Mills $scope.removeSNMPManager = function(index) { 48854fbba1SGunnar Mills // If the SNMP Manager has a path it exists on the backend and we 49854fbba1SGunnar Mills // need to make a call to remove it 50854fbba1SGunnar Mills if ($scope.managers[index].path) { 51*35d18cbcSGunnar Mills $scope.managersToDelete.push($scope.managers[index].path); 52854fbba1SGunnar Mills } 53854fbba1SGunnar Mills $scope.managers.splice(index, 1); 54854fbba1SGunnar Mills }; 55854fbba1SGunnar Mills 56854fbba1SGunnar Mills $scope.refresh = function() { 57854fbba1SGunnar Mills $route.reload(); 58854fbba1SGunnar Mills }; 59854fbba1SGunnar Mills 60854fbba1SGunnar Mills $scope.setSNMP = function() { 61854fbba1SGunnar Mills $scope.error = false; 62854fbba1SGunnar Mills $scope.success = false; 63854fbba1SGunnar Mills $scope.loading = true; 64854fbba1SGunnar Mills var promises = []; 65854fbba1SGunnar Mills 66854fbba1SGunnar Mills // Interate in reverse so can splice 67854fbba1SGunnar Mills // https://stackoverflow.com/questions/9882284/looping-through-array-and-removing-items-without-breaking-for-loop 68854fbba1SGunnar Mills var i = $scope.managers.length; 69854fbba1SGunnar Mills while (i--) { 70854fbba1SGunnar Mills // Remove any SNMP Manager with an empty address and port 71854fbba1SGunnar Mills if (!$scope.managers[i].address && !$scope.managers[i].port) { 72854fbba1SGunnar Mills $scope.removeSNMPManager(i); 73854fbba1SGunnar Mills continue; 74854fbba1SGunnar Mills } 75854fbba1SGunnar Mills 76854fbba1SGunnar Mills // Throw an error if only 1 of the fields is filled out 77854fbba1SGunnar Mills if (!$scope.managers[i].address || !$scope.managers[i].port) { 78854fbba1SGunnar Mills // TODO: Highlight the field that is empty 79854fbba1SGunnar Mills $scope.loading = false; 80854fbba1SGunnar Mills $scope.error = true; 81854fbba1SGunnar Mills return; 82854fbba1SGunnar Mills } 83854fbba1SGunnar Mills 84854fbba1SGunnar Mills // If the manager does not have a 'path', it is a new manager 85854fbba1SGunnar Mills // and needs to be created 86854fbba1SGunnar Mills if (!$scope.managers[i].path) { 87854fbba1SGunnar Mills promises.push(addManager( 88854fbba1SGunnar Mills $scope.managers[i].address, $scope.managers[i].port)); 89854fbba1SGunnar Mills } else { 90*35d18cbcSGunnar Mills if ($scope.managers[i].updateAddress) { 91854fbba1SGunnar Mills promises.push(setManagerAddress( 92854fbba1SGunnar Mills $scope.managers[i].path, $scope.managers[i].address)); 938751084cSGunnar Mills } 94*35d18cbcSGunnar Mills if ($scope.managers[i].updatePort) { 95854fbba1SGunnar Mills promises.push(setManagerPort( 96854fbba1SGunnar Mills $scope.managers[i].path, $scope.managers[i].port)); 97854fbba1SGunnar Mills } 98854fbba1SGunnar Mills } 998751084cSGunnar Mills } 100854fbba1SGunnar Mills 101854fbba1SGunnar Mills // Add delete promises last since we might be adding to 102*35d18cbcSGunnar Mills // managersToDelete above 103*35d18cbcSGunnar Mills for (var i in $scope.managersToDelete) { 104*35d18cbcSGunnar Mills promises.push(deleteManager($scope.managersToDelete[i])); 105854fbba1SGunnar Mills } 106854fbba1SGunnar Mills 107854fbba1SGunnar Mills $q.all(promises) 108854fbba1SGunnar Mills .then( 109854fbba1SGunnar Mills function() { 110854fbba1SGunnar Mills $scope.success = true; 111854fbba1SGunnar Mills }, 112854fbba1SGunnar Mills function(errors) { 113854fbba1SGunnar Mills console.log(JSON.stringify(errors)); 114854fbba1SGunnar Mills $scope.error = true; 115854fbba1SGunnar Mills }) 116854fbba1SGunnar Mills .finally(function() { 117854fbba1SGunnar Mills $scope.loading = false; 118854fbba1SGunnar Mills }); 119854fbba1SGunnar Mills }; 120854fbba1SGunnar Mills 121854fbba1SGunnar Mills function addManager(address, port) { 122854fbba1SGunnar Mills return APIUtils.addSNMPManager(address, port); 123854fbba1SGunnar Mills } 124854fbba1SGunnar Mills 125854fbba1SGunnar Mills function deleteManager(path) { 126854fbba1SGunnar Mills return APIUtils.deleteObject(path); 127854fbba1SGunnar Mills } 128854fbba1SGunnar Mills 129854fbba1SGunnar Mills function setManagerAddress(path, address) { 130854fbba1SGunnar Mills return APIUtils.setSNMPManagerAddress(path, address); 131854fbba1SGunnar Mills } 132854fbba1SGunnar Mills 133854fbba1SGunnar Mills function setManagerPort(path, port) { 134854fbba1SGunnar Mills return APIUtils.setSNMPManagerPort(path, port); 135854fbba1SGunnar Mills } 136ff64c54aSGunnar Mills } 137ff64c54aSGunnar Mills ]); 138ff64c54aSGunnar Mills})(angular); 139