1angular.module("trendsApp", ["ui.bootstrap", "ui.utils", 2 "nagiosDecorations", "nagiosTime"]) 3 4 // Spinner options 5 .constant("spinnerOpts", { 6 lines: 11, // The number of lines to draw 7 length: 11, // The length of each line 8 width: 6, // The line thickness 9 radius: 11, // The radius of the inner circle 10 corners: 1, // Corner roundness (0..1) 11 rotate: 0, // The rotation offset 12 direction: 1, // 1: clockwise, -1: counterclockwise 13 color: '#000', // #rgb or #rrggbb or array of colors 14 speed: 1, // Rounds per second 15 trail: 58, // Afterglow percentage 16 shadow: false, // Whether to render a shadow 17 hwaccel: false, // Whether to use hardware acceleration 18 className: 'spinner', // The CSS class to assign to the spinner 19 zIndex: 2e9, // The z-index (defaults to 2000000000) 20 top: '50%', // Top position relative to parent 21 left: '50%' // Left position relative to parent 22 }) 23 24 .config(function($locationProvider) { 25 $locationProvider.html5Mode({ 26 enabled: true, 27 requireBase: false 28 }) 29 }) 30 31 .controller("trendsCtrl", function($scope, $location, $modal, $http, 32 nagiosTimeService) { 33 $scope.search = $location.search(); 34 35 // URL parameters 36 $scope.params = { 37 cgiurl: '@cgiurl@/', 38 reporttype: $scope.search.reporttype ? 39 $scope.search.reporttype : "", 40 host: $scope.search.host ? $scope.search.host : "", 41 service: $scope.search.service ? 42 $scope.search.service : "", 43 timeperiod: $scope.search.timeperiod ? 44 $scope.search.timeperiod : "", 45 t1: $scope.search.t1 ? $scope.search.t1 : 0, 46 t2: $scope.search.t2 ? $scope.search.t2 : 0, 47 assumeinitialstates: $scope.search.assumeinitialstates ? 48 true : false, 49 assumestateretention: $scope.search.assumestateretention ? 50 true : false, 51 assumestatesduringnotrunning: 52 $scope.search.assumestatesduringnotrunning ? 53 true : false, 54 includesoftstates: $scope.search.includesoftstates ? 55 $scope.search.includesoftstates : false, 56 initialassumedhoststate: 57 $scope.search.initialassumedhoststate ? 58 $scope.search.initialassumedhoststate : "", 59 initialassumedservicestate: 60 $scope.search.initialassumedservicestate ? 61 $scope.search.initialassumedservicestate : "", 62 backtrack: $scope.search.backtrack ? 63 parseInt($scope.search.backtrack) : 4, 64 nopopups: $scope.search.nopopups ? true : false, 65 nomap: $scope.search.nomap ? true : false 66 }; 67 68 // Decoration-related variables 69 $scope.lastUpdate = "none"; 70 71 var notBlank = function(value) { 72 return value != undefined && value != ""; 73 }; 74 75 // Determine the report type if not specified 76 if ($scope.params.reporttype == "") { 77 if (notBlank($scope.params.host) && 78 notBlank($scope.params.service)) { 79 $scope.params.reporttype = "services"; 80 } 81 else if (notBlank($scope.params.host)) { 82 $scope.params.reporttype = "hosts"; 83 } 84 } 85 86 // Calculate start and end times based on report timeperiod 87 if (nagiosTimeService.isCannedTimeperiod($scope.params.timeperiod)) { 88 var times = nagiosTimeService.calculateReportTimes(new Date(), 89 $scope.params.timeperiod); 90 $scope.params.t1 = times.start.getTime() / 1000; 91 $scope.params.t2 = times.end.getTime() / 1000; 92 } 93 else if ($scope.params.t1 == 0 && $scope.params.t2 == 0) { 94 // or s* and e* variables, if specified 95 var now = new Date(); 96 if ($scope.search.syear || $scope.search.smon || 97 $scope.search.sday || $scope.search.shour || 98 $scope.search.smin || $scope.search.ssec) { 99 var year = $scope.search.syear ? 100 parseInt($scope.search.syear) : now.getFullYear(); 101 var month = $scope.search.smon ? 102 parseInt($scope.search.smon) - 1 : now.getMonth(); 103 var day = $scope.search.sday ? 104 parseInt($scope.search.sday) : now.getDate(); 105 var hour = $scope.search.shour ? 106 parseInt($scope.search.shour) : 0; 107 var min = $scope.search.smin ? 108 parseInt($scope.search.smin) : 0; 109 var sec = $scope.search.ssec ? 110 parseInt($scope.search.ssec) : 0; 111 var start = new Date(year, month, day, hour, min, sec); 112 $scope.params.t1 = start.getTime() / 1000; 113 } 114 if ($scope.search.eyear || $scope.search.emon || 115 $scope.search.eday || $scope.search.ehour || 116 $scope.search.emin || $scope.search.esec) { 117 var year = $scope.search.eyear ? 118 parseInt($scope.search.eyear) : now.getFullYear(); 119 var month = $scope.search.emon ? 120 parseInt($scope.search.emon) - 1 : now.getMonth(); 121 var day = $scope.search.eday ? 122 parseInt($scope.search.eday) : now.getDate(); 123 var hour = $scope.search.ehour ? 124 parseInt($scope.search.ehour) : 0; 125 var min = $scope.search.emin ? 126 parseInt($scope.search.emin) : 0; 127 var sec = $scope.search.esec ? 128 parseInt($scope.search.esec) : 0; 129 var end = new Date(year, month, day, hour, min, sec); 130 $scope.params.t2 = end.getTime() / 1000; 131 } 132 } 133 134 // Application state variables 135 $scope.reload = 0; 136 137 // Do we have everything necessary to build a trend? 138 $scope.canBuildTrend = function() { 139 switch ($scope.params.reporttype) { 140 case "services": 141 if ((($scope.params.timeperiod != "") || 142 (($scope.params.t1 != 0) && 143 ($scope.params.t2 != 0)))) { 144 return true; 145 } 146 return false; 147 break; 148 case "hosts": 149 if ((($scope.params.timeperiod != "") || 150 (($scope.params.t1 != 0) && 151 ($scope.params.t2 != 0)))) { 152 $scope.params.reporttype = "hosts"; 153 return true; 154 } 155 return false; 156 break; 157 default: 158 return false; 159 break; 160 } 161 }; 162 163 $scope.displayForm = function(size) { 164 $scope.formDisplayed = true; 165 var modalInstance = $modal.open({ 166 templateUrl: 'trends-form.html', 167 controller: 'trendsFormCtrl', 168 size: size, 169 resolve: { 170 params: function () { 171 return $scope.params; 172 } 173 } 174 }); 175 176 modalInstance.result.then(function(params) { 177 $scope.formDisplayed = false; 178 $scope.params = params; 179 $scope.reload++; 180 }, 181 function(reason) { 182 $scope.formDisplayed = false; 183 }); 184 }; 185 186 if(!$scope.canBuildTrend()) { 187 $scope.displayForm(); 188 }; 189 190 $scope.infoBoxTitle = function() { 191 switch ($scope.params.reporttype) { 192 case "hosts": 193 return "Host State Trends"; 194 break; 195 case "services": 196 return "Service State Trends"; 197 break; 198 default: 199 return "Host and Service State Trends"; 200 break; 201 } 202 }; 203 204 }); 205