blob: f55f66690f039b2634859da6e1f47031dc02a200 [file] [log] [blame]
Iftekharul Islam8b4828a2017-04-19 14:37:55 -05001/**
2 * Controller for log
3 *
4 * @module app/serverHealth
5 * @exports logController
6 * @name logController
Iftekharul Islam8b4828a2017-04-19 14:37:55 -05007 */
8
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07009window.angular && (function(angular) {
10 'use strict';
Andrew Geisslerd27bb132018-05-24 11:07:27 -070011 angular.module('app.serverHealth')
Ed Tanous26539862018-08-15 16:16:37 -070012 .config([
13 'paginationTemplateProvider',
14 function(paginationTemplateProvider) {
15 paginationTemplateProvider.setString(
16 require('../../common/directives/dirPagination.tpl.html'));
17 }
18 ])
Andrew Geisslerd27bb132018-05-24 11:07:27 -070019 .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 = [];
Gunnar Millsa4ae7db2018-09-06 16:47:01 -050027 $scope.filteredLogs = [];
beccabroek569ccf62018-10-29 13:46:53 -050028 $scope.tmz = '';
Andrew Geisslerd27bb132018-05-24 11:07:27 -070029 $scope.itemsPerPage = Constants.PAGINATION.LOG_ITEMS_PER_PAGE;
30 $scope.loading = false;
31 var expandedSelectedIdOnce = false;
Michael Davis428375e2017-08-01 15:48:34 -050032
Andrew Geisslerd27bb132018-05-24 11:07:27 -070033 var sensorType = $routeParams.type;
34 var eventId = $routeParams.id;
Michael Davis428375e2017-08-01 15:48:34 -050035
Andrew Geisslerd27bb132018-05-24 11:07:27 -070036 // priority buttons
37 $scope.selectedSeverity =
38 {all: true, low: false, medium: false, high: false};
Michael Davis428375e2017-08-01 15:48:34 -050039
Andrew Geisslerd27bb132018-05-24 11:07:27 -070040 if (sensorType == 'high') {
41 $scope.selectedSeverity.all = false;
42 $scope.selectedSeverity.high = true;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070043 }
44
Andrew Geisslerd27bb132018-05-24 11:07:27 -070045 $scope.selectedStatus = {all: true, resolved: false};
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070046
Andrew Geisslerd27bb132018-05-24 11:07:27 -070047 $scope.customSearch = '';
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070048 $scope.searchItems = [];
Andrew Geisslerd27bb132018-05-24 11:07:27 -070049 $scope.selectedEvents = [];
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070050
Andrew Geisslerd27bb132018-05-24 11:07:27 -070051 if (eventId) {
52 $scope.customSearch = '#' + eventId;
53 $scope.searchItems.push('#' + eventId);
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070054 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070055
Andrew Geisslerd27bb132018-05-24 11:07:27 -070056 $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 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070063
Andrew Geisslerd27bb132018-05-24 11:07:27 -070064 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 };
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070078
Andrew Geisslerd27bb132018-05-24 11:07:27 -070079 $scope.filterBySeverity = function(log) {
80 if ($scope.selectedSeverity.all) return true;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070081
Andrew Geisslerd27bb132018-05-24 11:07:27 -070082 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 };
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070087
Andrew Geisslerd27bb132018-05-24 11:07:27 -070088 $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 };
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070094
Andrew Geisslerd27bb132018-05-24 11:07:27 -070095 $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 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700102
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700103 if ($scope.start_date && endDate) {
Alexander Filippovdbf04812018-11-16 16:26:04 +0300104 return (
105 log.Timestamp >= $scope.start_date &&
106 log.Timestamp <= endDate);
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700107 } else {
108 return true;
109 }
110 };
111
112 $scope.filterBySearchTerms = function(log) {
Yoshie Muranakaee788622019-10-02 07:30:16 -0700113 const searchableProperties = [
114 'eventID', 'severity_code', 'description', 'priority',
115 'additional_data', 'type', 'logId'
116 ];
117 let matched = false;
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700118
Yoshie Muranakaee788622019-10-02 07:30:16 -0700119 if (!$scope.searchItems.length) return true;
120 for (const searchTerm of $scope.searchItems) {
121 if (matched) {
122 break;
123 }
124 for (const prop of searchableProperties) {
125 const propVal = log[prop];
126 if (propVal &&
127 propVal.toLowerCase().indexOf(searchTerm) !== -1) {
128 matched = true;
129 break;
130 }
131 }
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700132 }
Yoshie Muranakaee788622019-10-02 07:30:16 -0700133 return matched;
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700134 };
135
136 $scope.addSearchItem = function(searchTerms) {
137 var terms = searchTerms.split(' ');
138 terms.forEach(function(searchTerm) {
139 if ($scope.searchItems.indexOf(searchTerm) == -1) {
Yoshie Muranakaee788622019-10-02 07:30:16 -0700140 $scope.searchItems.push(searchTerm.toLowerCase());
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700141 }
142 });
143 };
144
145 $scope.clearSearchItem = function(searchTerm) {
146 $scope.searchItems = [];
147 };
148
149 $scope.removeSearchItem = function(searchTerm) {
150 var termIndex = $scope.searchItems.indexOf(searchTerm);
151
152 if (termIndex > -1) {
153 $scope.searchItems.splice(termIndex, 1);
154 }
155 };
156
157 $scope.$watch('all', function() {
beccabroek1ca1d7e2018-08-30 14:18:22 -0500158 $scope.filteredLogs.forEach(function(item) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700159 item.selected = $scope.all;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700160 });
161 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700162
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700163 function updateExportData() {
164 $scope.export_name = ($scope.selectedEvents.length == 1) ?
165 $scope.selectedEvents[0].Id + '.json' :
166 'export.json';
167 var data = {};
168 $scope.selectedEvents.forEach(function(item) {
169 data[item.data.key] = item.data.value;
170 });
171 $scope.export_data = JSON.stringify(data);
172 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700173
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700174 $scope.accept = function() {
175 APIUtils.deleteLogs($scope.selectedEvents).then(function() {
176 $scope.confirm = false;
177 $scope.loadLogs();
178 });
179 };
180
181 $scope.resolve = function() {
182 var events = $scope.selectedEvents.filter(function(item) {
183 return item.Resolved != 1;
184 });
185
186 if (!events.length) return;
187
Gunnar Mills7e48d082019-01-23 16:02:03 -0600188 APIUtils.resolveLogs(events).then(
189 function(data) {
190 events.forEach(function(item) {
191 item.Resolved = 1;
192 });
193 },
194 function(error) {
195 // TODO: Show error to user
196 console.log(JSON.stringify(error));
197 });
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700198 };
199
200 $scope.$watch('logs', function() {
201 $scope.selectedEvents = $scope.logs.filter(function(item) {
202 return item.selected;
203 });
204 updateExportData();
205 }, true);
206
207 $scope.loadLogs();
208 }
209 ]);
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500210})(angular);