blob: 9d71765233c7a0d4a4bff588bc81cee69715bfc8 [file] [log] [blame]
Gunnar Millsff64c542018-08-24 15:49:09 -05001/**
2 * Controller for SNMP
3 *
4 * @module app/configuration
5 * @exports snmpController
6 * @name snmpController
7 */
8
9window.angular && (function(angular) {
10 'use strict';
11
12 angular.module('app.configuration').controller('snmpController', [
beccabroek27ce84d2019-02-05 15:43:17 -060013 '$scope', '$window', 'APIUtils', '$route', '$q', 'toastService',
14 function($scope, $window, APIUtils, $route, $q, toastService) {
Gunnar Mills854fbba2018-09-13 15:41:30 -050015 $scope.managers = [];
Gunnar Millsff64c542018-08-24 15:49:09 -050016 $scope.loading = true;
Gunnar Mills35d18cb2018-10-05 11:24:14 -050017 $scope.managersToDelete = [];
Gunnar Millsff64c542018-08-24 15:49:09 -050018
19 var getSNMPManagers = APIUtils.getSNMPManagers().then(
20 function(data) {
Gunnar Mills854fbba2018-09-13 15:41:30 -050021 // Convert to array of objects from an object of objects, easier
22 // to manipulate (e.g. add/remove). Convert key to a path property.
23 for (var key in data.data) {
24 $scope.managers.push({
25 path: key,
26 port: data.data[key].Port,
Gunnar Mills35d18cb2018-10-05 11:24:14 -050027 updatePort: false,
Gunnar Mills87510842018-09-18 15:49:33 -050028 address: data.data[key].Address,
Gunnar Mills35d18cb2018-10-05 11:24:14 -050029 updateAddress: false
Gunnar Mills854fbba2018-09-13 15:41:30 -050030 })
31 }
Gunnar Millsff64c542018-08-24 15:49:09 -050032 },
33 function(error) {
beccabroek27ce84d2019-02-05 15:43:17 -060034 toastService.error('Unable to load SNMP settings.');
Gunnar Millsff64c542018-08-24 15:49:09 -050035 console.log(JSON.stringify(error));
36 });
37
38 getSNMPManagers.finally(function() {
39 $scope.loading = false;
40 });
Gunnar Mills854fbba2018-09-13 15:41:30 -050041
42 $scope.addNewSNMPManager = function() {
43 $scope.managers.push({address: '', port: ''});
44 };
45
46 $scope.removeSNMPManager = function(index) {
47 // If the SNMP Manager has a path it exists on the backend and we
48 // need to make a call to remove it
49 if ($scope.managers[index].path) {
Gunnar Mills35d18cb2018-10-05 11:24:14 -050050 $scope.managersToDelete.push($scope.managers[index].path);
Gunnar Mills854fbba2018-09-13 15:41:30 -050051 }
52 $scope.managers.splice(index, 1);
53 };
54
55 $scope.refresh = function() {
56 $route.reload();
57 };
58
59 $scope.setSNMP = function() {
Gunnar Mills854fbba2018-09-13 15:41:30 -050060 $scope.loading = true;
61 var promises = [];
62
63 // Interate in reverse so can splice
64 // https://stackoverflow.com/questions/9882284/looping-through-array-and-removing-items-without-breaking-for-loop
65 var i = $scope.managers.length;
66 while (i--) {
67 // Remove any SNMP Manager with an empty address and port
68 if (!$scope.managers[i].address && !$scope.managers[i].port) {
69 $scope.removeSNMPManager(i);
70 continue;
71 }
72
73 // Throw an error if only 1 of the fields is filled out
74 if (!$scope.managers[i].address || !$scope.managers[i].port) {
75 // TODO: Highlight the field that is empty
76 $scope.loading = false;
beccabroek27ce84d2019-02-05 15:43:17 -060077 toastService.error('All fields are required.');
Gunnar Mills854fbba2018-09-13 15:41:30 -050078 return;
79 }
80
81 // If the manager does not have a 'path', it is a new manager
82 // and needs to be created
83 if (!$scope.managers[i].path) {
84 promises.push(addManager(
85 $scope.managers[i].address, $scope.managers[i].port));
86 } else {
Gunnar Mills35d18cb2018-10-05 11:24:14 -050087 if ($scope.managers[i].updateAddress) {
Gunnar Mills87510842018-09-18 15:49:33 -050088 promises.push(setManagerAddress(
89 $scope.managers[i].path, $scope.managers[i].address));
90 }
Gunnar Mills35d18cb2018-10-05 11:24:14 -050091 if ($scope.managers[i].updatePort) {
Gunnar Mills87510842018-09-18 15:49:33 -050092 promises.push(setManagerPort(
93 $scope.managers[i].path, $scope.managers[i].port));
94 }
Gunnar Mills854fbba2018-09-13 15:41:30 -050095 }
96 }
97
98 // Add delete promises last since we might be adding to
Gunnar Mills35d18cb2018-10-05 11:24:14 -050099 // managersToDelete above
100 for (var i in $scope.managersToDelete) {
101 promises.push(deleteManager($scope.managersToDelete[i]));
Gunnar Mills854fbba2018-09-13 15:41:30 -0500102 }
103
104 $q.all(promises)
105 .then(
106 function() {
beccabroek27ce84d2019-02-05 15:43:17 -0600107 toastService.success('SNMP Managers set.');
Gunnar Mills854fbba2018-09-13 15:41:30 -0500108 },
109 function(errors) {
beccabroek27ce84d2019-02-05 15:43:17 -0600110 toastService.error('Unable to set SNMP Managers.');
Gunnar Mills854fbba2018-09-13 15:41:30 -0500111 console.log(JSON.stringify(errors));
Gunnar Mills854fbba2018-09-13 15:41:30 -0500112 })
113 .finally(function() {
114 $scope.loading = false;
115 });
116 };
117
118 function addManager(address, port) {
119 return APIUtils.addSNMPManager(address, port);
120 }
121
122 function deleteManager(path) {
123 return APIUtils.deleteObject(path);
124 }
125
126 function setManagerAddress(path, address) {
127 return APIUtils.setSNMPManagerAddress(path, address);
128 }
129
130 function setManagerPort(path, port) {
131 return APIUtils.setSNMPManagerPort(path, port);
132 }
Gunnar Millsff64c542018-08-24 15:49:09 -0500133 }
134 ]);
135})(angular);