1/** 2 * Controller for log 3 * 4 * @module app/serverHealth 5 * @exports logController 6 * @name logController 7 */ 8 9window.angular && (function(angular) { 10 'use strict'; 11 angular.module('app.serverHealth') 12 .config([ 13 'paginationTemplateProvider', 14 function(paginationTemplateProvider) { 15 paginationTemplateProvider.setString( 16 require('../../common/directives/dirPagination.tpl.html')); 17 } 18 ]) 19 .controller('logController', [ 20 '$scope', '$window', 'APIUtils', 'dataService', 'Constants', 21 '$routeParams', '$filter', 22 function( 23 $scope, $window, APIUtils, dataService, Constants, $routeParams, 24 $filter) { 25 $scope.dataService = dataService; 26 $scope.logs = []; 27 $scope.filteredLogs = []; 28 $scope.tmz = ''; 29 $scope.itemsPerPage = Constants.PAGINATION.LOG_ITEMS_PER_PAGE; 30 $scope.loading = false; 31 var expandedSelectedIdOnce = false; 32 33 var sensorType = $routeParams.type; 34 var eventId = $routeParams.id; 35 36 // priority buttons 37 $scope.selectedSeverity = 38 {all: true, low: false, medium: false, high: false}; 39 40 if (sensorType == 'high') { 41 $scope.selectedSeverity.all = false; 42 $scope.selectedSeverity.high = true; 43 } 44 45 $scope.selectedStatus = {all: true, resolved: false}; 46 47 $scope.customSearch = ''; 48 $scope.searchItems = []; 49 $scope.selectedEvents = []; 50 51 if (eventId) { 52 $scope.customSearch = '#' + eventId; 53 $scope.searchItems.push('#' + eventId); 54 } 55 56 $scope.loadLogs = function() { 57 $scope.loading = true; 58 APIUtils.getLogs().then(function(result) { 59 if (eventId && expandedSelectedIdOnce == false) { 60 var log = result.data.filter(function(item) { 61 return item.Id == eventId; 62 }); 63 64 if (log.length) { 65 log[0].meta = true; 66 } 67 expandedSelectedIdOnce = true; 68 } 69 dataService.updateServerHealth(result.data); 70 $scope.logs = result.data; 71 $scope.originalData = result.original; 72 $scope.loading = false; 73 }); 74 }; 75 $scope.jsonData = function(data) { 76 return JSON.stringify(data); 77 }; 78 79 $scope.filterBySeverity = function(log) { 80 if ($scope.selectedSeverity.all) return true; 81 82 return ( 83 (log.severity_flags.low && $scope.selectedSeverity.low) || 84 (log.severity_flags.medium && $scope.selectedSeverity.medium) || 85 (log.severity_flags.high && $scope.selectedSeverity.high)); 86 }; 87 88 $scope.filterByStatus = function(log) { 89 if ($scope.selectedStatus.all) return true; 90 return ( 91 (log.Resolved && $scope.selectedStatus.resolved) || 92 (!log.Resolved && !$scope.selectedStatus.resolved)); 93 }; 94 95 $scope.filterByDate = function(log) { 96 var endDate; 97 if ($scope.end_date && 98 typeof $scope.end_date.getTime === 'function') { 99 endDate = new Date($scope.end_date.getTime()); 100 endDate.setTime(endDate.getTime() + 86399000); 101 } 102 103 if ($scope.start_date && endDate) { 104 return ( 105 log.Timestamp >= $scope.start_date && 106 log.Timestamp <= endDate); 107 } else { 108 return true; 109 } 110 }; 111 112 $scope.filterBySearchTerms = function(log) { 113 if (!$scope.searchItems.length) return true; 114 115 for (var i = 0, length = $scope.searchItems.length; i < length; 116 i++) { 117 if (log.search_text.indexOf( 118 $scope.searchItems[i].toLowerCase()) == -1) 119 return false; 120 } 121 return true; 122 }; 123 124 $scope.addSearchItem = function(searchTerms) { 125 var terms = searchTerms.split(' '); 126 terms.forEach(function(searchTerm) { 127 if ($scope.searchItems.indexOf(searchTerm) == -1) { 128 $scope.searchItems.push(searchTerm); 129 } 130 }); 131 }; 132 133 $scope.clearSearchItem = function(searchTerm) { 134 $scope.searchItems = []; 135 }; 136 137 $scope.removeSearchItem = function(searchTerm) { 138 var termIndex = $scope.searchItems.indexOf(searchTerm); 139 140 if (termIndex > -1) { 141 $scope.searchItems.splice(termIndex, 1); 142 } 143 }; 144 145 $scope.$watch('all', function() { 146 $scope.filteredLogs.forEach(function(item) { 147 item.selected = $scope.all; 148 }); 149 }); 150 151 function updateExportData() { 152 $scope.export_name = ($scope.selectedEvents.length == 1) ? 153 $scope.selectedEvents[0].Id + '.json' : 154 'export.json'; 155 var data = {}; 156 $scope.selectedEvents.forEach(function(item) { 157 data[item.data.key] = item.data.value; 158 }); 159 $scope.export_data = JSON.stringify(data); 160 } 161 162 $scope.accept = function() { 163 APIUtils.deleteLogs($scope.selectedEvents).then(function() { 164 $scope.confirm = false; 165 $scope.loadLogs(); 166 }); 167 }; 168 169 $scope.resolve = function() { 170 var events = $scope.selectedEvents.filter(function(item) { 171 return item.Resolved != 1; 172 }); 173 174 if (!events.length) return; 175 176 APIUtils.resolveLogs(events).then( 177 function(data) { 178 events.forEach(function(item) { 179 item.Resolved = 1; 180 }); 181 }, 182 function(error) { 183 // TODO: Show error to user 184 console.log(JSON.stringify(error)); 185 }); 186 }; 187 188 $scope.$watch('logs', function() { 189 $scope.selectedEvents = $scope.logs.filter(function(item) { 190 return item.selected; 191 }); 192 updateExportData(); 193 }, true); 194 195 $scope.loadLogs(); 196 } 197 ]); 198})(angular); 199